悪の秘密結社Twitter社から奪われた「流れるタイムライン」を復活させる(擬似的に)
10月 1, 2022
皆さんご存知の通り、随分前に闇のTwitter社によってUserStream APIが廃止されました。「今更お前は何を言っているんだ?」「TweetDeck使えば良くないすか?」「スマホはMarinDeckであるし」とお思いの方々は恐らく必要ない情報しか書いてないのでお帰りください。
これまでのあらすじ #
UserStream APIの廃止 #
UserStream APIの廃止以前、は私は非公式クライアントfeatherを愛用していました。しかし、2018年8月16日、UserStream APIが廃止され、(他にも色々とありますが)タイムラインの更新は15回/15分に制限されてしまいました。その結果、多くのクライアントから流れるTLが姿を消しました。
そこで、世の中の賢い人々は「このままではツイ廃の命が危ない」と幾つかの代替案を提案しました。
代替案 #
- TweetDeckを使う
- Twitter社に買収されたクライアントTweetDeckは特別扱いで、APIを叩きまくれるようになっているので、今でもTLは流れている。のでPCやタブレットユーザはTweetDeckを使えば良い。私もPCの時はTweetDeckを使う。
- MarinDeckを使う
- Web版TweetDeckをいい感じにスマホで使えるように調整したアプリ。
- リスト機能を使う
- リストは900回/15分の更新が可能なので、これを利用して最短3秒間隔で最新ツイートを取得できる。それを利用して、リストから一定間隔で自動的に最新ツイートを取得する機能をもつクライアントがある。
- つまり、リストにフォローしているユーザ全てを追加すれば、擬似的に今までの「流れるタイムライン」を再現できる。
UserStream API廃止当初、私はリスト機能を用いて流れるタイムラインを再現していた。しかし、通知機能が使えなかったり、最新の機能(アンケートなど)が使えなかったりと不便なところも多くなっていたので、結局公式クライアントを使うことが多くなっていった。
それから数年、最近Twitterは突然のUI変更やリプライ欄のすぐそばに全く関係のないツイートやプロモーションを表示したりと少し使い勝手が悪くなってきました。そこで、「久々にfeatherを使ってみるかー」と思い、リストを管理しようとしました。しかし…
今回のお話 #
リスト管理サービスの終了 #
リストの管理にはicotile3やTimeLine Copier - TimeLine to List(Twitterでフォローしてる人をリストにコピーするツール)といったツールが使われてきました。 前者は複数のユーザを選択して一括でリストに追加したり削除ができるサービスであり、後者は自分がフォローしているユーザを全てリストに追加するサービスというものです。私はこの二つのサービスをよく使っていました。
しかし、この二つのサービスは余りに多くのユーザに使われたためか、Twitter社にAPIの使用を制限されてしまったようで、開発終了やサービス終了の発表がされてしまいました。ここで再び、闇の組織によって「流れるTL」が奪われてしまったのです。
自前のツールを用意した #
そこで、仕方がないので自分でこれらの代用となるものを作って、自分のAPI keyを用いて「流れるTL」を復活させようと思い、なんかやったのが今回のお話です。
API keyは使ってなかったものを使い、言語には今回はmacOSやiOSアプリ以外では使ったことがなかったSwiftにしました。ライブラリの管理がSwiftPMで簡単にできるのでいい感じです。 TwitterAPIKitというSwift向けのライブラリがあったので、ありがたく使わせていただきました。
timeline-list-sync #
そうして出来上がったものが、timeline-list-syncです。 Mac以外でも動きます。(私はRaspberry Piで動かしてる)
自分がフォローしているユーザー(と自分自身)をリストに追加したり、フォロー解除したユーザーをリストから削除する処理を自動でおこなってくれます。ただし、APIのRate limitに引っかからないようにちょっとずつです。(一度に追加、削除できるのは100件まで)
icotile3のようなリストの編集機能は持ちませんが、TimeLine Copier - TimeLine to List(Twitterでフォローしてる人をリストにコピーするツール)と大体同じことができます。
使ってみる #
細かい使い方はリポジトリのREADMEを読んでください。 API keyなどその他諸々の設定は環境変数で設定して、実行すると、指定したリストがタイムラインと同期するようにユーザーの追加、削除が行われます。
その都度自分で実行しても良いのですが、面倒であることと、一度の実行で完全に同期が完了するわけでは無いので、cronで定期実行してあげます。
私はこんな感じに設定してます。~/.timeline-list-sync.env
に設定を書いておいたので、それを読み込んで、実行です。
*/30 * * * * . ~/.timeline-list-sync.env && /usr/local/bin/timeline-list-sync
Twitter社によるとRate Limitは300リクエスト/15分で余裕なので100件追加しても余裕があるはずなのですが、実際怪しいところがあるので、少し緩めの30分間隔に設定してます。(攻めたい人はソースコードいじって一度に300件処理するようにして、cronでは15分間隔で実行するように設定してださい)
うまく動くとこんな感じに更新時刻が説明欄が更新されます。
いいね、自動更新されてる pic.twitter.com/JdfonmttiI
— バトルプログラマー見習いいちご (@petitstb) October 1, 2022
次回予告 #
恐らく次回は無い。
TwitterAPI v1で作ってしまったので、暇な時間があればv2に対応しようと思います。
いつかTwitter社は俺が倒してやる。またはイーロン・マスクが倒す。