スプレッドシートからTwitter Botを作る
このレッスンのゴール
このレッスンでは、Google Apps Scriptを利用して、Google Spreadsheetに書いておいた内容を自動取得して、取得した内容をTwitter APIを利用してツイートする、いわゆるBotを作成します。
以前作成したTwitterのフォロワー情報を取得するプログラムでは、フォロワーを取得するURLを利用しましたが、今回はTwitterのAPIを利用する方法を学びます。
こんな感じでスプレッドシートに指定したツイート内容を登録しておいた内容を、自動でTwitterに送付させてみましょう。
このレッスンでできるようになること
このレッスンのプログラムを完成させることで、以下のことができるようになります。
- Twitter APIの設定の仕方が分かる
- Google Apps ScriptでTwitter APIを利用できる
- Google Spreadsheetからデータを取得できる
レッスン開始前のチェックリスト
このレッスンを始める前に、次に当てはまる方は、このレッスンを受講する前に必要な準備を終わらせましょう!
- Google Apps Scriptという用語を聞いたことがない→前のレッスン「Google Apps Scriptとは?」をまずは受講しましょう
- JavaScriptを書いたことがない→まずはProgateでJavasrciptの基本を学びましょう
- Googleのアカウントを持っていない→GASの利用にはGoogleアカウントが必要です。こちらからアカウント作成をしましょう
- WEB APIを利用したことがない→「YouTubeのチャンネル登録者数をGoogle Apps Scriptで取得しよう」を先に受講しましょう
- Twitterアカウントを持っていない→今回のプログラムではTwitterアカウントが必要です。こちらからアカウントを作成しましょう
このレッスンの流れ
それでははじめていきたいと思います。手順としては、以下のようになります。
- Twitter APIを認証する
- スプレッドシートを取得する
- 取得した内容をツイートする
内容に入る前に、3つ事前準備があるのでそちらの設定をしていきましょう。
事前準備その1:TwitterAPIを登録しよう
まずはTwitterAPIを利用するために、Twitterの開発用サイトに登録しましょう。下記のURLにアクセスしてください。
https://developer.twitter.com/en/products/twitter-api
※登録情報は頻繁に変わるため、これ以降の情報は参考としてご覧ください。必要に応じて、TwitterAPIについて調べて登録してみましょう。
- URLにアクセスしたら「Apply for access」をクリックする
- 「Apply for a developer account」をクリックする
- 「+ Create Project」をクリックする
この後、利用目的を聞かれるので、適当なものを選びましょう。わからない場合は、「Hobbyist > Making a bot > Get started 」と進んでください。ここから更に
ここからいろいろなことを聞かれますので、必須項目を適当に埋めていきます。
- What would you like us to call you? → 適当なアプリ名をつけましょう。twitter_bot_manajobとします
- What country do you live in? → Japan
- What’s your current coding skill level? → Some experiences
- How will you use the Twitter API or Twitter Data? →適当に200words以上で説明を書きましょう
- Are you planning to analyze Twitter data?→No
- Will your app use Tweet, Retweet, Like, Follow, or Direct Message functionality?→Yes
- Please describe your planned use of these features.→適当に書きます
- Do you plan to display Tweets or aggregate data about Twitter content outside Twitter?→ No
- Will your product, service, or analysis make Twitter content or derived information available to a government entity? → No
なお、ここで示しているものは一例です。用途に応じて回答する内容が変わりますので、都度必要に応じて記入してください。全て記入を終えて、規約にチェックを入れると、登録しているメールアドレスにメールが飛ぶので、承認をしましょう。
この後同じような質問をされます。ここでも同様に、適当な回答をします。
- Name your Project→適当に名前をつける
- Which best describes you? → Making a bot
- Describe your new Project →適当に説明を書く
- Add your App→適当なものを選ぶ
ここまで終わると準備完了です。画像のような画面が出るので、「Keys and Tokens」をクリックします。ここでConsumer KeyとAuthentification Tokenをそれぞれ取得します。画像の赤枠の「Regenerate」をクリックしてください。
どちらの場合も2種類の結果が出力されるので、それぞれコピーしておきます。最終的に4つのトークンが手元にあればOKです。どれも似たような内容なので、それぞれがどれに該当するかもメモしておきましょう。
これで事前準備の1は完了です。このページはまだ使うので、閉じずに開いておきましょう。
事前準備その2:Google SpreadsheetとGoogle Apps Scriptして、WEBアプリケーションとして公開しよう
ここはいつも通りです。新しくスプレッドシートを作成して、Google Apps Scriptエディタを開きましょう。適当な名前で保存してください。
いつもと違うのはここからです。Google Apps Scriptの準備ができたら、右上の「デプロイ」から「新しいデプロイ」をクリックします。歯車から、種類が選べるので、ウェブアプリを選び、右下の「デプロイ」をクリックします。その後スクリプトIDをコピーします。
次に先程作成したTwitterのデベロッパーページを開き、Authentifcation settingsの「Edit」をクリック、CALLBAK URLに以下のURLを貼り付けましょう。スクリプトIDは前のステップでコピーしたものを利用します。
https://script.google.com/macros/d/スクリプトID/usercallback
できたら、保存します。ここまでの流れは次のページが詳しいです。
https://moripro.net/gas-twitter-bot/
これで事前準備2も完了です。
事前準備その3:TwitterWebServiceを連携する
次はTwitterAPIをGoogle Apps Scriptで使うための準備をします。事前準備その1がTwitter側の登録と考えると、この準備ではGoogle Apps Script側の登録と思ってください。流れは次の通りです。
- https://script.google.com/d/1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTF/edit を開く
- 左メニューの「i」をクリックして、右上からコピーを作成する(画像を参照)
- プロジェクト名を
TwitterWebService
に変更する - 左メニューのライブラリにある「OAuth1」をクリックして、バージョン
18
を選択し、保存 - 左メニューの歯車アイコンをクリックして、「スクリプト ID」の値をコピー(事前準備その2と同じ流れです)
- 元のスクリプトに戻って、ライブラリの+をクリックする
- 「スクリプト ID」の値を貼り付け、検索し、追加をクリックする
ここまでできたら、実際にプログラムを書いていきましょう。
プログラムの全体像を確認しよう
それでは、さっそく実装していきましょう。 最終的なコードはこちらになります。
今すぐ全てが理解できなくて大丈夫です。詳細はこれから説明していきますので、ざっと全体を眺めておきましょう。
// 認証用インスタンス
var twitter = TwitterWebService.getInstance(
'XXXXXXXXXXXXXXXXXXX', // 作成したアプリケーションのConsumer Key
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' // 作成したアプリケーションのConsumer Secret
);
// 認証
function authorize() {
twitter.authorize();
}
// 認証解除
function reset() {
twitter.reset();
}
// 認証後のコールバック
function authCallback(request) {
return twitter.authCallback(request);
}
// シートを取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); // 「シート1」はシート名
// ツイートを投稿
function postTweet() {
var tweet = getTweet()
var service = twitter.getService();
var response = service.fetch('https://api.twitter.com/1.1/statuses/update.json', {
method: 'post',
payload: { status: tweet }
});
}
//ツイート内容の取得
function getTweet() {
var tweets =sheet.getRange("A1:A100").getValues();
var tweet = tweets[Math.floor(Math.random() * tweets.length)];
Logger.log(tweet)
return tweet;
}
Step01. Twitter APIを認証する
では、まず最初にツイッターのAPIの認証を行いたいと思います。まずは下のコードをコピーして、Xになっているところに先ほど取得した、Consumer KeyとComsumer Secretをべたばりしてしまいましょう。
// 認証用インスタンス
var twitter = TwitterWebService.getInstance(
'XXXXXXXXXXXXXXXXXXX', // 作成したアプリケーションのConsumer Key
'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' // 作成したアプリケーションのConsumer Secret
);
// 認証
function authorize() {
twitter.authorize();
}
// 認証解除
function reset() {
twitter.reset();
}
// 認証後のコールバック
function authCallback(request) {
return twitter.authCallback(request);
}
プログラムが書けたら、関数をauthorize()に変更して実行します。
※ここでエラーが出る場合は、CallbackURLの設定が間違っている、ConsumerKeyが間違っている、TwitterWebServiceの接続がうまくいっていない、などの可能性があります。エラーコードで検索して、どれが原因かを探りましょう。
実行すると、以下のような出力がされたら成功です。https://以降で示されているURLにアクセスしましょう。
Open the following URL and re-run the script: https://api.twitter.com/oauth/authorize?oauth_token=XXXXXXXXXXXXXXXXXX
このURLにアクセスすると、ツイッターのアカウント認証画面に行くと思うので、認証を許可してください。そうすると、さきほど設定したcallback urlにリダイレクトされ、successと表示されていることを確認してください。失敗する場合は、callback urlがうまく設定できていない可能性があります。
Successが出たら、このステップは完了です。
Step02. スプレッドシートを取得する
それでは、ツイートを取得するメソッドを書いていきましょう。
まず、スプレッドシートに適当なツイートを以下のように設定しておきます。
次に、このシートを取得する変数を作成します。この流れは以前のレッスンで行ったのとほとんど同じですが、今回はシート名を指定して取得しています。
// シートを取得
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("シート1"); // 「シート1」はシート名
このコードは、Google Apps Script上でスプレッドシートにアクセスし、その中で「シート1」というタブにアクセスしています。詳しくはこちらの記事をご覧いただけるとわかりやすいかと思います。
https://qiita.com/negito6/items/c64a7a8589faaffcfdcf
次にシートから、予め用意しておいたツイート情報を取得します。今回はgetTweet()メソッドを実装しましょう。さきにメソッドの全体像です。
//ツイート内容の取得
function getTweet() {
var tweets =sheet.getRange("A1:A100").getValues();
var tweet = tweets[Math.floor(Math.random() * tweets.length)];
Logger.log(tweet)
return tweet;
}
このメソッドは、以下のような流れになっています。
- スプレッドシートの中で、A1:A100までの範囲を指定して、値をすべて取得する(値はツイートになります)
- 複数ツイートの中から、ランダムに値を取り出して、一つをtweetの中に格納します
- 取得したツイートのログを出力します
- ツイートをリターンします
これでスプレッドシートから情報を取得する流れが完成です。
Step03. 取得した内容をツイートする
それでは最後に、取得したツイートを、実際にポストしてみましょう。今回はツイートをポストする関数なので、postTweet()関数を実装します。最初に全体を見ていきます。
function postTweet() {
var tweet = getTweet()
var service = twitter.getService();
var response = service.fetch('https://api.twitter.com/1.1/statuses/update.json', {
method: 'post',
payload: { status: tweet }
});
}
このメソッドは、以下のような流れになっています。
- スプレッドシートに用意したツイートを、getTweet()で呼び出します
- ツイッターのAPIを利用するために、getService()で呼び出します
- ツイッターのポストを行うWeb APIのエンドポイントを指定して、ツイートを投稿します
あとは、A1:A100のセルに、自分の投稿したいツイートを登録しておくだけで完成です。
これでTwitterへ自動投稿するプログラムは完成です!
復習:定期実行をセットする
Botというくらいなので、今回作ったプログラムを自動実行するように設定してみましょう。定期実行のやり方は、以前の講座で解説をしていますので、ぜひそちらを参考にして毎日や毎週など、用途にあわせて設定しましょう。
これでこのチュートリアルは完了です!Google Apps Script実践①、Google Apps Script実践②と通して、
- Twitterのフォロワー数をSlackに定期通知する
- Googleフォームの回答をSlackに自動通知する
- YouTubeのチャンネル登録者数をGoogleスプレッドシートに記入する
- Googleスプレッドシートに用意した内容を定期的にTwitterに投稿する
という4つの流れを、実際にプログラムを組みながら学習していきました。GoogleAppsScriptは、様々なアプリと組み合わせて使うことで、業務効率化に力を発揮するプログラム言語です。ぜひこのチュートリアルを終えたら、ご自身の業務効率化にGoogleAppsScriptをご活用ください。
このチュートリアルはこれで終了です。