Google Apps Script を用いて定期的に Twitter のツイートを削除する

heroImage

1. はじめに

近年,SnapchatInstagram Stories などの一定時間が経過すると自動的に投稿が削除される,エフェメラル SNS と呼ばれるサービスが登場しています。
 本記事では,Google Apps Script を用いて Twitter に投稿されてから 7 日以上が経過したツイートを自動的に削除することで,Twitter をエフェメラル SNS 化するシステムの構築について記述します。

2. 事前準備

2.1. Twitter

Twitter Developers に登録して,以下の情報を取得します。

2.2. Google Apps Script

Google Apps Script のプロジェクトを作成し,OAuth 認証のライブラリが OSS として Github に公開されているので,手順に従ってインストールします。

3. 実装

以下のスクリプトを作成した Google Apps Script のプロジェクトに追加します。大括弧の部分は各自の情報に置換してください。

1
function main() {
2
const CONSUMER_KEY = '[CONSUMER_KEY]'
3
const CONSUMER_SECRET = '[CONSUMER_SECRET]'
4
const ACCESS_TOKEN = '[ACCESS_TOKEN]'
5
const ACCESS_TOKEN_SECRET = '[ACCESS_TOKEN_SECRET]'
6
const CURRENT_TIME = new Date()
7
8
// OAuth 認証
9
const getTwitterService = function () {
10
return OAuth1.createService('Twitter')
11
.setAccessTokenUrl('https://api.twitter.com/oauth/access_token')
12
.setRequestTokenUrl('https://api.twitter.com/oauth/request_token')
13
.setAuthorizationUrl('https://api.twitter.com/oauth/authorize')
14
.setConsumerKey(CONSUMER_KEY)
15
.setConsumerSecret(CONSUMER_SECRET)
16
.setAccessToken(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
17
}
18
19
// タイムラインを取得する
20
// JSON に変換する
21
const response = getTwitterService().fetch('https://api.twitter.com/1.1/statuses/user_timeline.json?count=200')
22
const json = JSON.parse(response)
23
24
// 投稿から 7 日以上経過しているツイートをフィルタリングする
25
// ツイートの ID を取得する
26
// ツイートを削除する
27
json
28
.filter(function (x) {
29
const createdTime = new Date(x['created_at'])
30
const diffTimeMillisec = CURRENT_TIME - createdTime
31
return 1000 * 60 * 60 * 24 * 7 < diffTimeMillisec
32
})
33
.map(function (x) {
34
return x['id_str']
35
})
36
.forEach(function (x) {
37
getTwitterService().fetch('https://api.twitter.com/1.1/statuses/destroy/' + x + '.json', { method: 'POST' })
38
})
39
}

最後に,上記で作成した main 関数をトリガーに登録します。以下のようにトリガーに登録することで main 関数が定期的に実行されるようになります。

4. おわりに

定期的にツイートを削除してくれるサービスとして TweetDelete が存在します。しかし,TweetDelete の削除頻度は高くなく,指定した期間以上のツイートが残ってしまいます。削除頻度が気にならない人は,TweetDelete を利用するのも有効な方法だと思います。