2016-06-15 10 views
-1

Ich rufe Nachrichten von meinem Google Mail-Konto mithilfe der Google Mail-API ab. Insbesondere diese URL der E-Mail mit Hangout-Gespräche mit: https://www.googleapis.com/gmail/v1/users/me/messages?q=in:chatsInline-Bilder aus Google Mail API abrufen?

Wenn ich in einer Nachricht eingeben, sehe ich diese Struktur

{ 
    "id": "1555561f7b8e1sdf56b", 
    "threadId": "155552511dfsd83ce98", 
    "labelIds": [ 
    "CHAT" 
    ], 
    "snippet": "df", 
    "historyId": "270812", 
    "internalDate": "1466016331704", 
    "payload": { 
    "partId": "", 
    "mimeType": "text/html", 
    "filename": "", 
    "headers": [ 
     { 
     "name": "From", 
     "value": "\"Oscar J. Irún\" <[email protected]>" 
     } 
    ], 
    "body": { 
     "size": 2, 
     "data": "ZGY=" 
    } 
    }, 
    "sizeEstimate": 100 
} 

wie Sie sehen können, ist der Körper Nachricht ist „df“. Alles ist soweit in Ordnung.

Das Problem tritt auf, wenn die Hangout-Nachricht ein Bild ist. Das Feld snippet ist leer, und in der Nachricht wird keine Anlage angezeigt. Dies ist ein Beispiel:

{ 
    "id": "155558233274d78c91", 
    "threadId": "15fd5552511d83ce98", 
    "labelIds": [ 
    "CHAT" 
    ], 
    "snippet": "", 
    "historyId": "27sd0827", 
    "internalDate": "1466018445133", 
    "payload": { 
    "mimeType": "text/html", 
    "filename": "", 
    "headers": [ 
     { 
     "name": "From", 
     "value": "\"Oscar J. Irún\" <[email protected]>" 
     } 
    ], 
    "body": { 
     "size": 0, 
     "data": "" 
    } 
    }, 
    "sizeEstimate": 100 
} 

Ich muss diese Inline-Bilder abrufen. Jede Hilfe wird geschätzt!

+0

was genau ist deine Frage? Fragen Sie, wie Sie die URL des Bildes erhalten? –

+0

Sorry, ja @WoodrowBarlow. Bearbeitet meine Frage –

+0

Das Erhalten von Chatnachrichten über die Google Mail-API wird [nicht unterstützt] (http://stackoverflow.com/questions/25316138/find-timestamp-for-hangout-and-chat-messages-retrieved-with-gmail-api), daher ist es wahrscheinlich nicht möglich, Anhänge zu erhalten. – Tholle

Antwort

1

Sie können Anhänge mithilfe von Users.messages.attachments:get abrufen. Beachten Sie, dass diese Anfrage eine Autorisierung erfordert. Alle Anforderungen an die Google Mail-API müssen von einem authentifizierten Benutzer autorisiert werden. Gmail verwendet das Protokoll zum Authentifizieren eines Google-Kontos und zum Autorisieren des Zugriffs auf Benutzerdaten.

HTTP-Anforderung

GET https://www.googleapis.com/gmail/v1/users/userId/messages/messageId/attachments/id 

public static void getAttachments(Gmail service, String userId, String messageId) 
throws IOException { 
Message message = service.users().messages().get(userId, messageId).execute(); 
List<MessagePart> parts = message.getPayload().getParts(); 
for (MessagePart part : parts) { 
if (part.getFilename() != null && part.getFilename().length() > 0) { 
String filename = part.getFilename(); 
String attId = part.getBody().getAttachmentId(); 
MessagePartBody attachPart = service.users().messages().attachment(). 
get(userId, messageId, attId).execute(); 
byte[] fileByteArray = Base64.decodeBase64(attachPart.getData()); 
FileOutputStream fileOutFile = 
new FileOutputStream("directory_to_store_attachments" + filename); 
fileOutFile.write(fileByteArray); 
file OutFile.close(); 
} 
} 
} 
+0

Danke, aber das Problem ist mit den Hangouts Nachrichten. Es erscheint leer, ohne Anhänge oder irgendetwas. Dies funktioniert für eine normale E-Mail, die mit der Google Mail-API abgerufen wird, aber nicht für Hangouts-Nachrichten. –

0

GERADE FYI für PHP die Lösung ist so etwas wie dies: base64_decode (strtr (gmail- $> service-> users_messages_attachments-> get ('me', Nachricht $ -> id, $ arrPart ['body'] ['attachmentId']) -> Daten, '-_', '+ /'));