Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Delphi ActiveX) BatchModify - Add a Label to each Message in Search ResultsSearchs GMail for messages meeting a criteria and adds a label to each message found.
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Chilkat_TLB; ... procedure TForm1.Button1Click(Sender: TObject); var success: Integer; http: TChilkatHttp; userId: WideString; query: WideString; url: WideString; sb: TChilkatStringBuilder; json: TChilkatJsonObject; json2: TChilkatJsonObject; i: Integer; numMessages: Integer; id: WideString; labelId: WideString; resp: IChilkatHttpResponse; begin // This example requires the Chilkat API to have been previously unlocked. // See Global Unlock Sample for sample code. http := TChilkatHttp.Create(Self); http.AuthToken := 'GMAIL-ACCESS-TOKEN'; userId := 'me'; http.SetUrlVar('userId',userId); query := 'subject:questions'; http.SetUrlVar('query',query); url := 'https://www.googleapis.com/gmail/v1/users/{$userId}/messages?q={$query}'; sb := TChilkatStringBuilder.Create(Self); success := http.QuickGetSb(url,sb.ControlInterface); if (success <> 1) then begin Memo1.Lines.Add(http.LastErrorText); Exit; end; json := TChilkatJsonObject.Create(Self); json.LoadSb(sb.ControlInterface); json.EmitCompact := 0; Memo1.Lines.Add(json.Emit()); if (http.LastStatus <> 200) then begin Memo1.Lines.Add('Failed.'); Exit; 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. json2 := TChilkatJsonObject.Create(Self); i := 0; numMessages := json.SizeOfArray('messages'); while (i < numMessages) do begin json.I := i; id := json.StringOf('messages[i].id'); json2.I := i; json2.UpdateString('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" labelId := 'Label_43'; json2.UpdateString('addLabelIds[0]',labelId); json2.UpdateNewArray('removeLabelIds'); json2.EmitCompact := 0; Memo1.Lines.Add(json2.Emit()); // Send the batchModify url := 'https://www.googleapis.com/gmail/v1/users/{$userId}/messages/batchModify'; resp := http.PostJson3(url,'application/json',json2.ControlInterface); if (http.LastMethodSuccess <> 1) then begin Memo1.Lines.Add(http.LastErrorText); Exit; end; Memo1.Lines.Add('status = ' + IntToStr(resp.StatusCode)); // A 204 response status indicate success. if (resp.StatusCode <> 204) then begin Memo1.Lines.Add(resp.BodyStr); Memo1.Lines.Add('Failed.'); Exit; end; // The 204 response has an empty response body.. Memo1.Lines.Add('BatchModify success!'); end; |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.