API

【図解】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の使い道をあなたの言葉で書く

回答例:

We use the Twitter API to create a bot program that posts automatically. Use the API to automatically post tweets about recommended products that are listed in the popularity ranking using Google Apps Script.

日本語訳:

私たちは自動投稿するBOTを作るためにTwitter APIを利用します。自動投稿の内容は、製品紹介やランキング調査です。Google Apps Scriptプログラミング言語を使って自動投稿します。

注意点として、300文字以上で書かなければなりません。それ以下の文字数でも一応申請自体は可能なんですが、後日改めて具体的な使用用途をTwitter社からメールで尋ねられます。

どうせその際にがっつり回答するのであれば、このタイミングでしっかりと文字数を書いておくと後々楽になります。

また、ここに記載する内容は必ず「あなた自身の言葉」で書いてください。既存の回答例などからのコピペはダメらしいです!

「どんな目的で誰に対してアプリケーションを作ろうとしているのか?」をあなたの言葉で日本語でまとめておき、Google翻訳などのwebサービスを使って英語翻訳するだけで、OKです。難しい言い回しや英単語を使う必要はないので、安心してください。

  • 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」にした場合は、別途、詳細使用用途を聞かれますので、ここも英語で記入します。

回答例:

Yes, Bot uses only the tweet function. If a particular website update is confirmed, this bot will tweet that.

日本語訳:

はい、ボットはツイート機能のみを使用しています。 特定のWebサイトの更新が確認されると、このボットはそれをツイートします。

その他のチェック項目は全て「いいえ/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になっている証拠です。

You currently have Essential access which includes access to Twitter API v2 endpoints only. If you need access to this endpoint, you’ll need to apply for Elevated access via the Developer Portal. You can learn more here: https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-level

このエラーが出たときは、下記記事を参考にして、アプリ権限を「Read/Write」に変えてください。

正常に投稿が完了するとこのようになります。

無事に投稿できていますね!良かったです。

結び

それでは本稿のまとめです。

  1. APIキー(アクセストークン)を発行する
    1. Basic infoに情報を書き加える(氏名や居住地など)
    2. Intended useに情報を書き加える(APIの用途など)
    3. Review画面で確認して「NEXT」を押す
    4. 利用規約を読んで同意する
  2. プログラミングして自動投稿する
    1. Composerを使って、Twitterライブラリをインストールする
    2. サンプルプログラム

やることとしてはとっても簡単で、投稿用アクセストークンを発行してプログラム開発をしていくだけですね!

本稿では投稿するプログラムを紹介しましたが、Twitter APIには既存ツイートを読み取るプログラムなんかもあります。

$twitter->get('statuses/user_timeline', ["count"=> 2]);

APIを使えばできることの幅が広がりますので、ぜひ、公式ドキュメントを見ながらいろいろ試してみてください。

本気でプログラミングを学ぶなら、テックアカデミー!

私も通った経験があるプログラミングスクール「テックアカデミー」では、マンツーマン指導をしてくれます。

週に1回のZoomミーティングでは不明点を直接講師の方と会話できたり、日々のチャットでもすぐに回答を貰えて、プログラミング初心者だった私にはとっても助かりました!

無料体験入学もしている今がチャンスですね!

ここから本格的にTwitter APIを使っていくのなら、JavaやPython、PHPといったプログラミング言語の理解も必要なので、しっかりと勉強して、着実にプログラミングを身に着けていきましょう!

参考サイト

本稿でうまくいかなかったり書かれてないエラーが出たりした場合は、他の記事も参考にしながら読み進めると、より理解度が深まるかと思いますので、私がピックアップした参考になる他サイトをここで紹介しておきます。