ツイッタークライアントを作った2022.10.01
Twitter を何処まで読んだかを android スマホと Mac で同期して欲しいのだけど、どうも出来ないっぽい。 iPhone と Mac なら Tweetbot ってので出来るらしいんだけどな。 なので自力で Twitter Client を作る事にしたぞい。 今回の記事はそのやり方の入口だけを紹介しようと思います。 何処にも載っていない方法でエラーを回避したので、この方法が誰かの役に立つかと思って。 もっとスマートな方法がある筈だからソレを知っている人には滑稽なやり方だと思うけどね。 自分…勉強…嫌いなもので…。
環境は
M1 Mac mini 2020 の macOS Monterey 12.5.1 に XAMPP を入れた Apache+PHP+HTML+CSS+Javascrip な環境にて。 php のバージョンは 8.1.6。 composer って PHP のパッケージ管理を使い、それ経由で TwitterOAuth ってライブラリをインストールします。 それと事前に Twitter の開発者登録をしてアクセスレベル Elevated を取得しておきましょう。
ターミナルで実行するコマンド
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
// composer.phar 生成して composer-setup.php を消す
php composer-setup.php
rm composer-setup.php
// 生成された composer.phar を /usr/local/bin に移し自身も移動
sudo mv composer.phar /usr/local/bin/composer.phar
cd /usr/local/bin
// TwitterOAuth インストール
php composer.phar require abraham/twitteroauth
PHP ファイルのソースコード
// ライブラリ読み込み
require "/usr/local/bin/vendor/abraham/autoload.php";
require "/usr/local/bin/vendor/abraham/twitteroauth/src/TwitterOAuth.php"; // 本当は必要無いけどこうしないとエラーが出るから
require "/usr/local/bin/vendor/composer/ca-bundle/src/CaBundle.php"; // 本当は必要無いけどこうしないとエラーが出るから
use abraham\twitteroauth\TwitterOAuth;
// KEY は APP_KEY とか API_KEY とか CONSUMER_KEY とか COSTOMER_KEY とか呼ばれる事もあります
// 管理画面では見れない?ので生成時は忘れずにコピーしておきましょう
define("KEY", "******************************");
define("KEY_SECRET", "******************************");
define("TOKEN", "******************************");
define("TOKEN_SECRET", "******************************");
// TwitterOAuth オブジェクト生成
$tw = new TwitterOAuth(KEY, KEY_SECRET, TOKEN, TOKEN_SECRET);
// 開発者登録をしたアカウントのホーム画面を取得
$param = array(
"count" => 10,
"tweet_mode" => "extended",
#"since_id" => null,
"exclude_replies" => false,
"include_entities" => true,
);
$timeline = $tw->get("statuses/home_timeline", $param);
var_dump($timeline);
TwitterOAuth.php と CaBundle.php を直接 require して Fatal error: Uncaught Error: Class "abraham\twitteroauth\TwitterOAuth" not found と Fatal error: Uncaught Error: Class "Composer\CaBundle\CaBundle" not found のエラーを抑えたのが自力解決ポイント。 普通にファイルをコピーするだけで使えるようにしてよ全くもう。
そんなこんなで一通り開発も終わりデータを本番環境にアップロードしターミナルコマンドも実行して色々インストール。 したのに CaBundle.php が No such file or directory だとー! 仕方ないので開発環境にインストールされていた ca-bundle ディレクトリを /usr/local/bin/vendor/composer/ にコピーして対応。 今度はコピーだけでイケた。 今度こそ終了だー。
そうだ Twitter API の解説ページも載せておこう。 本家の Docs を見に行ったけど何処に何が書いてあるかサッパリ分からなかったので。 コレも分かる人なら本家 Docs を読み解いてしまうのだろうね。 そういう人向けに作っているから分かりにくいんかな。
https://syncer.jp/Web/API/Twitter/REST_API/GET/statuses/home_timeline/
という訳で完成です。 ホーム画面を見るだけしか出来ないのでそれ以外は全てツイッターに飛ばしてソッチでやってもらう割り切り仕様。 クライアントじゃなくてビューワーやね。 見るにしてもアンケートや外部ページの
他には、本家クライアントはツイートを下から上に読むのに文字の流れや返信は逆の上から下、という自分的にはチグハグに思う仕様を全て上から下に読むように統一したった。 画像が複数ある場合に端がカットされる現象もされないようにした。 やろうと思えば NG ワードとかも設定可能。
よーしコレも RSS リーダーのように使いたい人に開放しますよー。 ただ使いたい人自身が開発者登録をする必要があるのでハードル高し。 無料のアクセスレベルだと頻繁にアクセスすると一時的にブロックされるのもハードルたかし君。