LoginSignup
21
22

More than 5 years have passed since last update.

「TwitterAPI v1.1(GET限定)に簡単アクセス」を改造してみた

Posted at

@rev84さんが1週間ほど前に投稿していたTwitterAPI v1.1(GET限定)に簡単アクセスを自分好みに改造してみました。

@rev84さんバージョンは、こんな形で関数呼び出しをしていますが、

@rev84さんバージョン
// あらかじめアプリ登録して取得
var CONSUMER = {
    "key" : XXXXXXXXXXXXXXX,
    "secret" : XXXXXXXXXXXXXXXX 
};

// ユーザの自前アカウントで取ってきてもらってもいいし、アプリ固有のを埋め込んでもいい
var ACCESS = {
    "screen_name" : false,
    "key" : false,
    "secret" : false
};
    .
    .
    .

getTwitterAPI('https://api.twitter.com/1.1/application/rate_limit_status.json?resources=users', 'callback_limit');
function callback_limit(json){
    var limitHash = json;
    console.log(limitHash);
}

こんな感じで呼び出せるようにしました。

@ktty1220バージョン
// オブジェクト作成
var twapi = new TwitterAPIonBrowser({                                  
  consumerKey: 'CONSUMER_KEY',
  consumerSecret: 'CONSUMER_KEY_SECURET',
  accessToken: 'ACCESS_TOKEN',
  accessTokenSecret: 'ACCESS_TOKEN_SECRET'
});

// API呼び出し
twapi.get('application/rate_limit_status', {
  resources: 'users'
}, function (data) {
  // エラーの場合はdataがundefinedになる
  console.log(data);
});

検索の場合はこんな感じですね。

検索の場合
twapi.get('search/tweets', {
  q: 'うんこなう',
  lang: 'ja',
  count: 10,
  include_entities: true
}, function (data) {

また、関数呼び出し時に<head>タグに追加された<script>タグをコールバック実行後に掃除したりするクリーンなエコ機能も追加しています。

その他の条件は@rev84さんバージョンと同様です。

  • oauth.js、sha1.jsが必要
  • GET限定
  • APIキーはスクリプトに直書き

なので公のサービスには使えないと思いますが、個人用とか限定されたメンバー用なんかでは使えるかな、と。サーバーいらずでお手軽です。

ソースはこちらです。CoffeeScriptなのでJavaScriptにコンパイルして利用ください。

TwitterAPIonBrowser
class TwitterAPIonBrowser
  constructor: (oauthKeys) ->
    @parameters =
      oauth_signature_method: 'HMAC-SHA1'
      oauth_consumer_key: oauthKeys.consumerKey
      oauth_token: oauthKeys.accessToken
    @secret =
      consumerSecret: oauthKeys.consumerSecret
      tokenSecret: oauthKeys.accessTokenSecret

  get: (api, apiParams, callback) =>
    # 使い捨てのJSONPコールバック関数名
    tmpCallback = "__twitter_api_on_browser_#{Number new Date()}"

    # OAuthリクエスト用のパラメータ作成
    reqParams = {}
    reqParams[k] = v for k, v of @parameters
    reqParams[k] = v for k, v of apiParams
    reqParams.callback = tmpCallback

    api = "https://api.twitter.com/1.1/#{api}.json"
    message =
      method: 'GET'
      action: api
      parameters: reqParams

    OAuth.setTimestampAndNonce message
    OAuth.SignatureMethod.sign message, @secret

    # scriptタグ作成
    scriptTag = document.createElement 'script'
    scriptTag.type = 'text/javascript'

    # reqParamsからOAuthリクエスト用のURLを作成
    scriptTag.src = OAuth.addToURL api, reqParams

    # 使い捨てのJSONPコールバック本体
    window[tmpCallback] = (data) ->
      callback data
      # 使い捨てなので1秒後にscriptタグと関数自体を削除
      setTimeout () ->
        scriptTag.parentNode.removeChild scriptTag
        try
          delete window[tmpCallback]
        catch e
          # 古いIE用
          window[tmpCallback] = undefined
      , 1000

    # scriptロードエラー時には引数なしで返す
    scriptTag.onerror = () -> callback()

    # headタグ内にscriptタグ設置
    headTag = document.getElementsByTagName('head').item(0)
    headTag.appendChild scriptTag

@TwitterAPIonBrowser = TwitterAPIonBrowser
21
22
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
22