GoogleAppsScript から Twitter に投稿する
GAS から Twitter API 使ってツイートしたかったのでいろいろ調べて試してたんですが、古い情報だらけで非常に苦しんだのでここに現時点での成功例を記しておきます。
※ Twitter 側が仕様変更しても私がここを更新するかどうかはわかりません。
API 使って Tweet したいんですけど
Twitter Developers に登録しましょう。
話はそれからだ
多少面倒くさい登録申請が承認されたら Twitter Developers 側でアプリを作ります。
項目 | 設定値 |
---|---|
App name | お好きに |
Application description | 〃 |
Website URL | 〃 |
Enabel Sign in with Twitter | ✅ |
Callback URLs | あとで設定する |
App usage | お好きに |
その他 | 設定不要 |
※ 以前は Callback URL に何を設定してもよくてノーチェックでスルーだったらしいんですが、最近(?)有効なURLでないと認証通らなくなったようなのでちゃんと設定しないとダメです。
やり方調べてると古い方法が大量にヒットするんですよね...。
ここまでできたら GoogleAppsScript でスクリプトを書きます。
OAuth 認証どうやるの
OAuth1 という GAS 用ライブラリがあります。
これを使いましょう。
使わずとも自分で Twitter 公式ドキュメントの ココ で説明されてる通りにひとつずつ認証用URLにリクエスト投げていけば認証できるんですが、Authentication Header 作りこむのが非常に面倒くさいのでライブラリに任せてしまいます。
Google Apps Script (GAS) でTwitterへ投稿するだけの機能を実装してみる
Google Apps ScriptでTwitter APIを叩く
とか参考にしつつ。
こうなりました。
var scriptProperties = PropertiesService.getScriptProperties();
var CONSUMER_KEY = scriptProperties.getProperty('TWITTER_CONSUMER_KEY');
var CONSUMER_SECRET = scriptProperties.getProperty('TWITTER_CONSUMER_SECRET');
function getTwitterService() {
return OAuth1.createService('Twitter')
.setAccessTokenUrl('https://api.twitter.com/oauth/access_token')
.setRequestTokenUrl('https://api.twitter.com/oauth/request_token')
.setAuthorizationUrl('https://api.twitter.com/oauth/authorize')
.setConsumerKey(CONSUMER_KEY)
.setConsumerSecret(CONSUMER_SECRET)
.setCallbackFunction('authCallback')
.setAccessToken('access token', 'access token secret')
.setPropertyStore(PropertiesService.getUserProperties());
};
TWITTER_CONSUMER_KEY
とか TWITTER_CONSUMER_SECRET
とかは、Twitter Developers 側で作成したアプリから取ってきてスクリプトのプロパティに追加しておきます。
で、authCallback
はこうです。
function authCallback(request) {
var twitterService = getTwitterService();
var isAuthorized = twitterService.handleCallback(request);
if (isAuthorized) {
return HtmlService.createHtmlOutput('Success!');
} else {
return HtmlService.createHtmlOutput('Denied.');
}
}
コールバックの設定
こんなものを書いて実行します。
function logCallbackUrl() {
var twitterService = getTwitterService();
Logger.log(twitterService.getCallbackUrl());
}
するとログにURLが出力されますのでそのURLをコピーします。
Twitter App の Callbak URLs のところにペタり。
ここまでできれば認証通せます!
認証する
GAS にこんなのを追加して実行します。
function getAuthorizationURL() {
const twitterService = getTwitterService();
const authorizationUrl = twitterService.authorize();
Logger.log(authorizationUrl);
}
またログに URL が出てきますので、今度はその URL にアクセスします。
認証しましょう!
ようやくツイートできるよ
GAS にツイート処理を書きましょう。
function tweet(text) {
const twitterService = getTwitterService();
const response = twitterService.fetch('https://api.twitter.com/1.1/statuses/update.json', {
method: 'post',
payload: {status: text},
});
Logger.log(response); // ログはお好みで
}
この tweet
につぶやきたい文字列を渡せばOK。
改行は普通に \n
でできるようです。
おわりに
古い情報をどうにかしてほしい。
Author And Source
この問題について(GoogleAppsScript から Twitter に投稿する), 我々は、より多くの情報をここで見つけました https://qiita.com/szaking/items/466101cbe9b3846ba0f4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .