Kalo te dokumentacioni
Python

Kontaktet

`contacts.list`, `get`, `create`, `save`, `update`, `set_audiences`, `delete`, `delete_many`, `list_people`, `set_photo`, `remove_photo`, `block`, `unblock`, `list_threads` dhe `activity`.

Çdo metodë

usage.py
from openemail import openemail page = openemail.contacts.list(limit=100)contact = openemail.contacts.get('[email protected]') saved = openemail.contacts.create({    'email': '[email protected]',    'name': 'Grace Hopper',    'notes': 'Met at the compiler workshop',}) openemail.contacts.update(saved['email'], {'notes': None})openemail.contacts.set_audiences(saved['email'], {    'audienceIds': ['aud_4c1b8e2a7d9f05c36b4e8a71'],})openemail.contacts.delete(saved['email']) print(len(page['items']), page['hasMore'], contact['source'], contact['lastSeenAt'])

Të parët ata që janë parë së fundmi, kurse kontaktet të cilëve nuk u është dërguar kurrë mail vijnë të fundit. source është auto kur rreshti u shkrua sepse një anëtar i dërgoi asaj adrese një mesazh nga kompozuesi i aplikacionit, që është një pohim thelbësisht i ndryshëm nga fakti se dikush e ka ruajtur. Mail-i që mbërrin nga një adresë nuk shkruan asgjë, e as një dërgim përmes këtij API-je.

Libri i adresave i përket hapësirës së punës dhe jo një personi, pra një kontakt i ruajtur nga cilido anëtar është kontakti që sheh çdo anëtar dhe çdo çelës. create e shkruan source si manual dhe e vendos kontaktin te audienca e parazgjedhur në çastin që shkruhet. Emërtoni listat tuaja te audienceIds për t'i bashkuar në të njëjtën thirrje, gjë që kërkon edhe audiences:write, ose shtojeni kontaktin më vonë me openemail.audiences.add_contact. set_audiences thotë saktësisht në cilat lista është një kontakt, me një thirrje.

Adresat ruhen me shkronja të vogla dhe klienti e kodon atë që jepni, kështu që [email protected] arrin te rreshti i duhur. Adresa është identiteti, prandaj update nuk mund ta ndryshojë: zhvendosja e një kontakti është një delete dhe një create.

Parametrat: contacts.list

limitint
Sa kontakte të kthehen për faqe: një integer nga 1 deri në 200, me parazgjedhje 50. I nënshtrohet konvertimit, pra `'100'` nga një query string është në rregull, kurse një vlerë jashtë intervalit është një 422 dhe jo një vlerë e shtrënguar brenda tij.
cursorstr
`nextCursor` nga faqja e mëparshme. Mos e ndërtoni kurrë vetë: një cursor që emërton një kontakt që nuk ekziston më është një 400 `invalid_cursor`, që do të thotë se gjendja juaj e faqosjes është e vjetruar dhe ecja duhet të rifillojë pa cursor.
sourceContactSource
`'manual'` për kontaktet që dikush i ruajti me qëllim, `'auto'` për ato që i regjistroi kompozuesi i aplikacionit. Lëreni jashtë për të gjithë librin.
qstr
Kërkon në emër dhe në adresë, deri në 200 karaktere. Kur asgjë nuk përputhet saktësisht në faqen e parë, kthehen në vend të kësaj shkrime të afërta, dhe faqet që vijojnë vazhdojnë të kërkojnë në të njëjtën mënyrë.

Përgjigjja: ContactResource

contacts.list kthen një Page[ContactResource], kështu që rreshtat janë te page['items'] dhe përshkimi ndjek page['nextCursor'] sa kohë që page['hasMore'] është True, gjë që list_all dhe iterate e bëjnë për ju. get, create, save, update, set_audiences, set_photo dhe remove_photo kthejnë secila një ContactDetailResource, të njëjtin rresht plus audiences. Libri i adresave është i pakufizuar, prandaj kjo rrugë faqos në vend që të kthejë një listë që ndalej në heshtje te 200.

