GASでTwitterのAPIを使って投稿(ツイート)する方法を紹介します。
APIを使うと、ツイートの自動化ができたり、色々便利なことが多いですね。
TwitterAPIの利用申請と準備
TwitterのAPIを利用するには申請が必要です。
手順は以下の記事にまとめていますので、ご覧ください。
https://zenn.dev/specially198/articles/9d1ce6c797bb5b
申請が承認された後は、APIが使えるか確認してみてください。
手順は以下の記事にまとめていますので、ご覧ください。
https://zenn.dev/specially198/articles/54d0b957f185b8
GASでOAuth認証を行うライブラリを追加
TwitterのAPIを使うには、OAuth1.0a認証を行う必要があります。
Googleの公式でOAuth認証用のライブラリがあったので、これを利用します。
https://github.com/googleworkspace/apps-script-oauth1
ライブラリを追加するには、以下のIDを入力します。
1CXDCY5sqT9ph64fFwSzVtXnbjpSfWdRymafDrtIZ7Z_hwysTY7IIhi7s
![](https://specially198.com/wp-content/uploads/2021/03/image.png)
GASのコード
Twitter認証を行うためのコード
まず、Twitter認証を行うためのコードです。
function getTwitterService(serviceName) {
return OAuth1.createService(serviceName)
.setAccessTokenUrl('https://api.twitter.com/oauth/access_token')
.setRequestTokenUrl('https://api.twitter.com/oauth/request_token')
.setAuthorizationUrl('https://api.twitter.com/oauth/authorize')
.setConsumerKey("[ここにTwitterのAPI keyを入力]")
.setConsumerSecret("[ここにTwitterのAPI secret keyを入力]")
.setCallbackFunction('authCallback')
.setPropertyStore(PropertiesService.getUserProperties());
}
function authCallback(request) {
var twitterService = getTwitterService(request.parameter.serviceName);
var isAuthorized = twitterService.handleCallback(request);
if (isAuthorized) {
return HtmlService.createHtmlOutput('認証が正常に終了しました');
} else {
return HtmlService.createHtmlOutput('認証がキャンセルされました');
}
}
1行目のgetTwitterService関数が認証を行う処理になります。
上記で追加したOAuthライブラリを使用しています。
引数でserviceNameというのを受け取るようにしています。
これは、複数のTwitterアカウントで認証してAPIを利用できるようにするためです。
ここで指定した名前をキーに認証情報を保存するので、serviceNameにはTwitterのアカウント名を指定する想定です。
6行目と7行目でTwitterアプリのキー情報を指定します。
Twitterのアプリを作成した時に、「API key」と「API secret key」を保存していると思うので、それを指定します。
もし忘れてしまった場合は、Twitterのアプリの画面から再生成できます。
8行目では、認証が終わった後に戻ってくるコールバック関数を指定しています。
ここで指定している関数は、12行目で定義している関数です。
関数名を変更しなければ、このままで大丈夫です。
12行目からが認証が終わった後に戻ってくるコールバック関数です。
13行目で上記の関数を呼び出すと認証情報が取得できるので、15行目で判定を入れています。
認証が完了していれば、16行目で「認証が正常に終了しました」と表示、認証をキャンセルした場合は18行目で「認証がキャンセルされました」と表示します。
認証処理はGASのWebアプリケーションで作るので、上記のメッセージが画面に表示されるようにします。(Webアプリケーションについては後述します)
認証用のWebアプリケーションのコード
今回はGASのWebアプリケーションからTwitter認証を行う仕組みにしたいと思います。
下記がWebアプリケーションの表示ロジックです。
function doGet(e) {
var twitterService = getTwitterService(e.parameter.screenName);
var template;
if (!twitterService.hasAccess()) {
var authorizationUrl = twitterService.authorize();
template = HtmlService.createTemplateFromFile("index");
template.authorizationUrl = authorizationUrl;
} else {
template = HtmlService.createTemplateFromFile("completed");
}
return template.evaluate();
}
2行目で上記の認証処理を呼び出し、Twitterの認証情報を取得します。
認証を行うTwitterアカウントは、パラメータから取得するようにします。
?screenName=specially198
のようにパラメータをつけることにします。
4行目で対象のアカウントが認証完了しているかをチェックします。
未認証の場合は、5行目で認証用のURLを取得し、認証ページ(index.html)を表示します。
認証済みの場合は9行目で完了ページ(completed)を表示します。
認証ページ、完了ページは以下のようにHTMLを作っておきます。
認証ページでは認証用URLに飛ぶリンクを設置しています。
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<a href="<?= authorizationUrl ?>" target="_blank">Twitterの認証を行う</a>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
Twitterの認証は完了しています。
</body>
</html>
Webアプリケーションのデプロイ
GASで作成したWebアプリケーションをデプロイします。
GASエディタの右上から、「デプロイ」→「新しいデプロイ」を選択します。
![GASのデプロイメニュー](https://specially198.com/wp-content/uploads/2021/02/gas-deploy-menu.png)
以下のように新しいデプロイの画面が表示されます。
![GASの新しいデプロイ](https://specially198.com/wp-content/uploads/2021/02/new-deploy-1024x804.png)
左上の「種類の選択」で「ウェブアプリ」を選択します。
アクセスできるユーザーは「全員」にしてデプロイを行います。
![新しいデプロイ](https://specially198.com/wp-content/uploads/2021/02/new-deploy2-1024x804.png)
デプロイが完了すると以下のような画面が表示されます。
ウェブアプリの部分のURLをコピーしておいてください。
![新しいデプロイが完了](https://specially198.com/wp-content/uploads/2021/02/new-deploy-completed-1024x558.png)
Twitterアプリの設定
以下のURLからTwitter Deceloperのポータルを開きます。
https://developer.twitter.com/en/portal/dashboard
Twitterアプリの画面から、一番下の「Authentication settings」を編集します。
![Twitterアプリのダッシュボード](https://specially198.com/wp-content/uploads/2021/02/twitter-app-dashboard-1024x894.png)
まず、OAuth認証を有効にします。
![OAuth認証を有効にする](https://specially198.com/wp-content/uploads/2021/02/oauth-enable-1024x652.png)
続いて、コールバックURLとWebサイトのURLを指定します。
コールバックURLは
https://script.google.com/macros/d/[スクリプトID]/usercallback
という形式になります。
スクリプトIDは、プロジェクトの設定画面から確認できます。
WebサイトのURLは自身のサイトのURLなどを指定しておけば良いと思います。
(Twitter認証する時にアプリの説明として表示されます)
![コールバックURLを指定する](https://specially198.com/wp-content/uploads/2021/02/callback-url-1024x370.png)
また、Twitterアプリの画面で「App permissions」を編集します。
![Twitterアプリの権限設定](https://specially198.com/wp-content/uploads/2021/02/app-permissions-1024x336.png)
Twitterアプリの権限はデフォルトでは読み込みのみ(Read Only)になっているので、読み書き(Read and Write)ができるように変更します。
![Twitterアプリの権限を読み書きに設定](https://specially198.com/wp-content/uploads/2021/02/app-permissions-read-and-write-1024x511.png)
WebアプリケーションでTwitter認証を行う
GASのWebアプリケーションをデプロイした時にコピーしたURLを開きます。
この時、認証したいアカウントをパラメータに付けるようにします。
https://script.google.com/macros/s/AKfyXXXXXXX/exec?screenName=specially198
のような感じです。
開くと画面は以下のようになります。
![認証ページ](https://specially198.com/wp-content/uploads/2021/02/index-1024x74.png)
上述の通り、「Twitterの認証を行う」のリンクには認証用のURLが設定してあるため、URLをクリックします。
クリックするとTwitterの認証画面に飛びます。
![Twitterの認証画面](https://specially198.com/wp-content/uploads/2021/02/twitter-authentication-1024x665.png)
「連携アプリを認証」をクリックすると認証が行われ、GASのWebアプリケーションにコールバックされます。
コールバックされると完了画面が表示されます。
![Twitterの認証が完了](https://specially198.com/wp-content/uploads/2021/02/twitter-authentication-completed-1024x69.png)
実際にGASからツイートしてみる
以下のようなコードで試してみました。
function postTweet() {
var twitterService = getTwitterService("[ここに認証したアカウント名を入れる]");
var options = {
"method": "post",
"payload": {
status: 'これはGASからのツイート'
}
};
var response = JSON.parse(twitterService.fetch('https://api.twitter.com/1.1/statuses/update.json', options));
Logger.log(response);
}
TwitterAPIでツイートを行うには、「/statuses/update.json」のエンドポイントにpostで送信します。
実際にTwitterの画面を見てみると、以下のようにツイートできました。