Slide 1

Slide 1 text

X(old Twitter)の軽量フ ロントエンドの Nitterをゲストアカ ウントで利用 Kenichiro Matohara(matoken) 1

Slide 2

Slide 2 text

matoken @ 鹿児島の右下の山奥から参加 好きなLinuxディストリビューションはDebian map: © OpenStreetMap contributors Kenichiro Matohara(matoken) https://matoken.org [email protected] 2

Slide 3

Slide 3 text

follow up kagolug-2023.09 の「 」で紹介した 2023-12- 20 のバージョン0.77.0(227)でサポートデバイスが大分増えた 現在利用している Mi Band 5 の後継はBand 7 Pro 以降OS が 変わってサポート外になっていたので買えるうちに買っておくかとか 迷っていたけど最新の Mi Band 8 もサポートされるようになった 安めのスマートウォッチをOSSでセキュア に使う(Gadgetbridge) Gadgetbridge 3

Slide 4

Slide 4 text

https://codeberg.org/Freeyourgadget/Gadgetbridge/src/bra 77-0 0.77.0 * Initial support for Amazfit Balance * Initial support for Amazfit Active * Initial support for ColaCao 2021 * Initial support for ColaCao 2023 * Initial support for Femometer Vinca II * Initial support for Mijia LYWSD02MMC variant * Initial support for Sony Wena 3 * Experimental support for Divoom Pixoo * Experimental support for Sony WF-1000XM5 * Experimental support for Amazfit Active Edge * Experimental support for Mi Band 7 Pro (Xiaomi Smart Band 7 Pro) * Experimental support for Mi Band 8 4

Slide 5

Slide 5 text

Nitter の最近 5

Slide 6

Slide 6 text

Nitter? X(old Twitter) のプライバシーとパフォーマンスに重点を置いた OSS(AGPL-3.0)な代替フロントエンド,Nim製 X(old Twitter) のURL をNitter と置き換えて使う ex) → JavaScriptが無くても動作,RSS 対応 ログインや投稿は不可 と便利だったのでセルフホストして利用していたがX(old Twitter) の変更で使い物にならなく…… あるはずの投稿が閲覧できなかったり,返信が見えないなど…… https://twitter.com/elonmusk https://nitter.net/elonmusk https://nitter.matoken.org/about http://nitter2l2szql27s7siskdgvtr4sgeq43x7jodtqmltxur3k 6

Slide 7

Slide 7 text

過去の発表 2020-11-28 小江戸らぐ 6 月のオフな集まり(第227回) 2021-06-12 kagolug- 2021.06 「Twitterをちっちゃいリソースで」 「軽量TwitterフロントエンドのNitterの最近のこと」 「軽量TwitterフロントエンドのNitterのアクセス制限」 7

Slide 8

Slide 8 text

Nitter.net とのバージョンの差異 あまり使えないけど一応最新に追従していた 最新にしても本家のNitter.net とバージョンが開いている? selfhost (master branch) 本家 52db03b → guest_accounts branch $ w3m -dump https://nitter.matoken.org/about | grep ^Version Version 2023.10.31-b62d73d $ w3m -dump https://nitter.net/about | grep ^Version Version 2024.01.12-52db03b 8

Slide 9

Slide 9 text

guest_accounts branch ? 例 1. Given the recent changes in Twitter and its API access a new method for accessing Twitter anonymously was devised. This method involves using temporary guest accounts created when going through the onboarding process with the Android app. Guest Account Branch Deployment · zedeus/nitter Wiki 9

Slide 10

Slide 10 text

guest_accounts branch を試す ビルド環境の用意 Nimの用意 Nitter のビルド 10

Slide 11

Slide 11 text

ビルド環境の用意 開発環境を用意 1 開発環境導入 2 Nitter に必要なパッケージを導入 $ sudo apt install build-essential git $ sudo apt install libsass-dev redis 1 2 11

Slide 12

Slide 12 text

Nimの用意 Nim lang の1.6.0+ を用意([1]) 1. Debian 12 bookwormで 1.6.10 12

Slide 13

Slide 13 text

パッケージから導入(Debian 12以降) $ sudo apt install nim 13

Slide 14

Slide 14 text

Nimのbuild済バイナリを用意(Debian 11 以前) 1 Nim lang 公式の最新のbuild済バイナリを入手(x86_64/x86 のみ) 2 Nim 展開 3 一時的にNimにPATHを通す $ wget -c https://nim-lang.org/download/nim-2.0.2-linux_x64.tar.xz \ https://nim-lang.org/download/nim-2.0.2-linux_x64.tar.xz.sha256 $ sha256sum -c ./nim-2.0.2-linux_x64.tar.xz.sha256 $ tar tvf ./nim-2.0.2-linux_x64.tar.xz $ tar xf ./nim-2.0.2-linux_x64.tar.xz $ export PATH=`pwd`/nim-2.0.2/bin:${PATH} 1 2 3 14

Slide 15

Slide 15 text

Nitter build 1 nitter 入手 2 guest_accounts brachに 3 build 4 設定ファイル $ git clone https://github.com/zedeus/nitter $ cd nitter $ git checkout guest_accounts $ nimble build -d:release $ nimble scss $ nimble md $ cp nitter.example.conf nitter.conf 1 2 3 4 15