objectLiteral['contact']
Gjithmonë stringu `contact`, si te rreshtat e listës ashtu edhe te `get`.
emailstr
Adresa, e ruajtur me shkronja të vogla, kështu që `[email protected]` dhe `[email protected]` janë një kontakt i vetëm, dhe çelësi që merr çdo metodë e contacts, meqë nuk ekspozohet asnjë id kontakti. Rreshtat i përkasin hapësirës së punës dhe jo anëtarit apo çelësit që i shkroi, pra çdo anëtar dhe çdo çelës i hapësirës lexon e shkruan një libër të vetëm adresash.
namestr | None
`None` kur për adresën nuk është regjistruar kurrë ndonjë emër. Një shkrim automatik mban një të tillë vetëm kur header-i dha diçka tjetër nga vetë adresa, dhe ai nuk mund të mbishkruajë kurrë një emër që e shkroi përdoruesi.
sourceContactSource | str
`auto` do të thotë se rreshti u shkrua sepse përdoruesi i dërgoi mail asaj adrese; `manual` do të thotë se dikush e futi me dorë, një pohim thelbësisht i ndryshëm, dhe një upsert nuk e ul kurrë `manual` prapë në `auto`. Mail-i që mbërrin nga një adresë nuk shkruan fare rresht, me qëllim, pra dikush që vetëm ju ka shkruar nuk gjendet këtu; bashkimi mbetet i hapur sepse kolona është tekst i lirë me parazgjedhje `manual`.
notesstr | None
Tekst i lirë që dikush e shkroi për këtë person, në aplikacion ose përmes `update`, kurrë i gjeneruar. `None` kur askush nuk ka shkruar ndonjë, dhe një `None` i shprehur te `update` e pastron.
lastSeenAtstr | None
ISO-8601 UTC, rifreskohet sa herë që një anëtar i dërgon asaj adrese nga kompozuesi i aplikacionit, jo kur mbërrin postë prej saj, gjë që nuk shkruan asgjë. `None` te një kontakt i ruajtur përmes `create` të cilit nuk i është dërguar kurrë postë, dhe këta renditen të fundit në renditjen zbritëse sipas `lastSeenAt` që kthen kjo rrugë.
audienceslist[ContactAudienceResource]
Vetëm te `get`, `create`, `save`, `update`, `set_audiences`, `set_photo` dhe `remove_photo`, kurrë te rreshtat e listës. Çdo audiencë ku është kontakti, si një dict me `id`, `name` dhe `builtin`, përfshirë atë të parazgjedhurën. `builtin` është `default` te audienca së cilës i përket çdo kontakt dhe `None` te një që e krijoi dikush, ndaj degëzoni sipas tij dhe jo sipas emrit, që mund ta ndryshojë kushdo.
photoUrlstr | None
Ku shërbehet fotoja e kontaktit, ose `None` kur kontakti nuk ka. `set_photo` e vendos dhe çdo ngarkim merr një URL të re.

Caktimi i audiencave të një kontakti

set_audiences(email, {'audienceIds': [...]}) përcakton saktësisht në cilat audienca është një kontakt, me një kërkesë. Kontakti hyn në çdo audiencë të listuar ku ende nuk është dhe del nga çdo tjetër, dhe thirrja kthen ContactDetailResource pas ndryshimit. Kërkon audiences:write, sepse shkruan anëtarësime dhe jo kontaktin, dhe përsëritja e saj nuk ndryshon asgjë.

Audienca e parazgjedhur ruhet gjithmonë, prandaj {'audienceIds': []} e lë kontaktin vetëm në audiencën e parazgjedhur. Pranon deri në 100 id. Një id që nuk emërton asnjë audiencë në këtë hapësirë pune jep 404 audience_not_found dhe asgjë nuk ndryshon, ndërsa një adresë që nuk është kontakt jep 404 contact_not_found.

Të gjithë në faqen Kontaktet

