Yelp API Google App Script OAuth

4

我正在尝试使用Google Apps Script来查询Yelp搜索API并将结果放入电子表格中。但是,在使用此示例作为模型时,我遇到了问题:

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

这个类仅有设置访问令牌URL的方法,而Yelp似乎没有提供。他们直接提供Token和Token Secret。我认为这些应该像Consumer Key和Secret一样设置,但我还没有找到方法。

1个回答

7
Yelp API使用oAuth1.0a进行授权和身份验证,而不是识别可能正在使用应用程序的最终用户。这与Twitter场景不同,您不需要让用户登录。因此,您不需要任何访问令牌URL或其他详细信息。您可以创建所有必要的令牌以开始使用。一旦设置完成,您的API控制台应该如下所示(我已模糊我的密钥,出于明显的原因)。

Yelp API Console

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

Chrome Console

最后,这里有一些示例代码供您开始使用。我基于它们的 JavaScript sample 进行了编写。
  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代码。但是,如果你感觉有冒险精神,也可以使用Utilities APIs手动签名和编码必要的oAuth参数。
希望这可以帮助你。我能够使用所有提供的示例获取Yelp响应。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接