2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

炎上対策として、投稿後1週間を経過したツイートはGASで自動的に削除する

Posted at

#概要
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はスクリプトエディタのファイル\プロジェクトのプロパティで確認できます。

1.jpg

取得したAPIキーは同じページのKeys and tokensにて確認できます。
APIキーは後ほど実装時に使用します。

2.jpg

##ライブラリをインストールする

今回はTwitterWebService というライブラリを使用します。
リソース\ライブラリ…にて、プロジェクトキー1rgo8rXsxi1DxI_5Xgo_t3irTw1Y5cxl2mGSkbozKsSXf2E_KBBPC3xTFを入力して追加できます。

OAuth1.0a認証を行うライブラリを使う方法もありますが、僕の場合Token Mismatchが発生してうまく解決できなかったので、今回はこちらを使っています。
割と最近のQiitaの記事でも使用されているので、僕の実装の問題かもしれません。
参考:[GAS] GoogleAppsScriptでTwitterbotを作る

#実装

以下のようなスクリプトを用意します。
先ほど確認したAPI keyAPI secret keyCONSUMER_KEYCONSUMER_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が出力されるので、コピーしてアクセスします。
3.jpg

「連携アプリを認証」を押します。
4.jpg

##トリガーを設定する

スクリプトエディタのメニューにある時計アイコンからトリガーの指定を行います。
今回は毎日日付が変わったタイミングで削除したかったため、以下のように指定します。
5.jpg

参考:Google Apps Scriptでトリガーを設定する方法

###注意点

  • user_timelineの仕様上、最新の3200件のツイート情報のみしか取得できないため、1回の実行でそれ以上のツイートを削除することはできません。
  • deadlineを変更することで削除する範囲を変更できますが、期間中のツイートが3200件以上あった場合、削除されません。(deadlineを1年前とした場合、1年に3200件以上ツイートしていると1件も削除されない)

参考:GET statuses/user_timeline

##参考文献

##最後に
炎上したくない。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?