Slide 16

Slide 16 text

Guest Accounts 以下の を実行してguest account のJSON を入手, guest_accounts.jsonl というファイルにに保存 bash script #!/bin/bash guest_token=$(curl -s -XPOST https://api.twitter.com/1.1/guest/activate.json -H 'Authorization flow_token=$(curl -s -XPOST 'https://api.twitter.com/1.1/onboarding/task.json?flow_name=welcom -H 'Authorization: Bearer AAAAAAAAAAAAAAAAAAAAAFXzAwAAAAAAMHCxpeSDG1gLNLghVe8d74hl6k -H 'Content-Type: application/json' \ -H "User-Agent: TwitterAndroid/10.10.0" \ -H "X-Guest-Token: ${guest_token}" \ -d '{"flow_token":null,"input_flow_data":{"flow_context":{"start_location":{"location curl -s -XPOST 'https://api.twitter.com/1.1/onboarding/task.json' \ -H 'Authorization: Bearer AAAAAAAAAAAAAAAAAAAAAFXzAwAAAAAAMHCxpeSDG1gLNLghVe8d74hl6k -H 'Content-Type: application/json' \ -H "User-Agent: TwitterAndroid/10.10.0" \ -H "X-Guest-Token: ${guest_token}" \ -d "{\"flow_token\":\"${flow_token}\",\"subtask_inputs\":[{\"open_link\":{\"link\":\ $ bash ./guest_accounts.bash | tee guest_accounts.jsonl {"oauth_token":"1719213587296620928-BsXY2RIJEw7fjxoNwbBemgjJhueK0m","oauth_token_secret":"N0WB 16

Slide 17

Slide 17 text

Nitter 起動 動作確認 $ ./nitter Starting Nitter at https://nitter.matoken.org Connected to Redis at localhost:6379 $ w3m http://localhost:8080/elonmusk 17

Slide 18

Slide 18 text

18

Slide 19

Slide 19 text

19

Slide 20

Slide 20 text

20

Slide 21

Slide 21 text

自動起動,httpd 設定など 専用アカウントの下に導入 httpd でTLS やVirtualDomain など その他 about カスタマイズ( edit public/md/about.md && nimble md ) systemd の場合service fileを作り自動起動するように 21

Slide 22

Slide 22 text

制限 https://github.com/zedeus/nitter/wiki/Guest-Account- Branch-Deployment#guest-accounts Save the file and launch Nitter. Each guest account is only valid for 30 days and gives approximately 500 API requests every 15 minutes before it is rate limited. Twitter restricts each IP to creating a single guest account per day, thus generating guest accounts in bulk is a tedious affair beyond the scope of this guide. 22

Slide 23

Slide 23 text

ArgosTranslate翻訳 ファイルを保存してNitterを起動します。 各ゲスト アカウントは30日間のみ有効で、15分ごとに約 500個のAPIリクエストが加算されます。 Twitterは、各IPを制限し、1日1回のゲストアカウ ントを作成するため、バルクでゲストアカウントを 生成することは、このガイドの範囲を超えた退屈な 雰囲気です. 23

Slide 24

Slide 24 text

公開サーバ あっという間にlimit に達してしまう 15分毎のアクセス数/500 以上の数のGuest Accountとそれぞれ のNitter を用意(IPも?)して束ねるなどする必要がありそう あまり現実的ではない…. 24

Slide 25

Slide 25 text

local にも建てる とりあえずlocal に建てて凌ぐ RaspberryPi OS bullseye に導入したい 25

Slide 26

Slide 26 text

RaspberryPi OS bullseye armhf cross build → ターゲットのgcc を用意( gcc-arm-linux- gnueabihf ) して,--cpu に指定( nimble --cpu:armhf -- os:linux …… ) 出来たbinary をcpして実行……librarie のversion 不整合で 失敗 Nim lang をsource からbuild …… 何故か zippy (圧縮ライブラリ) のclone に失敗する head にするとclone 出来,Nim はbuild 出来たがnimble の build に失敗 ← 今ここ dist-upgrade してbookworm にしたほうが早そう 26

Slide 27

Slide 27 text

see also Firefox/Chrome の拡張機能 無料のTweetdeck を復活させる 個人用途&PC 利用ならNitter よりお すすめ  ログインが必須なのでプライバシーは 守られないし,BANされる可能性が上 がると思われる dimdenGD/OldTweetDeck: Returns old TweetDeck, for free! 27

Slide 28

Slide 28 text

まとめ X(old Twitter)の軽量フロントエンドのNitter 軽量,RSS 対応など便利だったがX(old Twitter)側の仕様変更で どんどん使いづらく 今回ゲストアカウントを使う gusest_accounts branch を使うこ とでマシになったが一般公開するのは現実的ではない ローカルで建てることにしたがRaspberry Pi 環境も用意してVPN 経由で使えるようにする予定 みんな自由なActivityPub などに脱X(old Twitter)してくれた ら……串刺し検索が要る? 28

Slide 29

Slide 29 text

奥付 発表 2024-01- 21(sun) 発表者 利用ソフトウェア ライセンス 鹿児島Linux勉強会 2024.01(オンライン開催) Kenichiro Matohara(matoken) Asciidoctor Reveal.js CC BY 4.0 29

Slide 30

Slide 30 text

No content