如何使用Yelp API从v2迁移到v3?

时间:2018-08-30 21:08:25

标签: php api yelp yelp-fusion-api

我有一个脚本,可以很好地与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对象([错误] => stdClass对象([code] => TOKEN_MISSING [description] =>必须提供访问令牌才能使用此端点。))

我需要为v3重新生成我的API凭据吗?

2 个答案:

答案 0 :(得分:4)

  

从您的问题中引用我是否需要重新生成v3的API凭据?

不!您无需重新生成您的API凭据,因为您不再需要它们。但是您需要生成一个新的API密钥。

  

引用Yelp API v3 documentation:

  ...从2018年3月1日开始,API 不再使用 OAuth 2.0   请求,并移至 API密钥

     

使用API​​密钥进行身份验证的过程为:

     
      
  • Manage App page 获取您的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 "<pre>".$pretty_response."</pre>";
?>

我已经对其进行了测试,并且可以正常工作。

答案 1 :(得分:2)

似乎您正在使用OAuth,根据yelp V3开发者文档,他们转而使用基于API密钥的身份验证。

  

2017年12月7日之前,API使用OAuth 2.0进行身份验证   向API的请求。为了简化身份验证,开始   2018年3月1日,API不再使用OAuth 2.0进行请求并已将其转移   到仅API密钥。

您可以在https://www.yelp.com/developers/documentation/v3/authentication#where-is-my-client-secret-going

中找到身份验证详细信息