【図解】Twitter APIを使ってツイートを投稿する【PHP・Laravel】
前回、Twitter APIを利用するための前準備として申請を行いました。
本稿では、実際に投稿するところまでを紹介していこうと思います。
これができれば、ワードプレスの更新記事の自動投稿や、ツイート検索などにも応用ができますので、ぜひ本稿を参考にして使いこなせるようにしていきましょう!
余談ですが、2021年11月現在でのTwitter APIの正式名称は「Twitter API v2」というようです。
開発環境
プログラミング言語:PHP
フレームワーク:Laravel(ララベル)
PC:Windows 10
開発IDE:PhpStorm
公式ドキュメント(リファレンス)
公式が公開しているAPI利用資料はこちらから参照できます。より深い使い方など知りたい場合はぜひ見てみて下さい。
※ただし英語版しかないので、Google翻訳を使ったりして読み解くと楽なのでおすすめです。
APIキー(アクセストークン)を発行する
前回は、APIキーやシークレットキーの取得までを行いました。
まだ開発者ポータルに参加していなかったり、シークレットキーが未発行だったりする場合はそれらの情報も必要になるので、下記記事を参考にして、発行を済ませておきましょう。
シークレットキーの他にもアクセストークンという文字列が必要になります。
なので、それらをまず、発行していきましょう。発行ページはこちらからできます。
1.Basic infoに情報を書き加える(氏名や居住地など)
ページは「https://developer.twitter.com/en/portal/petition/standard/basic-info」です。
What’s your name? : 本名をローマ字で書きました
What country are you based in? : 居住地は日本なので「Japan」としました
Whats’s your current coding skill level? : コーディングスキルはある程度あるので「Some experience」としました
最後に、「Want updates? : Yes」にチェックをしてから、「NEXT」を押しましょう。
2.Intended useに情報を書き加える(APIの用途など)
In your words : APIの使い道をあなたの言葉で書く
回答例:
日本語訳:
Are you planning to analyze Twitter data? : Twitterの分析データを使う予定はありますか? : No
Will your app use Tweet, Retweet, Like, Follow, or Direct Message functinality? : ツイート、リツイート、いいねなどの機能を使いますか? : Yes
「 Will your app use Tweet, Retweet, Like, Follow, or Direct Message functinality」を「はい/Yes」にした場合は、別途、詳細使用用途を聞かれますので、ここも英語で記入します。
回答例:
日本語訳:
その他のチェック項目は全て「いいえ/No」にしました。
Do you plan to display weets or aggregate data about Twitter content outside Tiwtter? : Twitterのサイト以外でTwitter社のデータ(ツイートなど)を表示する予定はありますか? : No
Will your product, service, or analysis make Twitter content or derived information available to a government entity? : あなたの製品、サービス、または分析は、Twitterコンテンツまたは派生情報を政府機関が利用できるようにしますか? : No
ここまで入力出来たら「NEXT」を押しましょう。
3.Review画面で確認して「NEXT」を押す
この画面では今までに入力した回答に対する確認画面となります。特に問題なければ、「NEXT」を押して先へ進みましょう。
4.利用規約を読んで同意する
下記のように「Application approved!」となれば、利用設定は完了です。
次章からいよいよPHPを使って自動投稿していきます!
プログラミングして自動投稿する
ここからはPHP+Laravelを用いてTwitterへの自動投稿を試みてみます。
1.Composerを使って、Twitterライブラリをインストールする
PHPで開発する際は、Laravelを使うと既存ライブラリを利用できるので便利です。
PhpStormのターミナルから下記コマンドを打ちます
composer require abraham/twitteroauth
すると下記のようになり、インストールが完了します。
PS C:\Users\Administrator\PhpstormProjects\PRG_NAME> composer require abraham/twitteroauth
Using version ^3.1 for abraham/twitteroauth
./composer.json has been updated
Running composer update abraham/twitteroauth
Loading composer repositories with package information
Updating dependencies
Lock file operations: 1 install, 0 updates, 0 removals
- Locking abraham/twitteroauth (3.1.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 1 install, 0 updates, 0 removals
- Downloading abraham/twitteroauth (3.1.0)
- Installing abraham/twitteroauth (3.1.0): Extracting archive
Generating optimized autoload files
Class App\Library\TwitterManager located in C:/Users/Administrator/PhpstormProjects/PRG_NAME/app\UserFunctions\TwitterManager.php does not comply with psr-4 autoloading standard. Skipping.
composer/package-versions-deprecated: Generating version class...
composer/package-versions-deprecated: ...done generating version class
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi
Discovered Package: barryvdh/laravel-dompdf
Discovered Package: barryvdh/laravel-ide-helper
Discovered Package: facade/ignition
Discovered Package: fideloper/proxy
Discovered Package: fruitcake/laravel-cors
Discovered Package: laravel/sail
Discovered Package: laravel/tinker
Discovered Package: laravel/ui
Discovered Package: nesbot/carbon
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
88 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
PS C:\Users\Administrator\PhpstormProjects\PRG_NAME>
事前設定はこれにて完了です。Laravelを使えば、ライブラリのインストールをするだけでとっても簡単に導入できるので楽ちんですね。
2.サンプルプログラム
投稿プログラムはこのようにすればOKです!
<?php
namespace App\UserFunctions;
use Abraham\TwitterOAuth\TwitterOAuth;
use DateTime;
use DateTimeZone;
use Exception;
use Illuminate\Support\Facades\Log;
class TwitterManager
{
private const TWITTER_API_KEY = "(25文字の文字列)";
private const TWITTER_API_SECRET_KEY = "(50文字の文字列)";
private const TWITTER_CLIENT_ID_ACCESS_TOKEN = "(50文字の文字列)";
private const TWITTER_CLIENT_ID_ACCESS_TOKEN_SECRET = "(45文字の文字列)";
// Bearer token: AAAAAAAAAAAAAAAA.....XYZ
// 投稿
public function tweet()
{
$twitter = new TwitterOAuth(
self::TWITTER_API_KEY,
self::TWITTER_API_SECRET_KEY,
self::TWITTER_CLIENT_ID_ACCESS_TOKEN,
self::TWITTER_CLIENT_ID_ACCESS_TOKEN_SECRET
);
$message = <<<EOT
テスト投稿
EOT;
}
$ret = $twitter->post("statuses/update", [
"status" =>$message]);
var_dump(json_decode(json_encode($ret,320), true, 320)['errors'][0]['message']);
}
}
このとき、Developer Portalサイト側での設定が未完了だったり、アプリ権限が「Read Only」だったりするとエラーが出ます。
エラー内容は「$twitter->post()」の戻り値に入っているので「[‘errors’][0][‘message’]」を指定してあげればエラーメッセージを読み取ることができます。
例えば、以下のようなエラーメッセージが出た場合はReadOnlyになっている証拠です。
このエラーが出たときは、下記記事を参考にして、アプリ権限を「Read/Write」に変えてください。
正常に投稿が完了するとこのようになります。
無事に投稿できていますね!良かったです。
結び
それでは本稿のまとめです。
APIキー(アクセストークン)を発行する
Basic infoに情報を書き加える(氏名や居住地など)
Intended useに情報を書き加える(APIの用途など)
Review画面で確認して「NEXT」を押す
利用規約を読んで同意する
プログラミングして自動投稿する
Composerを使って、Twitterライブラリをインストールする
サンプルプログラム
やることとしてはとっても簡単で、投稿用アクセストークンを発行してプログラム開発をしていくだけですね!
本稿では投稿するプログラムを紹介しましたが、Twitter APIには既存ツイートを読み取るプログラムなんかもあります。
$twitter->get('statuses/user_timeline', ["count"=> 2]);
APIを使えばできることの幅が広がりますので、ぜひ、公式ドキュメントを見ながらいろいろ試してみてください。
参考
PurePHPで行う場合
本稿ではLaravelを用いて作成しましたが、PurePHPでも行えます。
その場合は「TwitterOAuth」ではなく「TwitterAppOAuth」であることに留意してください。