GASでTwitterにツイートする(GASの準備偏)

未分類
スポンサーリンク
みなさんこんにちは。ノンプログラマーのうえはらです。 Google Apps Scriot(以下GAS)でTwitterにツイートしたく、Google先生に色々聞きました。 解説しているサイトが結構見つかったので、すぐできるだろうと思っていたのですが、結構ハマったので参考になれば幸いです。 TwitterのAPIでCallback URLを設定するときにGASのプロジェクトキーが必要だったり、順番も大事なので、最初から読んでいただけたらと思います。 なお、スクリプトをはじめライブラリー情報など下記サイトを参考にしました。
Twitter API 第3回 |
ありがとうございます。

GASでスクリプトを準備する

こちらのGitの情報を元にスクリプトを準備します。
apps-script-oauth1/samples/Twitter.gs at master · googleworkspace/apps-script-oauth1
An OAuth1 library for Google Apps Script. Contribute to googleworkspace/apps-script-oauth1 development by creating an account on GitHub.
色々なサイトを見ていると、Gitの「run」関数を認証部分と、ツイート部分に分けていたので、自分も分けてみました。 「CONSUMER_KEY」や「CONSUMER_SECRET」については後で解説します。
/* var CONSUMER_KEY = 'Consumer Key (API Key)'; var CONSUMER_SECRET = 'Consumer Secret (API Secret)'; function Tweet(){ var text ='テスト投稿'; run(text); } /** * Twitter APIをたたく. */ function run(text) { var service = getService(); if (service.hasAccess()) { var url = 'https://api.twitter.com/1.1/statuses/update.json'; var payload = { status: text }; var response = service.fetch(url, { method: 'post', payload: payload }); var result = JSON.parse(response.getContentText()); Logger.log(JSON.stringify(result, null, 2)); } } /** * Twitter APIでアプリを認証するURLをログ表示 */ function getAuthorizeURL() { var service = getService(); var authorizationUrl = service.authorize(); Logger.log('認証URLは下記です。\n%s',authorizationUrl); } /** * Reset the authorization state, so that it can be re-tested. */ function reset() { var service = getService(); service.reset(); } /** * Configures the service. */ function getService() { return OAuth1.createService('Twitter') // Set the endpoint URLs. .setAccessTokenUrl('https://api.twitter.com/oauth/access_token') .setRequestTokenUrl('https://api.twitter.com/oauth/request_token') .setAuthorizationUrl('https://api.twitter.com/oauth/authorize') // Set the consumer key and secret. .setConsumerKey(CONSUMER_KEY) .setConsumerSecret(CONSUMER_SECRET) // Set the name of the callback function in the script referenced // above that should be invoked to complete the OAuth flow. .setCallbackFunction('authCallback') // Set the property store where authorized tokens should be persisted. .setPropertyStore(PropertiesService.getUserProperties()); } /** * Handles the OAuth callback. */ function authCallback(request) { var service = getService(); var authorized = service.handleCallback(request); if (authorized) { return HtmlService.createHtmlOutput('Success!'); } else { return HtmlService.createHtmlOutput('Denied'); } } */


解説したいのですが、ライブラリーを使うので、自分もよくわかっていません。

OAuth1を利用するライブラリ

TwitterのAPIを利用して投稿するには、OAuth1.0の認証方法を使います。 下記のプロジェクトキーをライブラリーに追加してください。
1CXDCY5sqT9ph64fFwSzVtXnbjpSfWdRymafDrtIZ7Z_hwysTY7IIhi7s

そしてココが肝です! ライブラリーのバージョンが記事作成時「15」までありますが、最新の「15」ではエラーとなりました。

いくつかバージョンを変えて実行したところ「8~12」は大丈夫でした。 最初はわけがわからず、スクリプト見直したり2日くらい悩みました。 ライブラリーを使用していてうまくいかないときは、バージョンを変えてみるとうまく行くかもです。 今回はバージョン「12」として保存します。

Twitter Application Management用のCallback URLについて

タイトル見るとなんのこっちゃ?という感じですね。 次で解説する、Twitter Application Managementでツイートするアプリを作成するのですが、その時にCallback URLを設定する必要があります。 このCallback URLはGASのプロジェクトキーを利用します。 どこを見ればいいかというと、メニュー「ファイル」→「プロジェクトのプロパティ」で見ることができます。

  このプロジェクトキーを下記のアドレスに追加したものが、Callback URLとなります。
https://script.google.com/macros/d/[プロジェクトキー]/usercallback
ちょっと長くなったので、Twitter Application Managementについては次の記事で解説します。

参考サイト

Google Apps Script で Twitter を使ってみる - Qiita
ディープラーニングでチャットボットを作るためのデータをTwitterからツイートとリプライの組で集めてこようと思たのですが、どうしようかと考えていました。そんな時、Google Apps Scrip…
GitHub - googleworkspace/apps-script-oauth1: An OAuth1 library for Google Apps Script.
An OAuth1 library for Google Apps Script. Contribute to googleworkspace/apps-script-oauth1 development by creating an account on GitHub.
var CONSUMER_KEY = 'Consumer Key (API Key)'; 
var CONSUMER_SECRET = 'Consumer Secret (API Secret)'; 
function Tweet(){ var text ='テスト投稿'; run(text); } 
/** * Twitter APIをたたく. */ 

function run(text) { 
var service = getService(); 
if (service.hasAccess()) {
 var url = 'https://api.twitter.com/1.1/statuses/update.json';
 var payload = { status: text };
 var response = service.fetch(url, { method: 'post', payload: payload });
 var result = JSON.parse(response.getContentText());
 Logger.log(JSON.stringify(result, null, 2)); } 
}

 /** * Twitter APIでアプリを認証するURLをログ表示 */ 
function getAuthorizeURL() {
 var service = getService();
 var authorizationUrl = service.authorize();
 Logger.log('認証URLは下記です。\n%s',authorizationUrl);
 } 
/** * Reset the authorization state, so that it can be re-tested. */ 
function reset() {
 var service = getService(); service.reset();
 }
 /** * Configures the service. */
 function getService() {
 return OAuth1.createService('Twitter')
 // Set the endpoint URLs. 
.setAccessTokenUrl('https://api.twitter.com/oauth/access_token') 
.setRequestTokenUrl('https://api.twitter.com/oauth/request_token') 
.setAuthorizationUrl('https://api.twitter.com/oauth/authorize')
 // Set the consumer key and secret. 
.setConsumerKey(CONSUMER_KEY) 
.setConsumerSecret(CONSUMER_SECRET)
 // Set the name of the callback function in the script referenced
 // above that should be invoked to complete the OAuth flow.
 .setCallbackFunction('authCallback')
 // Set the property store where authorized tokens should be persisted.
 .setPropertyStore(PropertiesService.getUserProperties());
 } 
/** * Handles the OAuth callback. */ 
function authCallback(request) {
 var service = getService();
 var authorized = service.handleCallback(request);
 if (authorized) {
 return HtmlService.createHtmlOutput('Success!');
 } else { return HtmlService.createHtmlOutput('Denied'); } }

コメント