表題は流行の片仮名でキラキラ輝いてる感がありますが、現状でサーバー上のPHPを使ったタンブラーとツイッターを連携させたボットのプログラムを、Twitter API v2を使うのと同時にNodeJSに移植し作業環境で使っているM1 Mac miniで稼働させようという試みのお話です。
まずツイッターの開発者用ページに行って驚いたのが、その様子が随分と変わっていたことで、必須項目とされているものが空白のままでしたので、認証設定内にあるアプリのタイプや情報にあるコールバックURIを埋めました。サーバー上に置かないということから、次のようにしておきました。
次に任意のプロジェクト用ディレクトリを(ユーザーディレクトリ以下に)作り、それぞれのサービスの公式が公開しているパッケージを取得しインストールします。
ここで発生した問題は、両サービスの開発熱量に関係する記述方法、つまりサンプルコードにもあるように require
を使うか import
を使うかという点で、近代的な方を優先し後者に統一しましたので、package.json
に "type": "module"
を追記します。
後は前回のようにツイートIDを取得する正規表現や処理方法など、PHPで使っていたものを流用して完成なのですが、若干変えた部分が短縮URLの拡張方法で、次の記事を参考に cURL
を使っていた手法から request
モジュールを import
するようにして解決しました(が、既に非推奨なので再検討する必要があります)。
参考: Unshorten (expand) short URLs with Node.js
Twitter API v2 に関しては、エラー内容が詳細に返ってくるなど使い易くなっている一方で、成功した場合の戻り値が…で、調整を待ちつつ暫くは生暖かく見守るしかなさそうです。
参考: postman – Twitter API post a retweet (reply) – Stack Overflow
最後に定期実行として launchd
で使う plist
を記述し load
し移行が終了です。前回はルート権限で /Library/LaunchDaemons
からコンピュータ・スクリプト・フォルダ(/Library/Scripts
)にあるシェルスクリプトを叩いてリモートサーバー上のPHPを呼んでいたものを、~/Library/LaunchAgents
から直接 JS
ファイルを実行するようにしました。これに応じてログファイル(StandardOutPath
と StandardErrorPath
)も ~/Library/Logs
内に格納します。
参考: Macの「ターミナル」でのlaunchdを使ったスクリプトの管理 – Apple サポート (日本)
この作業検証途中で keepalive
を true
にしてしまい、大量のリツイートが同時に飛んでいくというフォロワーの皆様には大変迷惑を掛けましたが、旧方式から脱却できて且つ新しい発見もあり、半日ほどの作業としては大変有意義でした。