Twitter Search APIの使い方


ツイートを検索するには、Twitter Search APIを使用します。
Twitter Search APIとは、twitterに投稿されたつぶやきを柔軟に検索し、取得するためのサービスです。 キーワード検索、ツイートされた位置情報、最近人気のツイート、最も人気のあるツイートなど柔軟な検索ができます。

##Twitter Search APIの試し方

本来であればTwitter開発者登録し、Twitterアプリを登録し、OAuth認証する必要がありますが、こちらからすぐに試すことができます。

https://dev.twitter.com/console
![スクリーンショット 2014-09-02 18.51.13.png](https://qiita-image-store.s3.amazonaws.com/0/19316/f3adf2bd-ece4-b9b7-9610-c1b2af1b453a.png "スクリーンショット 2014-09-02 18.51.13.png")


まずは「Authentication」から「OAuth 1」を選択します。
下のようなポップアップが出てくるのでTwitterアカウントでログインしましょう

![スクリーンショット 2014-09-02 18.52.50.png](https://qiita-image-store.s3.amazonaws.com/0/19316/32e10ffc-3e8d-19d5-af94-744d87e6e23f.png "スクリーンショット 2014-09-02 18.52.50.png")

認証ができたら「Select an API method」から「/search/tweets.json」を選択します。

これでさっそくリツイートを取得していきましょう。

##画像ありツイートを取得する
![スクリーンショット 2014-09-02 18.56.39.png](https://qiita-image-store.s3.amazonaws.com/0/19316/076324a3-2294-0c49-bee3-593e34704d5e.png "スクリーンショット 2014-09-02 18.56.39.png")

queryの中に以下を入れると画像ありツイートのみを取得することができます。

```
filter:images
```

また「include_entities」を「true」にしておきましょう。

![kobito.1409652221.165136.png](https://qiita-image-store.s3.amazonaws.com/0/19316/a299ef47-f2a5-5730-c164-3cdf5cea18bf.png "kobito.1409652221.165136.png")

画像のURLは以下の場所に入っています。

![kobito.1409652302.890232.png](https://qiita-image-store.s3.amazonaws.com/0/19316/146f537f-a8d7-57e3-1301-367fc18f91f0.png "kobito.1409652302.890232.png")

javascriptで取得する場合は取得したjsonを以下のように処理すると画像だけの配列として取得できます。

```
var images = json.statuses.map(function(d){ return d.entities.media[0].media_url;});
```

##画像ありURLありツイートを取得する

![kobito.1409652705.409969.png](https://qiita-image-store.s3.amazonaws.com/0/19316/bdd57892-c8fb-7580-d8d8-edb890964249.png "kobito.1409652705.409969.png")

q に「http」を足せばツイート内のURLを取得できます。
URLは以下の場所に入っています。

![kobito.1409652793.135494.png](https://qiita-image-store.s3.amazonaws.com/0/19316/6349aa2e-f787-03ba-6151-b17cfb1937c4.png "kobito.1409652793.135494.png")

javascriptで取得する場合は取得したjsonを以下のように処理すると画像とURLの入ったオブジェクトの配列として取得できます。

```
var tweets = json.statuses.map(function(d){ return { 
media_url : d.entities.media[0].media_url,
expanded_url : d.urls[0].expanded_url
};});
```

##リツイート数を取得する

私は画像が入っているかつツイートにURLが含まれているかつリツイートが多いツイートを取得したかったので、qに「RT」を足します。

![kobito.1409653108.700607.png](https://qiita-image-store.s3.amazonaws.com/0/19316/417e7c8d-92a3-1a81-36db-0dc3d5edac16.png "kobito.1409653108.700607.png")

これだとあるツイートのリツイートが重複取得されます。
しかし、
ドキュメントを見てみましたが、リツイートが多い順で取得がなかなか見つからなかったので、API側ではなく、リツイートが多い順でのソートはコードで処理する必要がありそうです。
リツイート数は以下の場所に入っています。

![kobito.1409653266.420664.png](https://qiita-image-store.s3.amazonaws.com/0/19316/ce066c9d-03d8-38b0-ab6f-111340af79e5.png "kobito.1409653266.420664.png")


リツイート元の親ツイートは「retweeted_status」に入っています。

| 項目 | コード | 
|:-----------|------------:|
| ツイートID       |        retweeted_status.id_str |
| 名前     |      retweeted_status.user.name |
| プロフィール画像	       |        retweeted_status.user.profile_image_url |
| 本文         |          retweeted_status.text |
| ツイート日時	       |   retweeted_status.created_at |



リツイートを取得し、重複を消すにはjavascriptではこう書いてみました。

```Javascript
//ツイートidを貯める
var tweet_ids = [];
var tweets = [];
json.statuses.forEach(function(d){
  //リツイートされているか、ツイートが重複していないか確認
  if(d.retweeted_status !== undefined && 
   tweet_ids.indexOf(d.retweeted_status.id_str) < 0 ){
	// 重複していない場合、tweet_idsを貯める
    tweet_ids.push(d.retweeted_status.id_str);
    tweets.push({
       media_url : d.entities.media[0].media_url,
       expanded_url : d.urls[0].expanded_url,
       name : d.retweeted_status.user.name,
       prof_image:d.retweeted_status.user.profile_image_url,
       retweet_count:d.retweet_count+"RT"
    });

    //リツイートが多い順にソート
    tweets.sort(function(a, b) {
      return (a.retweet_count > b.retweet_count) ? -1 : 1;
    });
  }
});

```

##終わりに

Javascriptのコードを載せましたが、
OAuth認証をしないといけないので、簡単には使えないのがWEBアプリや アプリ開発時にちょっと大変ですね。
今回はTinitaum mobileを使ってコードを試していました。
次はJavascriptでOAuth認証するのを試してみます。