api - 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":{}}}
我错过了什么?
解决方案
我找到了解决方案。我不知道这是否是唯一的,但它有效。
我们必须安装Twurl。Twurl 是一个类似于 curl 的应用程序,专为 Twitter API 量身定制。
- 在您的系统中安装 twurl。
$ sudo gem install twurl
- 设置授权 twurl 访问您的推特 APP。
$ twurl authorize --consumer-key xxxxx --consumer-secret xxxxx
- 这是 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
- 打开浏览器复制并粘贴提供的 URL
https://api. .... version=1.0
- 您将被重定向到要求确认授权的页面。确认它。
- 您将收到一条消息:
'You've granted access to APP_Name! Next, return to APP_Name and enter this PIN to complete the authorization process. PIN = 09010101'
。 - 只需复制 PIN 码并粘贴回终端,然后按 Enter。
- 您将在终端中收到一条消息
Authorization successful
。 - 转到您的 APP_Name 页面
https://developer.twitter.com/en/apps/123456
并转到Keys and tokens
部分。您需要重新生成访问令牌和访问令牌密码。按下按钮'regenerate'
- 重新生成后,您可以访问终端中的 api trough twurl:
$ twurl -H "ads-api.twitter.com" "/5/accounts"
。请注意,今天(2019 年 5 月)我在"/5/accounts"
. 您必须在您的日期检查您的版本。 - 现在,您还可以通过 php 中的 curl 访问 Twitter 广告 API。
- 创建一个类
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);
推荐阅读
- heroku - 如何在 HerokuApp 上访问 root 以使用 wget 命令
- android - 计费 API 3.0。价格变动用户通知
- flutter - 什么是 NoSuchMethod 错误,我该如何解决?
- visual-studio-code - VS Code + PHP Intelephense + Remote-SSH + Symfony 3:未定义的方法错误
- php - KNP Paginator 在 Symfony 5 中显示 Invalid item per page number 错误
- elasticsearch - 获取 Elasticsearch 中字段值与任何数组元素匹配的所有文档
- python - Pandas 按日期分组和计数。然后将计数转置为列名
- python - 如何将列表的一系列元素添加到python中的另一个列表
- c# - 更新选定值后如何更新数据网格
- python - Python glob 没有找到任何结果