【问题标题】:Yelp API Google App Script OAuthYelp API Google App 脚本 OAuth
【发布时间】:2012-10-30 23:45:26
【问题描述】:

我正在尝试使用 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。我以为这些会像 Consumer Key 和 Secret 一样设置,但我还没有找到方法。

【问题讨论】:

    标签: oauth google-apps-script yelp


    【解决方案1】:

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

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

    最后,这里有一些示例代码可以帮助您入门。我基于他们的 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 响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      相关资源
      最近更新 更多