4

我正在尝试使用 Google Apps 脚本来查询 Yelp Search Api 并将结果放入电子表格中。使用此示例作为模型调用 yelp 时遇到问题:

var consumerKey = "... register your app with Twitter ...";
var consumerSecret = "... register your app with Twitter ...");

var oauthConfig = UrlFetchApp.addOAuthService("twitter");
oauthConfig.setAccessTokenUrl("http://api.twitter.com/oauth/access_token");
oauthConfig.setRequestTokenUrl("http://api.twitter.com/oauth/request_token");
oauthConfig.setAuthorizationUrl("http://api.twitter.com/oauth/authorize");
oauthConfig.setConsumerKey(consumerKey);
oauthConfig.setConsumerSecret(consumerSecret);

// "twitter" value must match the argument to "addOAuthService" above.
var options = {
  "oAuthServiceName" : "twitter",
  "oAuthUseToken" : "always"
};

var url = "http://api.twitter.com/1/statuses/user_timeline.json";
var response = UrlFetchApp.fetch(url, options);
var tweets = JSON.parse(response.getContentText());

// Handle tweets

https://developers.google.com/apps-script/class_oauthconfig

此类仅具有设置 Yelp 似乎未提供的访问令牌 URL 的方法。他们只是直接提供 Token 和 Token Secret。我假设这些会像消费者密钥和秘密一样设置,但我还没有找到办法。

4

1 回答 1

7

Yelp API 使用 oAuth1.0a 来授权和识别 API 调用者,而不是可能正在使用应用程序的最终用户。这不像 Twitter 场景,您必须让您的用户登录。因此,您不需要任何访问令牌 URL 或其他详细信息。您可以创建所有必要的令牌以开始使用。这是设置完所有内容后 API 控制台的外观(出于明显的原因,我对密钥进行了混淆)-

Yelp API 控制台

现在,您需要使用 UrlFetchApp 从服务器端进行 API 调用,而不是使用 jQuery AJAX API,因为 Yelp API 似乎不允许 CORS,并且 HtmlService 不允许使用 JSONP。否则,您将在控制台中收到如下错误 -

Chrome 控制台

最后,这里有一些示例代码可以帮助您入门。我基于他们的 JavaScript示例来制作这些-

  var auth = { 
    consumerKey: "YOURKEY", 
    consumerSecret: "YOURSECRET",
    accessToken: "YOURTOKEN",
    accessTokenSecret: "YOURTOKENSECRET",
  };

  var terms = 'food';
  var near = 'San+Francisco';

  var accessor = {
    consumerSecret: auth.consumerSecret,
    tokenSecret: auth.accessTokenSecret
  };

  var parameters = [];
  parameters.push(['term', terms]);
  parameters.push(['location', near]);
  parameters.push(['oauth_consumer_key', auth.consumerKey]);
  parameters.push(['oauth_consumer_secret', auth.consumerSecret]);
  parameters.push(['oauth_token', auth.accessToken]);

  var message = { 
    'action': 'http://api.yelp.com/v2/search',
    'method': 'GET',
    'parameters': parameters 
  };

  OAuth.setTimestampAndNonce(message);  

  OAuth.SignatureMethod.sign(message, accessor);

  var parameterMap = OAuth.getParameterMap(message.parameters);
  parameterMap.oauth_signature = OAuth.percentEncode(parameterMap.oauth_signature)

  var url = OAuth.addToURL(message.action,parameterMap);
  var response = UrlFetchApp.fetch(url).getContentText();
  var responseObject = Utilities.jsonParse(response);
  //have my JSON object, do whatever we want here, like add to spreadsheets

我还添加了几个 GS 脚本文件,其中包含来自提供的链接的oAuth JS代码和SHA1 JS代码的内容(只需将粘贴复制到脚本编辑器中的新文件中)。但是,如果您喜欢冒险,您也可以使用实用程序 API手动签署和编码必要的 oAuth 参数。

希望这可以帮助。我能够使用所有提供的样本获得 Yelp 响应。

于 2012-10-31T17:24:13.633 回答