追記
いいね数が 3 以上など、min_faves や min_retweets を使用した検索はできない。
(v1ならできるが、v2では無理)
いいね数やRT数を取得したい場合は、以下のようにする
$params = [
"tweet.fields" => "author_id,created_at,public_metrics",//public_metrics をつける
];
ラーメンに関するユーザーを探したい時(v1に戻す)
// $twi->setApiVersion("2");
$res = $twi->get("users/search", ["q" => "ラーメン"]);
はじめに
twitter api v2 で ツイートを投稿するとうまくツイートできない。
よってツイートする場合は cowitter を使う。
検索するときは abraham/twitteroauthを使う。
参考
https://twitteroauth.com/
https://qiita.com/ichii731/items/40b8c837028e7cef13d4
https://labo.kon-ruri.co.jp/twitter-api-v2-search-tweets/
制限
1アプリあたり
450回/15分
インスコ
composer require abraham/twitteroauth
use Abraham\TwitterOAuth\TwitterOAuth;
//中身
//v2ならベアラートークンを管理画面から取得できる
$bearer = 'AAAAAAAAAAAAAAAAAAAAAxxxxxxxI';
$twi = new TwitterOAuth(
config('app.twitter_client_id'),//APIKEY
config('app.twitter_client_secret'),//APISECRET
null,
$bearer
);
$twi->setApiVersion("2");
$query = "美味しい #ラーメン -is:retweet -has:mentions"; // RTを除外したい時
//or 句のときはそれぞれに -is:retweet とかをつける
//$query = '#ラーメン 美味しい -is:retweet -has:mentions OR #ラーメン グルメ -is:retweet -has:mentions';
$params = [
/*
※queryとmax_resultは必須
*/
"query" => $query,
"start_time" => "2022-4-27T00:00:00+09:00",
"end_time" => "2022-4-29T00:00:00+09:00",
"tweet.fields" => "author_id,created_at", // 今回は追加で投稿日時を指定
'expansions' => 'author_id',
"user.fields" => "id,name,username,description,profile_image_url",//画像サイズは _normal を消せばオリジナルサイズになる
"max_results" => 100 // 10~100の間を指定
];
$res = $twi->get("tweets/search/recent", $params);
print_r($res);
これで
・ツイート
・ツイートしたユーザーの情報
を取得できる
Twitterapps管理画面よりプロジェクトを作り、所属させないと以下のエラーが出る。
When authenticating requests to the Twitter API v2 endpoints, you must use keys and tokens from a Twitter developer App that is attached to a Project. You can create a project via the developer portal
また、
bird-elephant ライブラリも使ってみたが、バグが有った。
ユーザーIDを指定してユーザーの情報を取得
$bearer = 'your...';
//アプリ認証でやるので|ベアラートークンを入れる
$twi = new TwitterOAuth(
config('app.twitter_client_id'),//APIKEY
config('app.twitter_client_secret'),//APISECRET
null,
$bearer
);
$twi->setApiVersion("2");
$params = [
"ids" => '125023968,234287107',//ユーザーIDを指定 100まで
"tweet.fields" => "author_id,created_at", // 今回は追加で投稿日時を指定
'expansions' => 'pinned_tweet_id',
"user.fields" => "id,name,username,description,profile_image_url",//画像サイズは _normal を消せばオリジナルサイズになる
];
$tmp = $twi->get("users", $params);
結果
stdClass Object
(
[data] => Array
(
[0] => stdClass Object
(
[username] => ma7ma7pipipi
[description] => 超長期投資🎁飲食店株大好き🍖株主優待フェチ💓web会社経営💰早く結婚したい🤗彼女募集中DMお気軽に✨昭和の真剣佑と呼ばれたイケメン。億トレ。付き合ってくれたら株主優待あげます🎁
[name] => ⁂ コロまる ™ 🍼
[pinned_tweet_id] => 1373990537829568518
[id] => 125023968
[profile_image_url] => https://pbs.twimg.com/profile_images/378800000552767745/fb8f309e621d078cfe46250d73d38047_normal.png
)
[1] => stdClass Object
(
[username] => hostsweetcom
[description] => 芸能界御用達!ダウンタウンDXで紹介。レンタル彼氏大好き春香クリスティーンさんを始め 32名を超える多くの有名女優が選ぶNo1レンタル彼氏、出張ホストサービスです。求人募集中です!副業歓迎しています。バックマージン0。
[name] => 業界No1👑レンタル彼氏出張ホストSWEET公式
[pinned_tweet_id] => 1120133908366970880
[id] => 234287107
[profile_image_url] => https://pbs.twimg.com/profile_images/1207336834/sweetlogo_normal.jpg
)
)
[includes] => stdClass Object
(
[tweets] => Array
(
[0] => stdClass Object
(
[created_at] => 2021-03-22T13:30:46.000Z
[id] => 1373990537829568518
[text] => 気軽に匿名質問して下さい https://t.co/peqsXryRUx #twi_ski #匿名質問
[author_id] => 125023968
)
[1] => stdClass Object
(
[created_at] => 2019-04-22T01:15:09.000Z
[id] => 1120133908366970880
[text] => 月収326万円も可能!
指名殺到中につき女性客様には
ご迷惑をおかけしております😊
さぁ今すぐレンタル彼氏を始めよう💕
🔰初心者大歓迎😉
レンタル彼氏求人募集いますぐ!
3分で登録できます。
https://t.co/HSwTwFY2V6
[author_id] => 234287107
)
)
)
)
ユーザーに鍵かかっている場合
[errors] => Array
(
[0] => stdClass Object
(
[resource_id] => 1528635695270465536
[parameter] => pinned_tweet_id
[resource_type] => tweet
[section] => includes
[title] => Authorization Error
[value] => 1528635695270465536
[detail] => Sorry, you are not authorized to see the Tweet with pinned_tweet_id: [1528635695270465536].
[type] => https://api.twitter.com/2/problems/not-authorized-for-resource
)
)
)
ツイート取得
$params = [
"ids" => '1,2,999,1373990537829568518',//100まで(非公開になったらどうなるのか)
"tweet.fields" => "author_id,created_at", // 今回は追加で投稿日時を指定
'expansions' => 'author_id',
"user.fields" => "id,name,username,description,profile_image_url",//画像サイズは _normal を消せばオリジナルサイズになる
];
$tmp = $twi->get("tweets", $params);
非公開、もしくはツイートが無い場合
[errors] => Array
(
[0] => stdClass Object
(
[value] => 1
[detail] => Could not find tweet with ids: [1].
[title] => Not Found Error
[resource_type] => tweet
[parameter] => ids
[resource_id] => 1
[type] => https://api.twitter.com/2/problems/resource-not-found
)
[1] => stdClass Object
(
[resource_id] => 1528635695270465536
[parameter] => ids
[resource_type] => tweet
[section] => data
[title] => Authorization Error
[value] => 1528635695270465536
[detail] => Sorry, you are not authorized to see the Tweet with ids: [1528635695270465536].
[type] => https://api.twitter.com/2/problems/not-authorized-for-resource
)
フォロワー数やツイート数も同時に取得したい
user.fields に public_metricsを指定すればOK。
ツイート自体にデータがついてくるのではなく、配列の最後らへんにくっつくので
忘れずチェック。
$params = [
/*
※queryとmax_resultは必須
*/
"query" => $query, // RTを除外したい時
// "start_time" => "2022-4-27T00:00:00+09:00",
// "end_time" => "2022-4-29T00:00:00+09:00",
"tweet.fields" => "author_id,created_at", // 今回は追加で投稿日時を指定
'expansions' => 'author_id',
"user.fields" => "id,public_metrics,name,username,description,profile_image_url",//画像サイズは _normal を消せばオリジナルサイズになる
"max_results" => 100 // 10~100の間を指定
];
$tmp = $twi->get("tweets/search/recent", $params);
#添付ファイル、画像も取得
$params = [
"ids" => join(",",$tweet_ids),//100まで
"tweet.fields" => "author_id,created_at", // 今回は追加で投稿日時を指定
'expansions' => 'author_id,attachments.media_keys',//画像を取得する場合は attachments.media_keys が必須
'media.fields' => 'url,type',
"user.fields" => "id,name,username,description,profile_image_url",//画像サイズは _normal を消せばオリジナルサイズになる
];
$tmp = $twi->get("tweets", $params);
フォロワーを取得
GET /2/users/:id/followers
ってのは
$res = $twi->get("users/125023968/followers");
pr($res);
で取得する。
リストに追加
ユーザーをリストに追加したい。
リストを非表示にしておくと、相手に登録した旨通知されない。
$twi = new TwitterOAuth(
config('app.twitter_client_id'),//APIKEY
config('app.twitter_client_secret'),//APISECRET
config('app.twitter_account_token'),//ユーザーのトークン
config('app.twitter_account_token_secret')//ユーザーのシークレットトークン
);
// 指定ユーザーのリストを取得(リストIDを取得する)
$list_ids = $twi->get("lists/list", [
"screen_name" => "twikon_club"
]);
//上記リストにユーザーを追加する 1612264628268204043
//これでリスト追加OK
$member_tmp = $twi->post("lists/members/create", [
// "list_id" => "1612264628268204043",
"slug" => " 1612264628268204043",//オーナーのユーザーID
"owner_screen_name" => "twikon_club",//オーナーのスクリーンネーム
// "user_id" => "125023968"//登録したいユーザーのユーザーID
"user_id" => 268141077
]);