首页 > 解决方案 > Twitter 广告 API 错误:INSUFFICIENT_USER_AUTHORIZED_PERMISSION。如何解决?

问题描述

我正在尝试在我的开发环境中执行对 twitter Ads API 的请求。我已经注册以访问此服务。

我收到了这样一封确认邮件:

Your application (ID:12345678) has been approved for the Twitter Ads API program and your organization has been granted a Developer license for Read/Write access. ...

这就是为什么我想让我的 APP 准备好查询广告 API。

除此之外,我在页面中有关于 APP(令牌和秘密)的信息,https://developer.twitter.com/en/apps但我找不到官方文档account_id中提到的任何参考。

Advertising accounts are registered on ads.twitter.com and identified
in the API by account_id. Advertising accounts link directly to funding
sources and leverage content from one or more Twitter user accounts as 
‘promotable users’. Each advertising account can grant permission to 
one or more Twitter user accounts. The advertising account, or “current 
account,” is represented in nearly every URL executed as an in-line 
:account_id parameter.

在这篇文章之后,我在 oder 中创建了以下代码以访问 Twitter 广告 API:

$settings = array(
    'oauth_access_token'        => env('TWITTER_ACCESS_TOKEN'),
    'oauth_access_token_secret' => env('TWITTER_ACCESS_TOKEN_SECRET'),
    'consumer_key'              => env('TWITTER_CONSUMER_KEY'),
    'consumer_secret'           => env('TWITTER_CONSUMER_SECRET'),
);

$url = 'https://api.twitter.com/1.1/followers/ids.json';
$getfield = '?screen_name=J7mbo';
$requestMethod = 'GET';

$twitter = new TwitterAPIExchangeService($settings);
$data = $twitter->setGetfield($getfield)
    ->buildOauth($url, $requestMethod)
    ->performRequest();
dd($data);

前面的代码正在运行(我没有查询 Ads API。但下一个代码(查询 Ads Api)不起作用:

$url = 'https://ads-api.twitter.com/5/accounts';
$requestMethod = 'GET';

$twitter = new TwitterAPIExchangeService($settings);
$data = $twitter->buildOauth($url, $requestMethod)->performRequest();

dd($data);

{"errors":[{"code":"INSUFFICIENT_USER_AUTHORIZED_PERMISSION","message":"User 2222222222 is not authorized to make this request. Please have them reauthorize with your client application APPNAme."}],"request":{"params":{}}}

我错过了什么?

标签: apitwittertwitter-oauthads

解决方案


我找到了解决方案。我不知道这是否是唯一的,但它有效。

我们必须安装Twurl。Twurl 是一个类似于 curl 的应用程序,专为 Twitter API 量身定制。

  1. 在您的系统中安装 twurl。$ sudo gem install twurl
  2. 设置授权 twurl 访问您的推特 APP。$ twurl authorize --consumer-key xxxxx --consumer-secret xxxxx
  3. 这是 prevoius 命令的输出:Go to https://api.twitter.com/oauth/authorize?oauth_consumer_key=xxxx&oauth_nonce=ffff&oauth_signature=bbb&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1556889574&oauth_token=ddd&oauth_version=1.0 and paste in the supplied PIN
  4. 打开浏览器复制并粘贴提供的 URLhttps://api. .... version=1.0
  5. 您将被重定向到要求确认授权的页面。确认它。
  6. 您将收到一条消息:'You've granted access to APP_Name! Next, return to APP_Name and enter this PIN to complete the authorization process. PIN = 09010101'
  7. 只需复制 PIN 码并粘贴回终端,然后按 Enter。
  8. 您将在终端中收到一条消息Authorization successful
  9. 转到您的 APP_Name 页面https://developer.twitter.com/en/apps/123456并转到Keys and tokens部分。您需要重新生成访问令牌和访问令牌密码。按下按钮'regenerate'
  10. 重新生成后,您可以访问终端中的 api trough twurl: $ twurl -H "ads-api.twitter.com" "/5/accounts"。请注意,今天(2019 年 5 月)我在"/5/accounts". 您必须在您的日期检查您的版本。
  11. 现在,您还可以通过 php 中的 curl 访问 Twitter 广告 API。
  12. 创建一个类TwitterAPIExchangeService(我在 Laravel 5.8 中)。你可以在这篇文章中获得课程。

将以下代码与您的密钥一起使用:

$settings = array(
    'oauth_access_token'        => env('TWITTER_ACCESS_TOKEN'),
    'oauth_access_token_secret' => env('TWITTER_ACCESS_TOKEN_SECRET'),
    'consumer_key'              => env('TWITTER_CONSUMER_KEY'),
    'consumer_secret'           => env('TWITTER_CONSUMER_SECRET'),
);

//Regular Twitter API
$url = 'https://api.twitter.com/1.1/followers/ids.json';
$getfield = '?screen_name=J7mbo';

//Ads Twitter API
//$url = 'https://ads-api.twitter.com/5/accounts';
//$getfield = '';


$requestMethod = 'GET';
$twitter = new TwitterAPIExchangeService($settings);
$data = $twitter->setGetfield($getfield)
    ->buildOauth($url, $requestMethod)
    ->performRequest();
dd($data);

推荐阅读