sessanの日記

主に開発技術関連でお勉強したことをまとめていくサイトです。

Jersey Client APIを使用したTwitter APIの呼び出し。

以前買った以下の本で、twitter api(REST)を確認したが、このAPIJavaで呼び出すためのクライアントのサンプルを作成する。

Twitter API プログラミング

Twitter API プログラミング


まずはJersey Client APIの簡単な使い方を確認し、徐々にコードを変更しながら細かい設定を追加していく方針で作ってみる。
ちなみにJerseyではないけど、同じJAX-RSを実装しているRESTeasy(JBoss系OSSプロジェクト)の開発者が執筆した本も購入して参考にした。
RESTful Java With JAX-RS

RESTful Java With JAX-RS


せっかく洋書を頑張って購入したのに、明後日日本語版が発売されるらしい。
JavaによるRESTfulシステム構築

JavaによるRESTfulシステム構築

使用した環境と事前準備

Oracle(というか旧Sun)が作っているJerseyと相性が良さそうなのでNetBeansを使用。

準備手順はすごく簡単で以下2つだけ。

1.Javaアプリケーションプロジェクト作成

「ファイル」→「新規プロジェクト」→「Javaアプリケーション」から普通のJavaプロジェクトを作成。mainメソッドがあるMainクラスが一つできる。

2.Jersey関連ライブラリを追加

NetBeansの場合これも簡単で、「ライブラリの追加」から以下2つを追加。

  1. JAX-RS1.1
  2. Jersey1.1(JAX-RS RI)

Jersey Client APIの動作確認

とりあえず、リクエストとレスポンスを受け取るだけのものを作るということで、サンプルコードを作成。

Twitter APIに関しては以下を参考にした。
GET search | Twitter Developers

/*
 * Twitter Client Sample
 */
package twitterclient;

import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.core.util.MultivaluedMapImpl;
import javax.ws.rs.core.MultivaluedMap;

/**
 *
 * @author masato1
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        //Jersey Client 作成
        Client client = Client.create();

        //WebResourceの設定
        WebResource webResource = client.resource("http://search.twitter.com/search.json");

        //クエリを追加
        MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
        queryParams.add("q", "@sessan60jp");

        //レスポンスを受け取る。
        String result = webResource.queryParams(queryParams).get(String.class);

        //デバッグ用に表示
        System.out.println(result);

    }
}

結果は次のようになった。何もしないと日本語としては表示してくれない様子。普通に日本語表示できるように後で改良してみたい。

{
"results":
[
{
  "profile_image_url":"http://a2.twimg.com/profile_images/609123382/messenger-picture2_normal.jpg",
  "created_at":"Fri, 20 Aug 2010 10:12:56 +0000",
  "from_user":"garmy",
  "metadata":{"result_type":"recent"},
  "to_user_id":101004484,
  "text":"@sessan60jp\u4f55\u6642\u304f\u3089\u3044\u5230\u7740?",
  "id":21653115951,
  "from_user_id":172962,
  "to_user":"sessan60jp",
  "geo":null,
  "iso_language_code":"fi",
  "source":"&lt;ahref=&quot;http://www.echofon.com/&quot;rel=&quot;nofollow&quot;&gt;Echofon&lt;/a&gt;"
},
{
  "profile_image_url":"http://a1.twimg.com/profile_images/577657037/c4_devart_fixed_glow_red___shadow_normal.PNG",
  "created_at":"Fri, 20 Aug 2010 07:26:51 +0000",
  "from_user":"Shishev",
  "metadata":{"result_type":"recent"},
  "to_user_id":null,
  "text":"RT @sessan60jp ipad\u3092\u30ea\u30e2\u30fc\u30c8\u30ef\u30a4\u30d7\u3001\u30ea\u30e2\u30fc\u30c8\u30ed\u30c3\u30af\u3059\u308b\u305f\u3081\u306emobile me\u306e\u30a2\u30d7\u30ea\u3002\u3053\u308c\u304c\u3042\u308c\u3070\u7a7a\u304d\u5de3\u306b\u76d7\u307e\u308c\u3066\u3082\u591a\u5c11\u306f\u307e\u3057\u3002 / \u30a2\u30c3\u30d7\u30eb - MobileMe - \u306a\u304f\u3057\u305fiPhone\u3084iPad\u3092\u63a2\u305b... http://bit.ly/csFlzS",
  "id":21645665881,
  "from_user_id":20991760,
  "geo":null,
  "iso_language_code":"ja",
  "source":"&lt;a href=&quot;http://twitterfeed.com&quot;rel=&quot;nofollow&quot;&gt;twitterfeed&lt;/a&gt;"
}
],
"max_id":21724206020,
"since_id":0,
"refresh_url":"?since_id=21724206020&q=%40sessan60jp",
"total":2,
"results_per_page":15,
"page":1,
"completed_in":0.331758,
"query":"%40sessan60jp"
}