Sample code for 30+ languages & platforms
PureBasic

Get GMail Message Metadata

See more GMail REST API Examples

Demonstrates how to get the metadata for each message in a list of message IDs.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkJsonObject.pb"

Procedure ChilkatExample()

    success.i = 0

    ; This example requires the Chilkat API to have been previously unlocked.
    ; See Global Unlock Sample for sample code.

    http.i = CkHttp::ckCreate()
    If http.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkHttp::setCkAuthToken(http, "ACCESS_TOKEN")

    CkHttp::setCkAccept(http, "application/json")

    ; Let's say we have the following JSON containing a list of message ID's

    ; {
    ;   "messages": [
    ;     {
    ;       "id": "1712bc1dc22da2a2",
    ;       "threadId": "1712bc1dc22da2a2"
    ;     },
    ;     {
    ;       "id": "1712b94fa2168040",
    ;       "threadId": "1712b94fa2168040"
    ;     },
    ;     {
    ;       "id": "1711e4bd96ded05e",
    ;       "threadId": "1711e4bd96ded05e"
    ;     },
    ;     {
    ;       "id": "1711de0d119e751e",
    ;       "threadId": "1711de0d119e751e"
    ;     },
    ;     {
    ;       "id": "1711c81a43050f59",
    ;       "threadId": "1711c81a43050f59"
    ;     },
    ;     {
    ;       "id": "1711c2c1516abce5",
    ;       "threadId": "1711c2c1516abce5"
    ;     },
    ;     {
    ;       "id": "1711c161e655c915",
    ;       "threadId": "1711c161e655c915"
    ;     },
    ;     {
    ;       "id": "171199c6e454558c",
    ;       "threadId": "171199c6e454558c"
    ;     },
    ;     {
    ;       "id": "17119474c8aa248e",
    ;       "threadId": "17119474c8aa248e"
    ;     }
    ;   ],
    ;   "nextPageToken": "16710921492249671162",
    ;   "resultSizeEstimate": 309
    ; }

    ; Normally your program would have the above JSON in a string variable (obtained from a previous call to get
    ; a list of message IDs from a GMail mailbox).  In this example, we'll load the JSON from a file.
    jsonMsgIds.i = CkJsonObject::ckCreate()
    If jsonMsgIds.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkJsonObject::ckLoadFile(jsonMsgIds,"qa_data/json/gmail_message_ids.json")

    resp.i = CkHttpResponse::ckCreate()
    If resp.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    id.s
    i.i = 0
    count_i.i = CkJsonObject::ckSizeOfArray(jsonMsgIds,"messages")
    While i < count_i
        CkJsonObject::setCkI(jsonMsgIds, i)
        id = CkJsonObject::ckStringOf(jsonMsgIds,"messages[i].id")

        ; Get the metadata for this message ID.
        CkHttp::ckSetUrlVar(http,"id",id)

        success = CkHttp::ckHttpNoBody(http,"GET","https://www.googleapis.com/gmail/v1/users/userId/messages/{$id}?format=metadata",resp)
        If success = 0
            Debug CkHttp::ckLastErrorText(http)
            CkHttp::ckDispose(http)
            CkJsonObject::ckDispose(jsonMsgIds)
            CkHttpResponse::ckDispose(resp)
            ProcedureReturn
        EndIf

        Debug "Response Status Code: " + Str(CkHttpResponse::ckStatusCode(resp))

        jsonResponse.i = CkJsonObject::ckCreate()
        If jsonResponse.i = 0
            Debug "Failed to create object."
            ProcedureReturn
        EndIf

        CkJsonObject::ckLoad(jsonResponse,CkHttpResponse::ckBodyStr(resp))
        CkJsonObject::setCkEmitCompact(jsonResponse, 0)
        Debug CkJsonObject::ckEmit(jsonResponse)

        If CkHttpResponse::ckStatusCode(resp) <> 200
            Debug "Failed."
            CkHttp::ckDispose(http)
            CkJsonObject::ckDispose(jsonMsgIds)
            CkHttpResponse::ckDispose(resp)
            CkJsonObject::ckDispose(jsonResponse)
            ProcedureReturn
        EndIf

        i = i + 1
    Wend

    ; Use this online tool to generate parsing code from sample JSON: 
    ; Generate Parsing Code from JSON


    CkHttp::ckDispose(http)
    CkJsonObject::ckDispose(jsonMsgIds)
    CkHttpResponse::ckDispose(resp)
    CkJsonObject::ckDispose(jsonResponse)


    ProcedureReturn
EndProcedure