Ошибка API Twitter Ads: INSUFFICIENT_USER_AUTHORIZED_PERMISSION.Как это решить? - PullRequest
0 голосов
/ 02 мая 2019

Я пытаюсь выполнить запрос к 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. ...

Именно поэтому я полагаю, что мое приложение готово для запроса Ads 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, чтобы получить доступ к API Twitter Ads:

$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. Но следующий (запрашивая 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":{}}}

Чего мне не хватает?

1 Ответ

0 голосов
/ 03 мая 2019

Я нашел решение.Я не знаю, если это единственный, но он работает.

Мы должны установить Twurl .Twurl - это приложение, похожее на локон, специально разработанное для API Twitter.

  1. Установите twurl в своей системе.$ sudo gem install twurl
  2. Установите разрешение на доступ к вашему приложению в твиттере.$ 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. Откройте копию браузера и вставьте указанный URL-адрес https://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 через Twurl в вашем терминале: $ twurl -H "ads-api.twitter.com" "/5/accounts".Обратите внимание, что сегодня (май-2019) я использую номер 5 в "/5/accounts".Вы должны проверить свою версию на вашу дату.
  11. Теперь вы можете получить доступ к API-интерфейсу Twitter Ads через php также.
  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);
...