Xに投稿する機能を作る

概要

LOTDをX(Twitter)に自動ポストするために使っていたサービスが停止されたので代替機能を作りました。

経緯

LOTD(今日のリスト)は、システム的には「lotd というカテゴリに入っている(唯一の)投稿」であり、毎日 0:00 に入れ替えています。このような仕様にしたのは、WordPressがカテゴリごとに RSS フィードを作ってくれるからでした。

当サイトをWordPressに乗せ換えた当時はフィードをツイートしてくれる無料サービスの選択肢が多かったため、LOTDだけのフィードさえ作れれば、追加の開発なしで LOTD の tweet bot が実現するのは容易でした。

dlvr.it はそのような配信サービスの一つでした。毎日いい感じに巡回してきてくれて、フィードが更新されていたらツイートしてくれました。Twitter が X になり、ツイートがポストと呼ばれるようになっても、ちゃんと動いてくれました。しかし残念ながら運営者から「1週間後に free plan はおしまいにするよ」というメールが来ました。ずいぶん急な話です。

いくつかプラグインを検討したのですが、特定のカテゴリの投稿だけを毎日ポストしてくれる軽量プラグインが見あたらず、自作することにしました。

Twitter APIライブラリのインストール

PHPでXに投稿するためのライブラリとしては TwitterOAuth が超定番のようです。公式ページによれば composer という依存関係管理ツールで次のようにインストールするのがおすすめとのこと。

composer require abraham/twitteroauth

しかしこの方法では 0.5.4 という、かなり古いバージョンの TwitterOAuth がインストールされてしまいます。どうも composer が参照するPHPのバージョンが古く、そのバージョンのPHPで動くバージョンの TwitterOAuth がインストールされている模様。さすが依存関係管理ツール。

当サイトはレンタルサーバー上で動いているので、/usr/bin の下にはいろいろなバージョンのPHPが混在しています。古いバージョンでも機能すればよいのですが、このバージョンは Twitter API v2 に対応していないようなので、新しい TwitterOAuth をインストールしなければならないようです。

あれこれ調べた結果、構成ファイル composer.json を以下のように作り、composer install することで、新しいバージョンの TwitterOAuth をインストールできました。

{
    "config": {
        "platform": {
            "php": "8.2"
        }
    },
    "require": {
        "abraham/twitteroauth": "^7.0"
    }
}

実のところもっとも時間がかかったのは、この新しいバージョンの TwitterOAuth をインストールする作業でした。いったん環境が整えば、次のようにかなり少ない手数でポストできます。

// TwitterOAuthインスタンスの作成
$X = new TwitterOAuth(
  '(API Key)', 
  '(API Key Secret)',
  '(Access Token)',
  '(Access Token Secret)'
);

// API v2 を指定
$X->setApiVersion( '2' );

// 投稿内容
$post = '[今日のリスト] ';

// ツイートを投稿
$response = $X->post( 'tweets', [ 'text' => $post ] );

// 成功なら 201 (Created) が返ってくる
if ($connection->getLastHttpCode() !== 201) {
	// エラー処理
}

この処理を、LOTDのメール配信の次に実施することにしました。投稿内容もRSSフィードの転送でなくゼロから組み立てるので、リストに付けたタグをXのハッシュタグにするなど、工夫もしやすくなりました。

[lf_load_syntax_highlighter]


コメント

“Xに投稿する機能を作る” への2件のフィードバック

  1. […] これまで外部サービスを使っていたLOTDのXへの自動投稿を、お手製のプログラムに切り替えました。下記のような内容を、メール配信と同じタイミングで投稿します。 […]

  2. […] メール配信処理の後で @listfreak にポストする。 […]