Lua
Lua
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 Lua Downloads
local chilkat = require("chilkat")
-- This example requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
local http = chilkat.Http.new()
http.auth_token = "GMAIL-ACCESS-TOKEN"
local userId = "me"
http:set_url_var("userId", userId)
local query = "subject:questions"
http:set_url_var("query", query)
local url = "https://www.googleapis.com/gmail/v1/users/{$userId}/messages?q={$query}"
local sb = chilkat.StringBuilder.new()
local success = http:quick_get_sb(url, sb)
if not success then
print(http.last_error_text)
return
end
local json = chilkat.JsonObject.new()
json:load_sb(sb)
json.emit_compact = false
print(json:emit())
if http.last_status ~= 200 then
print("Failed.")
return
end
-- 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.
local json2 = chilkat.JsonObject.new()
local i = 0
local numMessages = json:size_of_array("messages")
while i < numMessages do
json.i = i
local id = json:string_of("messages[i].id")
json2.i = i
json2:update_string("ids[i]", id)
i = i + 1
end
-- 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"
local labelId = "Label_43"
json2:update_string("addLabelIds[0]", labelId)
json2:update_new_array("removeLabelIds")
json2.emit_compact = false
print(json2:emit())
-- Send the batchModify
url = "https://www.googleapis.com/gmail/v1/users/{$userId}/messages/batchModify"
local resp = chilkat.HttpResponse.new()
success = http:http_json("POST", url, json2, "application/json", resp)
if not success then
print(http.last_error_text)
return
end
print("status = " .. resp.status_code)
-- A 204 response status indicate success.
if resp.status_code ~= 204 then
print(resp.body_str)
print("Failed.")
return
end
-- The 204 response has an empty response body..
print("BatchModify success!")