4

Google Apps Script を使用して 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 を設定するためのメソッドしかありません。トークンとトークン シークレットを直接提供するだけです。これらはコンシューマー キーとシークレットのように設定されると想定しましたが、方法が見つかりませんでした。

4

1 に答える 1

7

Yelp APIは、oAuth1.0aを使用して、アプリケーションを使用している可能性のあるエンドユーザーではなく、API呼び出し元を承認および識別します。これは、ユーザーにログインを許可する必要があるTwitterのシナリオとは異なります。したがって、アクセストークンのURLやその他の詳細は必要ありません。開始するために必要なすべてのトークンを作成できます。すべてがセットアップされた後のAPIコンソールは次のようになります(明らかな理由でキーを難読化しました)-

YelpAPIコンソール

ここで、UrlFetchAppを使用してサーバー側からAPI呼び出しを行う必要があり、jQuery AJAX APIは使用しないでください。これは、Yelp APIがCORSを許可していないようであり、JSONPがHtmlServiceで許可されていないためです。そうしないと、コンソールで次のようなエラーが発生します-

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

また、提供されたリンクからoAuthJSコードとSHA1JSコードの内容を含むGSスクリプトファイルをいくつか追加しました(スクリプトエディターで新しいファイルにコピーして貼り付けるだけです)。ただし、冒険心がある場合は、ユーティリティAPIを使用して、必要なoAuthパラメータに手動で署名してエンコードすることもできます。

お役に立てれば。提供されたすべてのサンプルでYelpの応答を得ることができました。

于 2012-10-31T17:24:13.633 に答える