首页 > 解决方案 > 如何使用 Twitter V2 API 拨打电话

问题描述

我正在使用下面的代码来搜索带有查询参数的推文。这适用于 Twitter V1 API,但不适用于 V2,在广泛阅读他们的 API 文档后,我很困惑。

我的第一个问题是,V1 和 V2 是否共享相同的身份验证?即我可以使用此代码调用 V2,假设我的端点 url 是正确的,这会导致第二个问题,如果我可以使用与 V1 相同的身份验证来调用 V2,那么正确的端点是什么?到目前为止,显着的区别是查询参数,即 V1 的“q”和 V2 的“查询”。然后显然不需要 .json ,但我在 V2 端点的末尾都尝试了,但我仍然得到相同的错误:

stdClass Object ( [client_id] => 131XXXXXX [detail] => 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. [registration_url] => https://developer.twitter.com/en/docs/projects/overview [title] => Client Forbidden [required_enrollment] => Standard Basic [reason] => client-not-enrolled [type] => https://api.twitter.com/2/problems/client-forbidden )
    include ($_SERVER["DOCUMENT_ROOT"] . "/TwitterAPIExchange.php");
     
    $settings = array(
        'oauth_access_token' => "xxx",
        'oauth_access_token_secret' => "xxx",
        'consumer_key' => "xxx",
        'consumer_secret' => "xxx"
    );
    
    //$url = "https://api.twitter.com/1.1/search/tweets.json";
    
    $url = "https://api.twitter.com/2/tweets/search/recent";
    
    $requestMethod = "GET";
    
    // V1
    //$getfield = '?q=bitcoin';
    
     // V2
    $getfield = '?query=bitcoin';
     
    $twitter = new TwitterAPIExchange($settings);
    $response = $twitter->setGetfield($getfield)
                        ->buildOauth($url, $requestMethod)
                        ->performRequest();
     
    $tweets = json_decode($response);
      
    print_r($tweets);

编辑:

看起来 V1 和 V2 可以共享相同的身份验证:https ://developer.twitter.com/en/docs/twitter-api/tweets/search/migrate/standard-to-twitter-api-v2

OAuth 1.0a 用户上下文和 OAuth 2.0 不记名令牌身份验证 v1.1 搜索/推文和 Twitter API v2 最近搜索端点支持 OAuth 1.0a 用户上下文和 OAuth 2.0 不记名令牌。因此,如果您之前使用的是标准 v1.1 搜索端点,那么如果您迁移到 Twitter API v2 版本,则可以继续使用相同的身份验证方法。

标签: phptwitteroauthtwitter-oauth

解决方案


首先,您必须将您正在使用的应用程序添加到开发人员仪表板上的“项目”中。此步骤是调用 v2 端点所必需的,请参阅:https ://developer.twitter.com/en/docs/projects/overview

我从 twitter 社区论坛得到了这个答案,现在它可以很好地与我上面问题中发布的代码一起使用。


推荐阅读