from apiclient import discovery from httplib2 import Http from oauth2client.service_account import ServiceAccountCredentials SCOPES = 'https://www.googleapis.com/auth/chat.bot' creds = ServiceAccountCredentials.from_json_keyfile_name( 'svc_acct.json', SCOPES) CHAT = discovery.build('chat', 'v1', http=creds.authorize(Http())) room = 'spaces/<ROOM-or-DM>' message = {'text': 'Hello world!'} CHAT.spaces().messages().create(parent=room, body=message).execute()
import requests import json URL = 'https://chat.googleapis.com/...&thread_key=T12345' message = {'text': 'Hello world!'} requests.post(URL, data = json.dumps(message))
curl
curl \ -X POST \ -H 'Content-Type: application/json' \ 'https://chat.googleapis.com/...&thread_key=T12345' \ -d '{"text": "Hello!"}'
function processEvent(req, rsp) { var event = req.body; // event type received var message; // JSON response message if (event.type == 'REMOVED_FROM_SPACE') { // no response as bot removed from room return; } else if (event.type == 'ADDED_TO_SPACE') { // bot added to room; send welcome message message = {text: 'Thanks for adding me!'}; } else if (event.type == 'MESSAGE') { // message received during normal operation message = responseForMsg(event.message.text); } else if (event.type == 'CARD_CLICKED') { // user-click on card UI var action = event.action; message = responseForClick( action.actionMethodName, action.parameters); } rsp.send(message); };
"conferenceData": { "entryPoints": [ { "entryPointType": "video", "uri": "https://meet.google.com/wix-pvpt-njj", "label": "meet.google.com/wix-pvpt-njj" }, { "entryPointType": "more", "uri": "https://tel.meet/wix-pvpt-njj?pin=1701789652855", "pin": "1701789652855" }, { "entryPointType": "phone", "uri": "tel:+44-20-3873-7654", "label": "+44 20 3873 7654", "pin": "6054226" } ], "conferenceSolution": { "key": { "type": "hangoutsMeet" }, "name": "Hangouts Meet", "iconUri": "https://blogger.googleusercontent.com/img/proxy/AVvXsEiUIHz-NgXI9vIyWFw_i4SRScmLsO5A8HsaewAv9vcquXYaJl8_3Nf0FfGqPh5lG_VF5QrL977jukLkCrHHWe7nFq1rL550o7YFE8t4Ssm0veyIJsXhlSa6AVg1IZlwt_ABhCTkERtnFNe32jNkMFfEIF4ZadjPxlaFd78ZpDYhJM-7Ym26aPfRijHe_KIEiyemAn7xEsQuhqWoOuM=" }, "conferenceId": "wix-pvpt-njj", "signature": "ADwwud9tLfjGQPpT7bdP8f3bq3DS" }
var solution = event.conferenceData.conferenceSolution; var content = document.getElementById("content"); var text = document.createTextNode("Join " + solution.name); var icon = document.createElement("img"); icon.src = solution.iconUri; content.appendChild(icon); content.appendChild(text);
var eventPatch = { conferenceData: { createRequest: {requestId: "7qxalsvy0e"} } }; gapi.client.calendar.events.patch({ calendarId: "primary", eventId: "7cbh8rpc10lrc0ckih9tafss99", resource: eventPatch, sendNotifications: true, conferenceDataVersion: 1 }).execute(function(event) { console.log("Conference created for event: %s", event.htmlLink); });
"conferenceData": { "createRequest": { "requestId": "7qxalsvy0e", "conferenceSolutionKey": { "type": "hangoutsMeet" }, "status": { "statusCode": "pending" } } }
start
-- Start generating slides. -- TODO: Get Client Secrets TODO: Authorize TODO: Get Data from BigQuery TODO: Create Slides TODO: Open Slides -- Finished generating slides. --
WITH AllLicenses AS ( SELECT * FROM `bigquery-public-data.github_repos.licenses` ) SELECT license, COUNT(*) AS count, ROUND((COUNT(*) / (SELECT COUNT(*) FROM AllLicenses)) * 100, 2) AS percent FROM `bigquery-public-data.github_repos.licenses` GROUP BY license ORDER BY count DESC LIMIT 10
GET https://www.googleapis.com/admin/reports/v1/activity/users/userKey
GET https://www.googleapis.com/admin/reports/v1/activity/users/all/applications/drive
Person contactToCreate = new Person(); List names = new ArrayList<>(); names.add(new Name().setGivenName("John").setFamilyName("Doe")); contactToCreate.setNames(names); Person createdContact = peopleService.people().createContact(contactToCreate).execute();
String resourceName = "people/c12345"; // existing contact resource name Person contactToUpdate = peopleService.people().get(resourceName) .setPersonFields("names,emailAddresses") .execute(); List emailAddresses = new ArrayList<>(); emailAddresses.add(new EmailAddress().setValue("john.doe@gmail.com")); contactToUpdate.setEmailAddresses(emailAddresses); Person updatedContact = peopleService.people().updateContact(contactToUpdate) .setUpdatePersonFields("emailAddresses") .execute();
var TIMEZONE = "America/Los_Angeles"; var EVENT = { "start": {"dateTime": "2017-07-01T19:00:00", "timeZone": TIMEZONE}, "end": {"dateTime": "2017-07-01T22:00:00", "timeZone": TIMEZONE}, "recurrence": ["RRULE:FREQ=MONTHLY;INTERVAL=2;UNTIL=20171231"] };
GCAL.events().patch(calendarId='primary', eventId=EVENT_ID, sendNotifications=True, body=EVENT).execute()
{ "repeatCell": { "range": { "endRowIndex": 1 }, "cell": { "userEnteredFormat": { "textFormat": { "bold": true } } }, "fields": "userEnteredFormat/textFormat/bold", } }
"fields": "userEnteredFormat/textFormat(bold,italic)"
function getIndexesOfFilteredRows(ssId, sheetId) { var hiddenRows = []; // limit what's returned from the API var fields = "sheets(data(rowMetadata(hiddenByFilter)),properties/sheetId)"; var sheets = Sheets.Spreadsheets.get(ssId, {fields: fields}).sheets; for (var i = 0; i < sheets.length; i++) { if (sheets[i].properties.sheetId == sheetId) { var data = sheets[i].data; var rows = data[0].rowMetadata; for (var j = 0; j < rows.length; j++) { if (rows[j].hiddenByFilter) hiddenRows.push(j); } } } return hiddenRows; }
function setSheetBasicFilter(ssId, BasicFilterSettings) { //requests is an array of batchrequests, here we only use setBasicFilter var requests = [ { "setBasicFilter": { "filter": BasicFilterSettings } } ]; Sheets.Spreadsheets.batchUpdate({'requests': requests}, ssId); }
num_docs_internally_visible, num_docs_externally_visible, num_docs_shared_outside_domain.
addresses = GMAIL.users().settings().sendAs().list( userId='me' ).execute().get('sendAs')
{ "sendAs": [{ "sendAsEmail": string, "displayName": string, "replyToAddress": string, "signature": string, "isPrimary": boolean, "isDefault": boolean, "treatAsAlias": boolean, "smtpMsa": { "host": string, "port": integer, "username": string, "password": string, "securityMode": string }, "verificationStatus": string }, ...] }
addresses = GMAIL.users().settings().sendAs().list( userId='me', fields='sendAs(sendAsEmail,isPrimary)' ).execute().get('sendAs')
batchUpdate()
shapeID
{ "insertText": { "objectId": shapeID, "text": "Hello World!\n" }
{ "updateTextStyle": { "objectId": shapeID, "style": { "bold": true }, "textRange": { "type": "FIXED_RANGE", "startIndex": 0, "endIndex": 5 }, "fields": "bold" }
requests
SLIDES
deckID
SLIDES.presentations().batchUpdate(presentationId=deckID, body=requests).execute()
{"requests": [ {"repeatCell": { "range": { "sheetId": 0, "startRowIndex": 0, "endRowIndex": 1 }, "cell": { "userEnteredFormat": { "textFormat": { "bold": true } } }, "fields": "userEnteredFormat.textFormat.bold" }} ]}
SHEETS.spreadsheets().batchUpdate(spreadsheetId=SHEET_ID, body=requests).execute()
// 新規スライドの作成(タイトルと本体のレイアウト) { "createSlide": { "slideLayoutReference": { "predefinedLayout":"TITLE_AND_BODY" } } }, // テキストボックスにテキストを挿入 { "insertText": { "objectId": titleID, "text":"Hello World!" } }, // テキストのパラグラフに箇条書き記号を追加 { "createParagraphBullets": { "objectId": shapeID, "textRange": { "type":"ALL" } } }, // テキスト「変数」をイメージで置換 { "replaceAllShapesWithImage": { "imageUrl": imageURL, "replaceMethod":"CENTER_INSIDE", "containsText": { "text": "{{COMPANY_LOGO}}" } } }