Python3でTwitterの特定のツイートを消してしまおう

こんにちは、kisseです。

いつも、このブログの過去記事を定期的にTwitterに投稿させているのですが、
僕のツイート数が少ないのが原因で僕のアカウントがbotっぽい見た目になっちゃってました。

1個ずつ消してくのも面倒だなぁってことで、
“面倒なことは全部Pythonに任せよう”




目的

  • Python3でTwitterの特定のツイートを消す。

以上です。

環境

macOS上にpyenvで構築した、anaconda-3.5.0の環境で記述、実行しました。
python-twitterのバージョンは、pandasのバージョンは0.20.3です。

使うライブラリ

  • python-twitter (3.4.1)
  • pandas (0.20.3)

以下のコマンドでpython-twitterがあるかどうかを確認します。

pip list --format=columns | grep python-twitter
# python-twitter                     3.4.1

もし、なにも表示されなければインストールが必要です。

pip install python-twitter

pandasも同様に、インストールされていることを確認してください。

今回のコードでは、別ファイルにcsv形式で存在するトークンを読み込むために、pandasを使っています。
これは、コードをGithubに公開する際に、トークンが流出して僕のTwitterアカウントが荒らされることを予防するための措置です。

どこか外に公開するわけでないのであればコードに直接書いても構わないのでpandasがインストールされている必要はありません。

事前準備

TwitterのAPIを利用する際には、Twitter Aplication Managementでのアプリの登録が必要になります。

ログインした後に、”Create New App”からアプリの登録を行います。(この時点では動くものは必要ありません。)
*が付いているとこを記入して登録しましょう。

今回、このアプリに必要な権限は”Read and Write”です。
僕の場合、デフォルトでこの権限になっていたので、気にしません。

今回は自分のアカウントに対して操作を行うので、Access Tokenなどを取得する必要があります。
“Keys and Access Tokens”のタブの一番したで自分のアクセストークンを作成しましょう。

その後、Consumer Key、Consumer Secret、Access Token、Access Token Secretを控えておきましょう

書いたコード

以下に書いたコードを示します。

import twitter
import pandas as pd


# In[ ]:


df = pd.read_csv('keys.csv', index_col=0)


# In[ ]:


CONSUMER_KEY = df.loc['CONSUMER_KEY', 'value']
CONSUMER_SECRET = df.loc['CONSUMER_SECRET', 'value']
ACCESS_TOKEN = df.loc['ACCESS_TOKEN', 'value']
ACCESS_SECRET = df.loc['ACCESS_SECRET', 'value']


# In[ ]:


api = twitter.Api(consumer_key=CONSUMER_KEY,
                         consumer_secret=CONSUMER_SECRET,
                         access_token_key=ACCESS_TOKEN,
                         access_token_secret=ACCESS_SECRET)


# In[ ]:


my_id = api.VerifyCredentials().id


# In[ ]:


statuses = api.GetUserTimeline(user_id=my_id,
                                                count=200,
                                                include_rts=False,
                                                exclude_replies=True)

for s in statuses:
     if '52.193.110.195' in s.text:
        print(s.text + ' '+ str(s.id))
        api.DestroyStatus(s.id)

max_id = statuses[len(statuses)-1].id


# In[ ]:


for i in range(5):
    statuses = api.GetUserTimeline(user_id=my_id,
                                                    max_id=max_id,
                                                    count=200,
                                                    include_rts=False,
                                                    exclude_replies=True)
    
    for s in statuses:
        if '過去記事定期' in s.text:
            print(s.text + ' '+ str(s.id) + ' ')
            api.DestroyStatus(s.id)

    next_max_id = statuses[len(statuses)-1].id
    if max_id == next_max_id:
        max_id = next_max_id
    else:
        break

まずは、twitter.Api()で僕のTwitterアカウントに接続します。

Api.VerifyCredentials()でアカウントのidを取得しています。
Api.GetUserTimeline()で僕のツイート群を取得して、特定の文字列を含むツイートのidを取得して、Api.DestroyStatus()に渡します。
っていう処理でツイートの自動削除を実現しています。

参考

python-twitter Module Documentation
Twitter Developer Platform




おわり

これ、結構便利そうです。笑
でも、定期実行させとくとなると面倒だなぁ。
このブログ上にpythonの環境作るのは面倒だし、新しいサーバー立てるのも違うし、ローカルPCずっとつけっぱにしとくのは違うし。。

ってなったところで、GASの存在を思いだしました。笑
次回、”GASで特定のツイートを消してしまおう”かもしれません。笑

最後まで読んでいただきありがとうございます!

あわせて読みたい