Yelp API Google App脚本OAuth

dba*_*ugh 4 oauth google-apps-script yelp

我正在尝试使用Google Apps脚本查询Yelp搜索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
Run Code Online (Sandbox Code Playgroud)

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

此类仅具有设置Yelp似乎不提供的访问令牌URL的方法.他们只是直接提供令牌和令牌秘密.我认为这些将被设置为消费者密钥和秘密,但我还没有找到办法.

Aru*_*jan 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
Run Code Online (Sandbox Code Playgroud)

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

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