Twitter APIが更新された、以前作成したアプリがエラーで使えなくなったので新しいAPIで、実際にツイートできたコードを備忘録的に投稿します。
開発者アカウントの作成
アプリを作る前に、自動ツイートするために利用する Twitter APIの開発者アカウントとして申請する必要があります。
更新された新しい Twitter APIは有償化されていますが機能が制限された「free」プランでも、1時間間隔で自動ツイートするくらいの頻度であれば十分使うことが出来ます。
具体的な開発者アカウントとアプリ申請については、別記事をご覧ください。
WordPressから記事を取得
WordPress内に投稿されている記事は、REST APIを使って取得ができます。
例えば、次のようなURLをブラウザのアドレスに入力して、画面に文字が沢山表示されれば、REST APIが使えます。
https://sample.com/wp-json/wp/v2/posts
また、多くの記事が投稿されているWordPressの場合には、取得に時間がかかる場合があるので、タグやカテゴリーなどで取得される記事をある程度制限を設定しておくとパフォーマンスが上がります。
実際に、PHPで投稿されている記事をランダムに抽出するには次のように行います。
//対象となる全記事を取得
$url = "https://blog.janjan.net/wp-json/wp/v2/posts?tags=123";
$json = file_get_contents($url);
$arr = json_decode($json, true);
//ヘッダーから総記事数を取得
$headerarr = get_headers($url, 1);
$articles = $headerarr["X-WP-Total"];
//関数を使って乱数を発生
$min = 1;
$max = $articles;
$rnd = mt_rand ($min, $max);
//乱数で再度記事を取得
$url = "https://blog.janjan.net/wp-json/wp/v2/posts?tags=123&per_page=1&page=" . $rnd;
$json = file_get_contents($url);
$arr = json_decode($json, true);
これで、毎回処理が行われる度にランダムで異なる記事を抽出できました。
後は記事のタイトル、URLとタグ情報を取得して、ツイートする際の投稿内容を成形していきます。
foreach($arr as $data):
//記事内のタイトル、URL、タグを取得
$title = $data["title"]["rendered"];
$link = $data["link"];
$tags = $data["tags"];
$taglist = "";
foreach($tags as $tagid):
$url = "https://blog.janjan.net/wp-json/wp/v2/tags/" . $tagid;
$json = file_get_contents($url);
$tag = json_decode($json, true);
$name = $tag["name"];
//タグの先頭に#を追加してハッシュタグとして利用
$taglist = $taglist . "#" . $name . " ";
endforeach;
endforeach;
//ツイートする際のコンテンツとして連結。
$content = $title . "\n" . $taglist . "\n" . $link;
Twitter APIで自動ツイート
アカウントを開発者用と、APIを使うためのアプリを申請が完了したら、API Key、API Secret、Access Token、Access Token Secretの4つの値をDeveloper Portalの[Keys and tokens]で確認しておきます。
APIへのアクセスをする部分については外部ライブラリ[Abraham\TwitterOAuth]を使いました。
各種キーは、後で使いまわすことになるので外部ファイル(tw-config.php)にまとめます。
tw-config.php
<?php
define('API_KEY', 'Developer Portal に表示される API Key');
define('API_SECRET', 'Developer Portal に表示される API Secret');
define('ACCESS_TOKEN', 'Developer Portal に表示される Access Token');
define('ACCESS_SECRET', 'Developer Portal に表示される Access Token Secret);
?>
<?php
//Twitter APIのキーを読み込み
require_once('tw-config.php');
$apiKey = API_KEY;
$apiSecret = API_SECRET;
$accessToken = ACCESS_TOKEN;
$accessTokenSecret = ACCESS_SECRET;
//Twitter認証用ライブラリの読み込み
require_once("twitteroauth-master/autoload.php");
use Abraham\TwitterOAuth\TwitterOAuth;
//各種キーを使って認証
$twitterOAuth = new TwitterOAuth($apiKey, $apiSecret, $accessToken, $accessTokenSecret);
$twitterOAuth->setApiVersion('2');
$twitterOAuth->post('tweets', ['text' => $content], true);
$status = $twitterOAuth->getLastHttpCode();
if($status >= 400)
{
//失敗した時の処理
}
?>
新しい Twitter APIでは投稿はV2の仕様で行うため以下のように “setApiVersion” を設定しておく必要があります。
$twitterOAuth->setApiVersion('2');
コードが正しく実行されれば、TwitterにAPIからツイートした投稿が表示されます。
Cron ジョブで自動化
作成したPHPファイルを定期的に動作させるために、サーバーの「Cron ジョブ」を使います。大抵のサーバーでは使えるはずですが、レンタルサーバーの仕様で使えない場合もあります。
[cPanel]が使えるのであれば、[Cron ジョブ]で設定が可能です。[コマンド]部分には、次のような感じで設定します。
/usr/bin/php /home/<...PHPファイルの場所>
まとめ
新しい Twitter API を利用して、WordPressの記事をツイート投稿をするアプリが作成できました。
今回は、ランダムで取得した記事を定期的にツイートをしたり、WordPressなど他のサービスの投稿へのリンクを機械的につぶやくことが可能になります。
Twitter APIでWordPressの記事を自動ツイートしたい人の参考になれば幸いです。
スポンサーリンク
最後までご覧いただき、ありがとうございます。