(2024-03-18 初稿)
はじめに
X(旧 twitter)は、自分にとっては、ライフログを取る道具だったのだけど、度重なるAPIの変更で、最近は面倒になって放置中だった(笑)。
ところが、以下の記事を見つけて、ほんとに久しぶりにpythonを書いてみた。
この記事は、上記のサンプルや以下のドキュメントを見て、素人がpython3でtwikitを使って、tweetする方法と自らのtweetを取得するサンプルを記述する。
普段から、pythonを使っている方なら、もっと良いスクリプトが書けると思うので、あくまでもサンプルのつもり。
筆者はDebian 12(bookworm)を使っているが、twikitのインストールは、以下のとおり、とても行儀の悪い方法で行った。
$ pip3 install twikit --break-system-packages
皆さんは、仮想環境(venv)を作成してtwikitをインストールしてください。
作成したスクリプトについて
作成したスクリプトは、後述するが、基本的な使い方は以下のとおり。
コマンドライン引数
twk.py "つぶやきたいことをコマンドライン引数で指定する"
コマンドライン引数がないときは、自分のつぶやきを19個(?)取得する。countの数を変更しても、なぜか19個のtweetしか取得できない…^^;
筆者の場合は、ライフログ的な使い方を想定しているので、自分のつぶやきを取得することを重視している。
クッキー(cookie)
twikitは、毎回、ログイン環境を変更する仕様となっているようで、Xにログインするたびに、以下の通知やメールが届く。
Xの通知
ご利用のアカウント(@hogehoge)に新しい端末からログインがありました(2024年3月18日)。確認してください。
mailの警告
ご利用のアカウント(@hogehoge)に新しい端末からログインがありました。確認してください。
そこで、ドキュメントにもあるように、cookieを利用する。
cookieを保存しておき、次回起動時に読み込めば、ログインを省略してつぶやいたり、tweetを取得できたりする。
このスクリプトでは、cookieの保存場所を、以下にしてあるので、適当にディレクトリやファイル名を変更をしてください。
~/.config/twikit/twikit_cookies.json
その他
このスクリプトでは、以下の設定にしてあるので、こちらも適当に変更してください。
auth_info_1='hogehoge', auth_info_2='hogehoge@example.com', password='yourpassword'
もう一つ、twikitを使う上で、重要なこと。
「あまり頻繁に利用しないこと。」頻繁に利用すると、エラーになる。
筆者の場合、最低でも5分間は間隔をあけて、利用するようにしている。
作成したスクリプト
#!/usr/bin/python3 # -*- coding: utf-8 -*- # tweet by twikit # ver 0.01 2024-03-08 start # ver 0.02 2024-03-18 save cookie # ver 0.03 2024-03-18 tweet and get tweets import os import sys from twikit import Client cookie_file = 'twikit_cookies.json' cookie_dir = os.path.expanduser("~/.config/twikit/") cookie_path = cookie_dir + cookie_file #print("cookie_fullpath= ", cookie_path ) if not os.path.isdir(cookie_dir): os.mkdir(cookie_dir) client = Client('ja') if os.path.isfile(cookie_path): client.load_cookies(cookie_path) else: client.login( auth_info_1='hogehoge', auth_info_2='hogehoge@example.com', password='yourpassword' ) client.save_cookies(cookie_path) # 引数の数 # 2: tweetする # other: tweetを得る args = sys.argv if len(args) == 2: client.create_tweet(args[1]) else: user = client.get_user_by_screen_name('hogehoge') user_id = user.id #print(user_id) tweets = client.get_user_tweets(user_id, 'Tweets', count=20 ) #print( len(tweets) ) for tweet in tweets: print( '=============' ) print( tweet.text ) print( tweet.created_at )
スクリプトを実行するときには、実行権を与えてね。
$ chmod +x twk.py
おわりに
久しぶりに、pythonを使ったので、ネットでいちいち検索しながら作った。(^^ゞ
これくらいのスクリプトは、ネット検索しなくてもできるようになりたいけど、筆者の記憶力では無理っぽい…滝汗)