ひゃまだのblog

ひゃまだ(id:hymd3a)の趣味のブログ

API不要のtwikitで、tweetまたはtweetを取得する

(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を使ったので、ネットでいちいち検索しながら作った。(^^ゞ

これくらいのスクリプトは、ネット検索しなくてもできるようになりたいけど、筆者の記憶力では無理っぽい…滝汗)

 

関連ページ