Visual FoxPro
Visual FoxPro
BatchModify - Add a Label to each Message in Search Results
See more GMail REST API Examples
Searchs GMail for messages meeting a criteria and adds a label to each message found.Chilkat Visual FoxPro Downloads
LOCAL lnSuccess
LOCAL loHttp
LOCAL lcUserId
LOCAL lcQuery
LOCAL lcUrl
LOCAL loSb
LOCAL loJson
LOCAL loJson2
LOCAL i
LOCAL lnNumMessages
LOCAL lcId
LOCAL lcLabelId
LOCAL loResp
lnSuccess = 0
* This example requires the Chilkat API to have been previously unlocked.
* See Global Unlock Sample for sample code.
loHttp = CreateObject('Chilkat.Http')
loHttp.AuthToken = "GMAIL-ACCESS-TOKEN"
lcUserId = "me"
loHttp.SetUrlVar("userId",lcUserId)
lcQuery = "subject:questions"
loHttp.SetUrlVar("query",lcQuery)
lcUrl = "https://www.googleapis.com/gmail/v1/users/{$userId}/messages?q={$query}"
loSb = CreateObject('Chilkat.StringBuilder')
lnSuccess = loHttp.QuickGetSb(lcUrl,loSb)
IF (lnSuccess = 0) THEN
? loHttp.LastErrorText
RELEASE loHttp
RELEASE loSb
CANCEL
ENDIF
loJson = CreateObject('Chilkat.JsonObject')
loJson.LoadSb(loSb)
loJson.EmitCompact = 0
? loJson.Emit()
IF (loHttp.LastStatus <> 200) THEN
? "Failed."
RELEASE loHttp
RELEASE loSb
RELEASE loJson
CANCEL
ENDIF
* If successful, the received JSON looks like this:
* {
* "messages": [
* {
* "id": "166f583051d36144",
* "threadId": "166f583051d36144"
* },
* {
* "id": "166f5815e1f36144",
* "threadId": "166f5815e1f36144"
* },
* ...
* {
* "id": "166f580639e36144",
* "threadId": "166f580639e36144"
* },
* {
* "id": "15dbc2e28ec789c6",
* "threadId": "15dbc2e28ec789c6"
* }
* ],
* "nextPageToken": "13434766102274844688",
* "resultSizeEstimate": 103
* }
*
* Next, we'll be sending an HTTP POST to add the label "questions" to each message in the
* search results. The JSON to be sent for the batchModify is this:
* {
* "ids": [
* string
* ],
* "addLabelIds": [
* string
* ],
* "removeLabelIds": [
* string
* ]
* }
* We'll omit "removeLabelIds" because we're not removing any labels.
* We are parsing the JSON search results, and at the same time building the batchModify JSON.
loJson2 = CreateObject('Chilkat.JsonObject')
i = 0
lnNumMessages = loJson.SizeOfArray("messages")
DO WHILE (i < lnNumMessages)
loJson.I = i
lcId = loJson.StringOf("messages[i].id")
loJson2.I = i
loJson2.UpdateString("ids[i]",lcId)
i = i + 1
ENDDO
* We need the id of the label (not the name).
* I know the name of the label is "questions", but I need to know the id.
* See this example: Get Label Id by Name
* The id of my label named "questions" is "Label_43"
lcLabelId = "Label_43"
loJson2.UpdateString("addLabelIds[0]",lcLabelId)
loJson2.UpdateNewArray("removeLabelIds")
loJson2.EmitCompact = 0
? loJson2.Emit()
* Send the batchModify
lcUrl = "https://www.googleapis.com/gmail/v1/users/{$userId}/messages/batchModify"
loResp = CreateObject('Chilkat.HttpResponse')
lnSuccess = loHttp.HttpJson("POST",lcUrl,loJson2,"application/json",loResp)
IF (lnSuccess = 0) THEN
? loHttp.LastErrorText
RELEASE loHttp
RELEASE loSb
RELEASE loJson
RELEASE loJson2
RELEASE loResp
CANCEL
ENDIF
? "status = " + STR(loResp.StatusCode)
* A 204 response status indicate success.
IF (loResp.StatusCode <> 204) THEN
? loResp.BodyStr
? "Failed."
RELEASE loHttp
RELEASE loSb
RELEASE loJson
RELEASE loJson2
RELEASE loResp
CANCEL
ENDIF
* The 204 response has an empty response body..
? "BatchModify success!"
RELEASE loHttp
RELEASE loSb
RELEASE loJson
RELEASE loJson2
RELEASE loResp