Twitterの「kouna」のアカウントが、絵を見るには少しノイズが多い状態となっていたので、運用方法を変えてみることにしました。
- 作ったものの投稿や告知・ちょっとしたぼやきや下ネタに関しては「kouna」
- 食べ物・ゲーム・世界への怨嗟など日常的な話題に関しては新しく作った「riconagisa」
と言う感じで使い分けしていこうかなと。よろしくお願いいたします。
そこで、「kouna」のアカウントを絵の遡りやすい状態にすべく、イラスト以外のツイートを一括削除しようと思い立ったのです、が。そういったことのできる既存のサービスが無い!
- 最も有名と思われる「黒歴史クリーナー」は、あまり細かく条件を指定できない(tweets.zipを用いた場合だと期間の指定しかできない)
- 細かく条件指定のできる「ツイートの一括削除ツール!」はTwitterAPIを用いてツイート内容を取得するため、3200件までしか遡れない
さて、困ったな……というわけで、Pythonでスクリプトを作ってみました。
初・Pythonです。まともに触った言語がVBAとJavaくらいしかないド素人なのですが、なんとかうまくいったので備忘録も兼ねて記事にしようと思います。
下記の記事を参考にして作ってみました。感謝感謝です。
ツイートを全て消すスクリプト – Qiita
■Pythonのインストール
Python 3.5.2のダウンロードとインストール | Pythonインストールと環境設定
ここの説明の通りにインストールしました。
解説通りに設定すれば環境変数PATH等の設定も不要でした。思った以上に楽でびっくり。
■TwitterAPIトークンの取得
まずはアプリの登録をします!
参考:Twitter REST APIの使い方
- ツイートを一括削除したいアカウントでTwitterにログインします。
- 携帯電話番号を登録していない場合は設定の「モバイル」から登録しておきましょう。
- Twitter Appsにアクセスして、「Create New App」から新しいアプリを作ります。入力欄はすべて後から編集できるので、適当で大丈夫です。
- Name:アプリの名前です。適当でいいです。私は「かみかみ☆ゴッド」にしました。
- Description:アプリの説明です。ここも適当でいいです。
- Website:自分のwebサイトやらブログやらのアドレスをぶち込みましょう。
- Callback URL:今回の方法では使わなかったので、空欄のままでいいです。
- 利用規約を読んだら「Developer Agreement」にチェックをします。
- 「Create your Twitter Application」をクリックすると、アプリが登録されます。やったー!
ここまで来たら、あとはトークンを取得するだけです。
- 「Keys and Access Tokens」タブを開くと出てくる「Application Settings」にある
- Consumer Key (API Key)
- Consumer Secret (API Secret)
- 同じく「Keys and Access Tokens」タブの下の方にある「Create my access token」をクリックすると出てくる
- Access Token
- Access Token Secret
この4つのトークンが必要です。
■ライブラリのインストール
コマンドプロンプトを開いて、
1 |
pip install python-twitter |
と入力するだけです。なんて簡単なんだ……Pythonってすごい……
■画像以外のツイートを一括削除
というわけで、いよいよソースコードです。
Twitter公式からダウンロードできる「全ツイート履歴」の中にある「tweets.csv」を使うことも可能だとは思うのですが、少し中身が複雑なことになっていたので、今回はTwilogからダウンロードできるcsvを利用してみました。
Twilogにログインすると表示される「管理」タブの「ログのダウンロード」からcsvがダウンロードできます。UTF-8だと上手く読み込んでくれなかったので、Shift-JISのほうを使います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#!/usr/bin/env python # -*- coding: utf-8 -*- import twitter import csv #TwitterAPI認証 api = twitter.Api( consumer_key='Consumer Key (API Key)', consumer_secret='Consumer Secret (API Secret)', access_token_key='Access Token', access_token_secret='Access Token Secret' ) #CSVの読み込み csvReader = csv.reader(open('ファイル名.csv', 'r')) #CSVを一行ずつ処理 for row in csvReader: print(row[0], "/", row[2]) #TweetIDと内容を表示 #RTは全削除 if "RT @" in row[2]: #例外処理 try: api.DestroyStatus(row[0]) #ツイートの削除を試みる print(u"■RT削除成功!") except: print(u"■既に削除済みのようです") #画像つきツイートは削除しない elif "pic.twitter.com" in row[2]: print(u"■けさないよ!") #画像なしツイートは削除 else: #例外処理 try: api.DestroyStatus(row[0]) #ツイートの削除を試みる print(u"■削除成功!") except: print(u"■既に削除済みのようです") #処理が終わった時の処理 else: print(u"■おしまい!") |
トークンとcsvのファイル名を書き換えて、UTF-8で保存しましょう。拡張子は「.py」です。
ソースコードとcsvを同じフォルダに入れて、コマンドプロンプトで
1 |
python ファイル名.py |
と入力すれば削除が実行されます。
自分はこれでうまくいったのですが、一度削除してしまったツイートは二度と復元できないので、念のため十分テストをしてから実行してくださいね!
以下、詳しい解説!
■7~13行目
先程取得したAPIトークンを入力します。
コピペをする際に前後に半角スペースが入ると認証に失敗するので気をつけてください。
私はこれで数分悩みました。
■15~16行目
先程Twilogでダウンロードしたcsvのファイル名を入力します。
■18~20行目
先程読み込んだcsvを一行ずつ処理します。
Twilogのcsvは3列になっていて、それぞれ
- 1列目(row[0]):TweetID
- 2列目(row[1]):ツイートの日時
- 3列目(row[2]):ツイート内容
が格納されています。今回は確認のために、1行処理するごとにTweetIDとツイート内容を表示するようにしてみました。
■22~29行目
画像の入っているツイートだけ除外して残りを削除、というコードにしてしまうと、画像の入っているRTが全て残ってしまうので、まずは問答無用でRTを全削除します。
RTの場合、ツイート内容に「RT @」という文字列が入っているので、該当するツイートのTweetIDを指定して削除を行います。
この時、該当するツイートが既に削除されてしまっているとエラーを吐いて強制終了してしまうので、例外処理をしました。
無事にRTが削除できた際には「■RT削除成功!」、既にRTが削除されていた場合には「■既に削除済みのようです」と表示されます。確認用です。
■31~33行目
画像付きのツイートには「pic.twitter.com」という文字列が含まれているので、RTではなく且つその文字列が含まれている場合に「■けさないよ!」という表示だけ残します。
Twitter公式ではない場所に画像を投稿している場合は文字列を差し替えてください。
■35~42行目
RTでもなく、画像も含まれていないツイートを全削除します。
頭の悪い書き方をしている気がするのですが、どう書くのが賢いかわからなかったのでこう書いてしまいました。
Javaだったらメソッドを呼び出したりとかするんですけどね……
■44~46行目
すべての処理が終わったら「■おしまい!」と表示します。
■あとがき
今回始めてPythonやTwitterAPIを弄ってみたのですが、想像以上に簡単で驚きました。
こんなに簡単なコードで動いてくれるんだ……と。もっと早く試していればよかったです。プログラミング、たのしー!
[…] ブログも消してFANBOXに統一してしまおうかと思ったのですが、 技術系の記事(こういう記事とか)を書くにあたって、FANBOXでは機能が少なすぎるんですよね。 「創作を応援する」とい […]