Как перейти с Yelp API с v2 на v3? - PullRequest
       139

Как перейти с Yelp API с v2 на v3?

0 голосов
/ 31 августа 2018

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

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

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

<code>// 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 '
';

Высоко ценится толчок в правильном направлении.


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

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

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

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

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

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

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

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

С помощью API-ключей процесс аутентификации:

  • Получите ключ API со страницы управления приложениями .
  • Вставьте ключ API в заголовок запроса как "Authorization: Bearer <YOUR API KEY>".

И это все! Вам больше не нужно делать запрос на токен конечная точка для получения токена доступа. Ваш ключ 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 "".$pretty_response."
"; ?>

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

0 голосов
/ 03 сентября 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

...