2016-07-27 12 views
3

Ich bin ein Bot implementieren, wo ich E-Mails lesen kann und ich bin der Gmail API folgen. Ich kann alle Etiketten lesen und habe sie in der Liste gespeichert. Ich bin nicht in der Lage, die Nachrichten innerhalb des Etiketts zu lesenGmail API Python-Implementierung

credentials = get_credentials() 
http = credentials.authorize(httplib2.Http()) 
service = discovery.build('gmail', 'v1', http=http) 
results = service.users().labels().get('me',"INBOX").execute() 
print (results.getName()) 

und ich erhalte eine Fehlermeldung -

results = service.users().labels().get('me',"INBOX").execute() 
TypeError: method() takes exactly 1 argument (3 given) 

Die offizielle API-Dokumentation Implementierung get label in Java ist. Kann mir bitte jemand sagen, was ich falsch mache?

SCOPES = 'https://www.googleapis.com/auth/gmail.readonly','https://mail.google.com/','https://www.googleapis.com/auth/gmail.modify','https://www.googleapis.com/auth/gmail.labels' 
+2

Etiketten und Nachrichten sind getrennte Dinge. Sie müssen [Nachrichten auflisten] (https://developers.google.com/gmail/api/v1/reference/users/messages/list#examples) und dann [get this] (https://developers.google.com/gmail/api/v1/Referenz/Benutzer/Nachrichten/get # Beispiele) getrennt. – Tholle

+0

Sind meine Bereiche ordnungsgemäß deklariert? – CyberDuck

+0

Die offizielle Dokumentation ist übrigens auch in Python verfügbar: https://developers.google.com/gmail/api/v1/reference/users/messages/list#python –

Antwort

2

Ich denke, das ist, was Sie tun sollen:

results = service.users().labels().list(userId='me').execute() 

Von der offiziellen Dokumentation: https://developers.google.com/gmail/api/quickstart/python

Bei der weiteren Lektüre scheint dieser Prozess eine 2-stufig zu sein.

Zuerst müssen Sie die Liste der Nachrichten mit einer Abfrage greifen:

response = service.users().messages().list(userId=user_id, q=query, 
            pageToken=page_token).execute() 

Dann greifen Sie die Nachricht von seiner ID:

message = service.users().messages().get(userId=user_id, id=msg_id).execute() 
0

Der Fehler ist, dass Sie die verwenden ' Get 'Methode für Etiketten und nicht für Nachrichten. Diese get-Methode wird verwendet, um Informationen über ein Label zu ermitteln, z. B. die Anzahl der ungelesenen Nachrichten in diesem Label.

Sie können auf der Linie siehe unten Sie für die .labels

results = service.users().labels().get('me',"INBOX").execute() 

Sie richtig fragen sind, dass dieses Beispiel nur in Java dargestellt ist. Wenn Sie möchten, dass die get (for labels) -Methode in Python funktioniert, ist hier ein Beispiel für den zu verwendenden Code.

results = service.users().labels().get(userId='me',id='Label_15').execute()