list_people liston personat që shfaq faqja Kontaktet në aplikacion: kontaktet e ruajtura dhe çdo adresë e parë në postë, secila me saved, threads dhe lastAt. list janë vetëm kontaktet e ruajtura. Adresat e para në postë vijnë vetëm kur çelësi mban edhe threads:read, dhe page['seen'] thotë nëse erdhën. sort është recent, name ose threads, q kërkon te emrat, adresat dhe shënimet, dhe blocked=True mban personat që i bllokon lista e bllokimit e hapësirës së punës, përfshirë rregullat për domene të tëra. blockedBy emërton rregullin në çdo rresht.

people.py
from openemail import openemail page = openemail.contacts.list_people(sort='threads', limit=50) for person in page['items']:    if not person['saved'] and (person['threads'] or 0) > 5:        openemail.contacts.save(person['email']) blocked = openemail.contacts.list_all_people(blocked=True)

list_all_people dhe iterate_people përshkojnë çdo faqe. Kursori është i errët, prandaj ktheje nextCursor siç erdhi, me të njëjtat sort, q dhe blocked.

Ruajtja, fshirja dhe fotot

save(email, {'name': ..., 'notes': ...}) është Shto te kontaktet dhe Mbaje te kontaktet: ruan një adresë që ende nuk është kontakt, mban si të ruajtur me dorë një të regjistruar nga një dërgim dhe kthen një të fshirë. delete është Fshi: heq kontaktin e ruajtur dhe fsheh adresën, që redaktori të mos e regjistrojë sërish, dhe pranon edhe një adresë të parë vetëm në postë. wasSaved thotë cili rast ishte. delete_many fshin deri në 200 në një thirrje.

photo.py
from pathlib import Path from openemail import openemail openemail.contacts.save('[email protected]', {'name': 'Grace Hopper'}) photo = Path('grace.jpg').read_bytes()contact = openemail.contacts.set_photo('[email protected]', photo, content_type='image/jpeg') openemail.contacts.remove_photo('[email protected]')openemail.contacts.delete_many(['[email protected]', '[email protected]'])

set_photo i dërgon bajtet e imazhit ashtu siç janë: PNG, JPEG, WebP ose GIF deri në 5 MB, të përshtatura në një katror 512 piksel. Jepni content_type=, sepse bajtet nuk mbartin tip të vetin: pa të ngarkimi shkon si application/octet-stream, që refuzohet me një 422 invalid_image. Adresa duhet të jetë fillimisht një kontakt i ruajtur.

Bllokimi

block(email) vendos adresën në listën e bllokimit të hapësirës së punës që posta prej saj të refuzohet, duke hedhur çdo etiketë me plus, dhe unblock(email) heq çdo rregull që e bllokon. Të dyja kërkojnë settings:write, sepse ndryshojnë listën e bllokimit dhe jo kontaktin, dhe asnjëra nuk kërkon që adresa të jetë kontakt.

Kur unblock heq një rregull për një domen të tërë, removed e liston me list të vendosur blockedDomains, dhe bashkë me të zhbllokohen të gjithë në atë domen.

Bisedat dhe veprimtaria

list_threads(email) shfleton faqe pas faqeje fijet që adresa ka shkruar ose ku i është shkruar, në çdo dosje, dhe list_all_threads dhe iterate_threads i përshkojnë të gjitha. activity(email) kthen numrat pas skedës Veprimtaria të një kontakti: të marra dhe të dërguara për çdo interval, fije që presin përgjigjen tënde, dhe koha mesatare e përgjigjes në secilin drejtim. Të dyja kërkojnë threads:read.

activity.py
import time from openemail import openemail threads = openemail.contacts.list_threads('[email protected]', q='invoice') activity = openemail.contacts.activity(    '[email protected]',    minutes=30 * 24 * 60,    grain='day',    offset_minutes=time.localtime().tm_gmtoff // 60,) print(len(threads['items']), activity['totals']['waiting'])

Referencë