1

LinkedIn の企業検索 API に接続するために select2 プラグインを使用しています。通常のjsonリクエストで発生する「Access-Control-Allow-Origin」エラーを回避できるように、jsonpと連携する必要があります[デフォルトのセキュリティ設定を無効にするとjsonリクエストが機能することを確認しましたChromeで。]。「仕事」とは、jsonp リクエスト URL で json リクエスト URL と同じように認証してもらいたいという意味ですが、401 の無許可エラーが引き続き発生します。

私の問題は、jsonp によって設定された URL の「callback」パラメーターにあると思います。たとえば、json によって作成された LinkedIn 認証済みの会社検索 URL は次のとおりです。

http://api.linkedin.com/v1/company-search?keywords=mcdonalds&oauth_consumer_key=xxx&oauth_nonce=xxx&oauth_signature=xxx&oauth_signature_method=xxx&oauth_timestamp=xxx&oauth_token=xxx

jsonp を使用すると、次のようになります。

http://api.linkedin.com/v1/company-search?callback=jQuery19107866718948353082_1365690327081&keywords=mcdonalds&oauth_consumer_key=xxx&oauth_nonce=xxx&oauth_signature=xxx&oauth_signature_method=xxx&oauth_timestamp=xxx&oauth_token=xxx

唯一の明らかな違いは、「callback=jQuery...」パラメーターです。ここに私のJavaScriptがあります:

function generateUrl(term) {
    (function ($) {

    var apiKey = 'xxx';
    var apiSecret = 'xxx';
    var memberToken = 'xxx';
    var memberSecret = 'xxx';
    var action = 'GET';
    var path = 'http://api.linkedin.com/v1/company-search';
    var nonce = '1234';
    var timestamp = Math.floor((new Date()).getTime()/1000);
    var version = '1.0';
    var args = "keywords=" + term;
    // var format = 'json';

    if (args != '') { args += '&'; }
    args += "&oauth_nonce=" + nonce + "&oauth_timestamp=" + timestamp + "&oauth_version=" + version;

    OAuthSimple().reset();
    this.results = (new OAuthSimple()).sign({
      path:path,
      action:action,
      parameters:args,
      signatures:{
        'consumer_key':apiKey, 'shared_secret': apiSecret,
        'access_token':memberToken,'access_secret':memberSecret}
      }
    );

    }
    (jQuery));
    return results.signed_url.slice(results.signed_url.indexOf('?') + 1);
  }

    $("#linkedin").select2({
      placeholder: "Search for a company.",
      minimumInputLength: 1,
      allowClear: true,
      ajax: {
        url: 'http://api.linkedin.com/v1/company-search',
        dataType: 'jsonp',
        data: function (term, page) {
          return generateUrl(term);
        },
        results: function (data, page) {
          return { results: data.companies.values };
        }
      },
      formatResult: companyFormatResult,
      formatSelection: companyFormatSelection,
      dropdownCssClass: "bigdrop_3"
  });

  function companyFormatResult(company) {
    return company.name;
  }

  function companyFormatSelection(company) {
    return company.name;
  }

URL パラメータの構文と何か関係があるのでしょうか? 「keywords」パラメータが「company-search?」の直後にないと問題が発生しました。通常のjsonリクエストでは、jsonpリクエストのコールバックパラメーターをURLの最後に移動しても効果がないようです。

前もって感謝します。

4

0 に答える 0