以前買った以下の本で、twitter api(REST)を確認したが、このAPIをJavaで呼び出すためのクライアントのサンプルを作成する。
- 作者: 辻村浩
- 出版社/メーカー: ワークスコーポレーション
- 発売日: 2010/04/21
- メディア: 単行本
- 購入: 4人 クリック: 488回
- この商品を含むブログ (28件) を見る
まずはJersey Client APIの簡単な使い方を確認し、徐々にコードを変更しながら細かい設定を追加していく方針で作ってみる。
ちなみにJerseyではないけど、同じJAX-RSを実装しているRESTeasy(JBoss系OSSプロジェクト)の開発者が執筆した本も購入して参考にした。
- 作者: Bill Burke
- 出版社/メーカー: Oreilly & Associates Inc
- 発売日: 2009/11/17
- メディア: ペーパーバック
- クリック: 19回
- この商品を含むブログ (2件) を見る
せっかく洋書を頑張って購入したのに、明後日日本語版が発売されるらしい。
- 作者: Bill Burke,arton,菅野良二
- 出版社/メーカー: オライリージャパン
- 発売日: 2010/08/23
- メディア: 大型本
- 購入: 25人 クリック: 701回
- この商品を含むブログ (35件) を見る
使用した環境と事前準備
- NetBeans 6.9.1
- JDK1.6
Oracle(というか旧Sun)が作っているJerseyと相性が良さそうなのでNetBeansを使用。
準備手順はすごく簡単で以下2つだけ。
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":"<ahref="http://www.echofon.com/"rel="nofollow">Echofon</a>" }, { "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":"<a href="http://twitterfeed.com"rel="nofollow">twitterfeed</a>" } ], "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" }