🐋
PHP + Twitter API v2で画像付きツイートする(無料プラン)
環境
- PHP 8.1
- TwitterOAuth (Abraham\TwitterOAuth)
現象/背景
- 2023/5/20頃から、ブログ投稿に連動したTwitter画像投稿が機能していない
原因
- Twitter Developer Portal で該当プロジェクトが凍結されていた
対策1
新たなプロジェクトを作成し、以下の認証情報を更新した
- consumerKey
- consumerSecret
- accessToken
- accessTokenSecret
対策1のエラーと原因
- 認証情報を更新しても以下のエラーがでる
[message] => You currently have access to Twitter API v2 endpoints and limited v1.1 endpoints only. If you need access to this endpoint, you may need a different access level. You can learn more here: https://developer.twitter.com/en/docs/twitter-api/getting-started/about-twitter-api#v2-access-leve
[code] => 453
- 以下のように v1.1でも無料でstatuses/update(ツイート)できるはず
- 実際はv1.1でstatuses/updateできない模様。実際にできなかった。参考:Twitter Developers Forums
対策2
- API v1.1がだめならAPI v2でツイート
- いろいろ調べたところ、以下の振る舞いっぽい
v1.1 | v2 | |
---|---|---|
ツイート | - | ✔ |
画像アップロード | ✔ | - |
- よって、v1.1で画像アップロードをして、v2でツイートしなければならない
コード
function tweet($txt,$img=FALSE){
$consumerKey = "xxxxx";
$consumerSecret = "xxxxx";
$accessToken = "xxxxx";
$accessTokenSecret = "xxxxx";
$connection = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
//画像があればアップロード
if($img){
// 以下はv1.1で動作
$media1 = $connection->upload('media/upload', ['media' => $img]);
$parameters = [
'text' => $txt,
'media' => [
'media_ids' => [
$media1->media_id_string
]
]
];
}else{
$parameters = ['text' => $txt];
}
// これを書くと、以降はv2動作になる
$connection->setApiVersion('2');
// 以下はv2で動作
$result = $connection->post( 'tweets' , $parameters , true); # jsonにするため、trueをかかないとダメ
}
参考
- v2のtweetsに渡すパラメータはjson。TwitterOAuthのpostの第3引数をtrueにするとjsonになる。
- POST /2/tweets
- 同じタイミングで使えなくなった人を観測。このタイミングでx corp.が一斉になんかやったのかもしれない。
Discussion