#概要
Twitterの炎上を見ていると他人事じゃないなーとよく思います。
何ヶ月も前のツイートを掘り起こされても、適当に投稿した内容に責任持てないし、そんな毎回熟考して投稿してたらしんどいし面白くない。
けど、炎上したくない。
ということで、投稿して1週間以上経過したツイートを自動で削除してくれるスクリプトをGASで書いてみました。
##事前準備
事前にTwitter Application Management で開発者申請を行う必要があります。
参考:Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ ※2019年8月時点の情報
##Twitter APIの設定
承認が降りたら再度Twitter Application Management にアクセスし、APIキーを取得します。
Callback URL
にはhttps://script.google.com/macros/d/{作成するアプリのスクリプトID}/usercallback
を設定します。
以前は適当に埋めていれば問題なかったようですが、仕様が変更され正しいURLでないと認証が通らなくなっています。
スクリプトID
はスクリプトエディタのファイル\プロジェクトのプロパティ
で確認できます。
取得したAPIキーは同じページのKeys and tokens
にて確認できます。
APIキーは後ほど実装時に使用します。
##ライブラリをインストールする
今回はTwitterWebService というライブラリを使用します。
リソース\ライブラリ…
にて、プロジェクトキー1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTF
を入力して追加できます。
OAuth1.0a認証
を行うライブラリを使う方法もありますが、僕の場合Token Mismatch
が発生してうまく解決できなかったので、今回はこちらを使っています。
割と最近のQiitaの記事でも使用されているので、僕の実装の問題かもしれません。
参考:[GAS] GoogleAppsScriptでTwitterbotを作る
#実装
以下のようなスクリプトを用意します。
先ほど確認したAPI key
、API secret key
をCONSUMER_KEY
、CONSUMER_SECRET
に指定します。
また、SCREEM_NAME
に自身のTwitterアカウントID
を指定します。
var CONSUMER_KEY = 'XXXXXXXXXX'; //作成したアプリのAPI key
var CONSUMER_SECRET = 'XXXXXXXXXXXXXXXXXXXXX'; //作成したアプリのAPI secret key
var SCREEM_NAME = 'XXXXXXXXXX'; //自身のTwitterアカウントID
var twitter = TwitterWebService.getInstance(CONSUMER_KEY,CONSUMER_SECRET);
function authorize() {
twitter.authorize();
}
function authCallback(request) {
return twitter.authCallback(request);
}
function postDestroyStatus() {
var service = twitter.getService();
//自身のツイートの情報を取得
var tweetData = JSON.parse(service.fetch("https://api.twitter.com/1.1/statuses/user_timeline.json?screen_name=" + SCREEM_NAME));
//削除される期間を指定
var deadLine = new Date();
deadLine.setDate( deadLine.getDate() - 7);
var destroyTweetId = [];
for(var i=0; i<tweetData.length; i++){
if(new Date(tweetData[i].created_at) <= deadLine){
destroyTweetId.push(tweetData[i].id_str);
}
}
for(var i=0; i<destroyTweetId.length; i++){
var destroy = service.fetch("https://api.twitter.com/1.1/statuses/destroy/" + destroyTweetId[i] + ".json",{
method: "post"
});
}
}
##Twitterの認証を行う
スクリプトエディタの関数を選択
からauthorize
を選択し実行します。
表示\ログ
にURLが出力されるので、コピーしてアクセスします。
##トリガーを設定する
スクリプトエディタのメニューにある時計アイコンからトリガーの指定を行います。
今回は毎日日付が変わったタイミングで削除したかったため、以下のように指定します。
参考:Google Apps Scriptでトリガーを設定する方法
###注意点
-
user_timeline
の仕様上、最新の3200件のツイート情報のみしか取得できないため、1回の実行でそれ以上のツイートを削除することはできません。 -
deadline
を変更することで削除する範囲を変更できますが、期間中のツイートが3200件以上あった場合、削除されません。(deadline
を1年前とした場合、1年に3200件以上ツイートしていると1件も削除されない)
##参考文献
- Twitter API 登録 (アカウント申請方法) から承認されるまでの手順まとめ ※2019年8月時点の情報
- [GAS] GoogleAppsScriptでTwitterbotを作る
- RubyによるTwitter全ツイート削除
- Google Apps Scriptでトリガーを設定する方法
- GET statuses/user_timeline
- POST statuses/destroy/:id
##最後に
炎上したくない。