はじめに
自分の忘備録で記事を書いております。技術的に至らない点多々ありますがご容赦下さい。
今回の記事
前回の記事
安易にPHPのバージョンを上げたら色々ハマった(imagick編)
https://qiita.com/cafe-capitola/items/4c9ba9faad997b299fd9
の続き。
今回のテーマは「PHPのバージョン上げたら今まで動いてたTwitterOAuthが動かなくなっちゃった」です。
私はTwitterにて細々とbotを運営しています。
仮面ライダーBLACKクレジットbot( https://twitter.com/black_staffrole )
はい、オタクです。しかも色んな意味で炎上してる番組です。
仕様としては番組の1話から最終話、劇場版2作におけるオープニングとエンディングに表示されるキャスト・スタッフのデータをひたすらタイプしたCSV化したファイルを用意。たまに本家の写植が間違ってるとかありますけど、それを突き詰めるとキリがないのでそのままパンチ。
30分毎にファイル内のデータをランダムに1レコード出力するという非常に単純かつ簡単なものです。
データは合計3000件オーバー。データづくりよりも、Twitter社との「認証キーを下さい」の長文英語メールを5回ぐらいやり取りした方が辛かった。google先生の翻訳機能様様です。
実はあまりにこの番組を取り巻く環境のカオスさに耐え切れなくなり、今年の頭にこっそりと一部処理を追加していますが、その話は今回のテーマに沿わないので割愛します。
我が家にはbot投稿用兼テスト用LAMP環境としてRaspberryPi3+を使用しています。
開発機のPHPは8.0.2。開発機と実行環境のバージョンが違うのもどうかと思い同じバージョンに揃えました。7.0.X→8.0.2にガッとバージョン上げました。
PHPのバージョンをあげたら、
sudo apt-get install php-curl
するのを忘れずに。
ハマった
botはcronによるphpの実行で動かしています。cronで実行が失敗した時には「失敗しましたメール」が飛んでくるようになっています。
…数分後、やってきました失敗メール。
エラー内容を見る限り、どうやら今まで使用してきたTwitterOAuthのライブラリがPHP8系では動かないようです。
TwitterOAuthの新しいバージョンを落とす
TwitterOAuthの公式ページを見に行くと、自分が当初開発していた頃に比べてあまりにもガラッと変わっていて面食らいました。
Googleで検索をすると、検索上位にGitHubのTwitterOAuthが表示されますが、そこから直でファイルをダウンロードするのは止めましょう。
必要なコンポーネントが含まれていませんので実行時にエラーになります。(やらかした)
公式ページ
https://twitteroauth.com/
を見に行くと、「composer経由で落としてね」とあります。composerってなにぞやと思いつつ、公式ページに行って落としに行きます。
composerをインストールする必要あり
https://getcomposer.org/
若いころの安田顕チックな男性がトップページに出てきます。安田顕が所属しているTEAM NACSにcomposerという演目があるんですが偶然でしょうか。肌の色を見るとマッスルボディは傷つかないを思い起こさせるイラストです。
自分の環境はWindows10なので、Windows InstallerのComposer-Setup.exeを落としてきてインストール。
自分はcomposerをc:\xamppにインストールしました。
composer.pharがあるディレクトリに環境変数pathが通っている事を確認してください。
以上でcomposerのインストールは完了です。
composerでTwitterOAuthをダウンロード
続いて、composerを使用してTwitterOAuthをダウンロードします。コマンドプロンプトでカレントディレクトリをダウンロードしたいディレクトリに移動します。
ではダウンロードしましょう。TwitterOAuth公式のトップに書いてあるコマンドをそのままコピペして実行。
composer require abraham/twitteroauth
ほどなくしてダウンロードが始まります。
自分は一度、この時に「composerなんてものは知らん」とエラーが出ましたが、PCを再起動したら無事にコマンドが実行されました。
ダウンロードが完了した後、カレントディレクトリ内を確認するとファイルとディレクトリが作成されています。
vendorディレクトリの下にautoload.phpがあるのでこのファイルをrequireして、自分の好きなような処理を書きましょう。自分の書いたプログラムのファイルの配置箇所によってrequireするパスは変わるので適時変更してください。(この場合は、カレントディレクトリに自作phpファイルを配置しています。)
require "vendor/autoload.php";
最後に、色々と番組に対する思いとか書きたくなりましたが、長くなりそうだしここは技術系のコミュニティなのでそこは我慢します。
では。