ランダムアクセスメモリ

沖縄移住、マンガ、Web制作、ゲーム、将棋の話をランダムに。

【PHP】V2 EssentialのTwitter APIで自動投稿(BOT作成)をする方法

2021年11月から、面倒な申請がなくてもTwitterのAPIが使えるEssentialアクセスが利用できるになった。しかし、日本語の情報がそれほど多くなく、意外と苦戦してしまったので記録として残しておきたい。

Essentialアクセスの条件は

・月に50万ツイートまで
・1つのアカウントで1つのプロジェクトまで
・V1.1は利用できない(V2のみ可)

とのことなので、一般的なユーザーとしては十分な気がする。

今回の目標は、BookSurfというアンテナサイトが貯めた書籍情報をランダムでピックアップして1日4回ツイートするアプリを作成する。
今回はさくらのレンタルサーバ スタンダード での例を紹介するが、ほかのサーバでも問題ない。

※基本的なLinuxコマンドなどの知識は必要になります。

 

EssentialアクセスでAPIを取得する

まずはデベロッパー用サイトにアクセスして、各種APIキーを取得しよう。以前はアプリの使用目的を英語で書いて認証をもらう必要があったが、EssentialアクセスならAPIキーを即取得できる。

https://developer.twitter.com/en/apps/

上記ページにアクセスして、Twitterでログイン、「Create an App」からアプリを作成する。いくつかの質問をされるので答えていけば良い。

f:id:onsen222:20220311211641p:plain

「Settings」の一番下「EDIT」から「QAuth 1.0a」を有効にし、「App Permissions」を「Read and write」に変更する。

f:id:onsen222:20220311211801p:plain

Callback URL/Ridirect URLの入力も行う。

最後に一番下にある「Save」で保存することも和ずれずに。

「twitter-api-v2-php」をcomposerでインストールする

今回のBOTは「twitter-api-v2-php」を使って実装する。twitter-api-v2-phpの導入にはcomposerが必要になる。

 

composerは、SSH経由でのインストールが必要。
Tera Termなどのターミナルソフトを使い、ログインしよう。
さくらインターネットの場合、公式サイトのインストール方法を参考にしてほしい。

help.sakura.ad.jp

※FTPパスワードを変えている場合も、SSHのパスワードは初期でもらったパスワードが必要になる。自分はそれでちょっとハマった。

※レンタルサーバーの場合、スタンダード以上のみSSHが利用できる。ライトは不可。


composerのインストールは以下のサイトが参考になる。

brainlog.jp

コマンド操作をほとんどしたことがない初心者には若干難しいかもしれない。LINUXに慣れていればまったく問題はずだ。

(composerを今回しか使わないなら、ホームディレクトリにcomposerをインストールしまっても良い)

 

composerの準備ができたら、BOTを置くディレクトリに移動してtwitter-api-v2-phpをインストールする。

コマンドは以下の通り

composer require noweh/twitter-api-v2-php

 

Tera Termで実行すると以下のようになる

f:id:onsen222:20220311211057p:plain

こんな感じでインストールされる。

「vendor」ディレクトリと「composer.json」「composer.lock」ファイルが作成されてればOK。

 

自動ツイートするプログラムを作成

自動ツイートするプログラムのコートは以下のどおり。ほぼReadMeそのまま。

<?php
require __DIR__ . '/vendor/autoload.php';
use Noweh\TwitterApi\Client;

$settings = [
    'account_id' => 1234567,
    'consumer_key' => 'CONSUMER_KEY',
    'consumer_secret' => 'CONSUMER_SECRET',
    'bearer_token' => 'BEARER_TOKEN',
    'access_token' => 'ACCESS_TOKEN',
    'access_token_secret' => 'ACCESS_TOKEN_SECRET'
];

$client = new Client($settings);

$return = $client->tweet()->performRequest('POST', ['text' => 'This is a test....']);

account_idは「APP ID
consumer_keyは、API Key and Secretにある「API Key
consumer_secretは、同じくAPI Key and Secretにある「API Key Secret
bearer_tokenは、「Bearer Token」(これは以前にはなかった)
access_tokenは、「Access Token and Secret」にある「Access Token
access_token_secretは、同じく「Access Token and Secret」にある「Access Token Secret

以上を書き換えよう。


実行すれば「This is a test....」とツイートされるはずだ。
うまく行かない場合は

ini_set("display_errors", "On");

を付けてエラーチェックし、エラコードを確認しよう。403や401ならキーが間違っているかも。再度入れ直したらうまくいくかもしれない。

 

ツイートの検索、ユーザーの検索、リツイートなど

検索やユーザー検索、リツイートなどは今回試してない。が、GitHubページで解説されているので、そちらを参考にすれば良いと思う。

 

以上、Essentialアクセスでの自動投稿の方法でした。