Как выполнить миграцию с помощью Yelp API с версии 2 на версию 3?

У меня есть скрипт, который отлично работал с v2, но сломался, когда срок его действия истек, и он переключился на v3.

Я пытался это исправить, но очевидно, что это нечто большее, чем просто изменение v2 на v3. По-видимому, они устарели от секретного токена.

Вот что у меня есть на данный момент:

// Enter the path that the oauth library is in relation to the php file
require_once ('../lib/OAuth.php');

// For example, request business with id 'the-waterboy-sacramento'
 $unsigned_url = "https://api.yelp.com/v3/businesses/search?term=niks-italian-kitchen-bar-austin";

// Set your keys here
$consumer_key = "xxxxxxx";
$consumer_secret = "xxxxxxxxx";
$token = "xxxxxxxx";
$token_secret = "xxxxxxxxxxx";


// Token object built using the OAuth library
$token = new OAuthToken($token, $token_secret);

// Consumer object built using the OAuth library
$consumer = new OAuthConsumer($consumer_key, $consumer_secret);

// Yelp uses HMAC SHA1 encoding
$signature_method = new OAuthSignatureMethod_HMAC_SHA1();

// Build OAuth Request using the OAuth PHP library. Uses the consumer and token object created above.
$oauthrequest = OAuthRequest::from_consumer_and_token($consumer, $token, 'GET', $unsigned_url);

// Sign the request
$oauthrequest->sign_request($signature_method, $consumer, $token);

// Get the signed URL
$signed_url = $oauthrequest->to_url();

echo $signed_url;

// Send Yelp API Call
$ch = curl_init($signed_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch); // Yelp response
curl_close($ch);

// Handle Yelp response data
$response = json_decode($data);

// Print it for debugging
echo '<pre>';
print_r($response);
echo '</pre>';

Толчок в правильном направлении будет высоко оценен.


Я получаю сообщение об ошибке:

Объект stdClass ( [error] => Объект stdClass ( [code] => TOKEN_MISSING [description] => Для использования этой конечной точки необходимо предоставить токен доступа. ) )

Нужно ли повторно создавать учетные данные API для v3?


person santa    schedule 30.08.2018    source источник
comment
что случилось? Вы получаете конкретную ошибку?   -  person Ibu    schedule 31.08.2018
comment
Да, я получаю: объект stdClass ( [ошибка] => объект stdClass ( [код] => TOKEN_MISSING [описание] => для использования этой конечной точки должен быть предоставлен токен доступа. )) Нужно ли мне повторно сгенерировать мои учетные данные API для v3?   -  person santa    schedule 31.08.2018
comment
Можете ли вы сказать, в какой строке выдается эта ошибка / какая команда ее вызывает?   -  person Félix Adriyel Gagnon-Grenier    schedule 05.09.2018


Ответы (2)


Цитата из вашего вопроса: Нужно ли мне повторно генерировать учетные данные API для версии 3?

Нет! Вам не нужно повторно создавать свои учетные данные API, потому что они вам больше не нужны. Но вам нужно сгенерировать новый — ключ API.

Цитата из документации Yelp API v3. :

... с 1 марта 2018 года API больше не использует OAuth 2.0 для запросов и перешел только на только Ключи API.

С ключами API процесс аутентификации выглядит следующим образом:

И это все! Вам больше не нужно делать запрос к конечной точке токена, чтобы получить токен доступа. Срок действия вашего ключа API не истекает, как раньше у токенов доступа, поэтому вам не нужно беспокоиться о создании новых.

Но обратите внимание, что прежде чем вы начнете генерировать ключ API (см. последнюю ссылку выше):

  1. Вы должны войти в систему через yelp.com. Если у кого-то нет учетной записи там, он должен зарегистрироваться там и подтвердить свой адрес электронной почты.
  2. В вашем браузере должен быть включен JavaScript. В противном случае вы будете перенаправлены на очень странную страницу исключений.

Приведите цитату из описания вашего вознаграждения: Нужен рабочий пример Yelp API v3, возвращающий результаты поиска по телефону.


Пример Yelp API v3, возвращающий результат поиска компании по телефону

<?php

// request business by phone number
$request_url = "https://api.yelp.com/v3/businesses/search/phone?phone=+14157492060";
/*
Search for businesses by phone number. It must start with + and include the country code, like +14157492060.
See also https://www.yelp.com/developers/documentation/v3/business_search_phone
Additionly you will see the response body example.
*/

// Your API key:
$api_key = "Your-API-key-GUID"; //replase this string with your API key.

// Send Yelp API call
$ch = curl_init($request_url);
curl_setopt($ch, CURLOPT_HTTPHEADER,
    array(
        "Content-Type: application/json",
        "Authorization: Bearer ".$api_key
));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
$data = curl_exec($ch); // Yelp response
curl_close($ch);

// Handle Yelp response data
$response = json_decode($data);


// Test: get a business on last index number
echo $response->businesses[$response->total - 1]->location->city;

// Print it
$pretty_response = json_encode($response, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
echo "<pre>".$pretty_response."</pre>";
?>

Я протестировал его, и он работает.

person Bharata    schedule 06.09.2018

Похоже, вы используете OAuth, согласно документации разработчика yelp для V3, они перешли на аутентификацию на основе ключей API.

До 7 декабря 2017 года API использовал OAuth 2.0 для проверки подлинности запросов к API. Чтобы упростить аутентификацию, с 1 марта 2018 года API больше не использует OAuth 2.0 для запросов и перешел только на ключи API.

подробности аутентификации можно найти на странице https://www.yelp.com/developers/documentation/v3/authentication#where-is-my-client-secret-going

person Christlin Panneer    schedule 03.09.2018
comment
Я понимаю, что Yelp изменил процедуру аутентификации. Код выше показывает мой код API v2. Проблема с документацией Yelp заключается в том, что они пишут о том, что изменилось, не включая строку кода для демонстрации. Это ОЧЕНЬ сбивает с толку тех, кто не часто имеет дело с API. - person santa; 03.09.2018
comment
документация прямолинейна. Попробуйте обновить ключ. И попробуй еще раз. Это будет работать, удалив часть Oauth вашего кода. - person Christlin Panneer; 03.09.2018