0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Twitter API v2 を使い php でツイート検索

Last updated at Posted at 2022-04-29

追記

いいね数が 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
        ]);
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?