Aug 09, 2010

[WebService] mov ファイルを Google Sites に埋め込む Google Gadget

Google Sites に mov ファイルを埋め込む Google Gadget を作成したのでメモ。 URL はこちら。

http://www.in-vitro.jp/software/google/gadget/ggadget_qtobject.xml

実際の埋め込みは QTObject embed という外部のライブラリにお任せしている。多謝。

QTObject embed
http://blog.deconcept.com/code/qtobject/qtobject.html
オリジナルガジェットの作成
http://code.google.com/intl/ja/apis/gadgets/docs/basic.html

使い方

  1. 予め Google Sites のページを作成し、mov ファイルとタイトル画像を添付しておく。
  2. Google Sites の編集画面で Insert > more gadgets... > Add gadget by URL を選択。
  3. 上記 URL を入力して "Add"。
  4. mov のタイトル、 mov の URL、タイトル画像の URL、mov の width、height(実際のサイズより少し大きめにする) を入力

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Dec 21, 2009

[WebService] Google Code Playground

Google Code Playground が面白い。 コードを見たり編集したりしながら様々な API を試してみることができる。

Google Code Playground
http://code.google.com/apis/ajax/playground/

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 28, 2009

[WebService] 怪しげな短縮 URL の遷移先を調べる方法

Twitter 界隈では短縮 URL が頻繁に利用されている。 短縮 URL は文字数を減らすには便利だけれど、どこに飛ばされるか分からないやっかいな代物。 Web ブラウザで表示する前に、実際の飛び先を確認しておきたいことも間々ある。 短縮 URL サービスの伸長機能はサービス毎に方法が異なったり、そもそも提供されていなかったりするので利便性に欠ける。 そこで便利なのが wget。 以下の方法で大抵の短縮 URL サービスの短縮 URL を伸長できる(はず)。

GNU Wget 1.12 Manual
http://www.gnu.org/software/wget/manual/wget.html

例えば、tinyurl.com、bit.ly の場合。

$ wget --max-redirect=0 --debug -O - http://tinyurl.com/2zpt2m 2>&1 | grep Location:
Location: http://www.in-vitro.jp/blog/index.cgi
$ wget --max-redirect=0 --debug -O - http://bit.ly/2EbhQe 2>&1 | grep Location:
Location: http://www.in-vitro.jp/blog/index.cgi
3.ly の様に max-redirect を変更する必要があるサービスもある。
$ wget --max-redirect=1 --debug -O - http://3.ly/g5b 2>&1 | grep Location:
Location: http://3.ly/g5b/
Location: http://www.in-vitro.jp/blog/index.cgi

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jul 03, 2009

[WebService] Twitter で短縮 URL と上手く付き合う方法

Twitter の 140 文字という制約と付き合っていくにはどうしても避けて通れない短縮 URL サービス。 ただ、この短縮 URL には色々問題もある。

  1. 実際に飛んでみないとリンク先が分からない
  2. Twitter Web UI では、短縮前の URL の文字数が 140 文字制約の対象となってしまう
特に 1 はかなり危険度の高い問題だ。
Yahoo! ニュース - リニア始発駅 品川駅の直下に。http://bit.ly/4rQcxo
なんてことが出来てしまう。 ちなみに、上記短縮 URL はこのブログに飛ぶ。
当然、こんな問題は以前から認識され、議論の対象となっているが、なかなかサービス側では対処が進んでいないのが現状だ。 しばらくはユーザが自衛するしかないだろう。
2 は Twitter 専用クライアントを使用すれば済む話だが、個人的には Web UI でもなんとかしてもらいたいところ。

Firefox + Grease Monkey でこの 2 つを解決しよう、というのが今回の趣旨。

まず

Firefox はインストールされていることを前提とする。 まず、Firefox に Grease Monkey をインストールする。 Firefox でリンク先に飛んで、「Firefox へインストールする」 をクリックするだけで OK。

TinyURL Decoder

上記 1 の問題を解決するために TinyURL Decoder を利用する。 TinyURL Decoder は、Twitter 上の短縮 URL を自動的に元に戻して、短縮 URL と差し替えて表示してくれる Grease Monkey スクリプト。 パフォーマンスを考慮してキャッシングまでしてくれる逸品。

TinyURL Decoder for Greasemonkey

Twitter を安全に利用するため、必ず用意しておきたい。

[TinyURL Decoder 使用前] [TinyURL Decoder 使用後]

bittwit

Twitter Web UI に bit.ly 連携用のインタフェースを追加する拙作 Grease Monkey スクリプト。 以下のリンクをクリックするとインストールされる。

bittwit

〜使い方〜

  • 普通につぶやきを入力。URL 部分を選択し、"shorten selected" ボタンをクリック。選択された部分が bit.ly で短縮される。
  • 普通につぶやきを入力。"shorten selected" ボタンをクリック。URL (と思わしき箇所) が bit.ly で短縮される。
  • 短縮 URL の前にリンク先のタイトルを挿入したい場合は、"shorten selected" ボタン右のチェックボックスをチェックしてからボタンを押す。


[bittwit]

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jul 02, 2009

[WebService] bit.ly API にチャレンジ

bit.ly は URL 短縮サービス。 最近 Twitter の標準 URL 短縮サービスに採用された。 bit.ly は API を提供しているので、ちょっと利用してみた。

bit.ly
http://bit.ly/

bit.ly アカウント作成 & API Key 取得

API を使う前に、まず bit.ly のアカウントを作成する。 big.ly Sign upより、アカウントを作成する。

次に bit.ly にログインし、アカウント情報より API Key を取得する。 これで API を使用する準備は完了。

bit.ly API の利用

bit.ly API の詳細は以下のドキュメントを参照。

bitly-api
http://code.google.com/p/bitly-api/wiki/ApiDocumentation

詳細はドキュメントに譲ることにして、ここでは URL 短縮 API を試してみる。
まずは http://www.yahoo.co.jp/ を短縮してみる(短縮する必要無い長さだな・・・)。

http://api.bit.ly/shorten?version=2.0.1&login=[my bitly user name]&apiKey=[my bitly API Key]&longUrl=http://www.yahoo.co.jp/
上記リクエストを GET で送出すると、以下の様なレスポンスが得られる。
{ "errorCode": 0, "errorMessage": "", "results": { "http://www.yahoo.co.jp/": { "hash": "INPsu", "shortKeywordUrl": "", "shortUrl": "http://bit.ly/8jyvv", "userHash": "8jyvv" } }, "statusCode": "OK" }

JavaScript から利用する場合は callback を利用する。

http://api.bit.ly/shorten?version=2.0.1&login=[my bitly user name]&apiKey=[my bitly API Key]&longUrl=http://www.yahoo.co.jp/&callback=callback
上記リクエストを GET で送出すると、以下の様なレスポンスが得られる。
callback({ "errorCode": 0, "errorMessage": "", "results": { "http://www.yahoo.co.jp/": { "hash": "INPsu", "shortKeywordUrl": "", "shortUrl": "http://bit.ly/8jyvv", "userHash": "8jyvv" } }, "statusCode": "OK" })
callback はこういう様に利用する。
<script type="text/javascript" 
           src="http://api.bit.ly/shorten?version=2.0.1&login=[my bitly user name]&apiKey=[my bitly API Key]&longUrl=http://www.yahoo.co.jp/&callback=callback" />
<script type="text/javascript">
function callback(bitlyResponse){
  var json = eval(bitlyResponse);
  alert(json.statusCode);
}
<script type="text/javascript">

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jun 18, 2009

[WebService] Google Maps API version 3

Google Maps API の version 3 がいつの間にか公開されていた。 Google Maps API は少し触れた程度なので、何がどう変わっているのかは分からないが、ドキュメントによると実行速度の改善(特に、Android 端末、iPhone)がポイントらしい。 2009/06/18 現在、日本語版ドキュメントには version 3 の記述はない。

Google Maps API Concepts
http://code.google.com/apis/maps/documentation/

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jun 17, 2009

[WebService] シェルスクリプト + cron で実現するお気軽 Twitter bot

Twitter で何が出来るのか試行錯誤中。 大規模なアプリケーションを構築するつもりは無いので、数行〜数十行程度のシェルスクリプト + cron で実現できる bot を作って実験中。

trend_history
Twitter のトレンドを定期的に Tweet。
world_clock
世界各地の時刻を定期的に Tweet。
jcp_news
JCP 関連ニュースを Tweet。
maven_news
Maven 関連ニュースを Tweet。
eclipse_newz
Eclipse 関連ニュースを Tweet。
pgsql_news
PostgreSQL 関連ニュースを Tweet。
aozora_news
青空文庫の新着情報を定期的に Tweet
jpy_usd
円・米ドルの為替相場を定期的に Tweet。
jpy_eur
円・ユーロの為替相場を定期的に Tweet。
wikipedia_rnd
Wikipediaの記事をランダムに紹介。

元々は欲しい情報を Twitter に集約したい、という意図だったのでニュース系はやはり便利。 為替相場は試しにやってみたものの余り意味はなかった。外貨預金も FX もやっていないし。 Twitter では海外の人を follow したり、されたりが結構あるので world_clock が意外と便利。

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

May 11, 2009

[WebService] 「Amazon アソシエイト Web サービス」改め「Product Advertising API」メモ

Amazon アソシエイト Web サービスが Product Advertising API という名称に変更されるそうだ。 それに伴い、API に対する全てのリクエストで認証が必要となるとのこと。 移行期間は 2009/05/11 から 2009/08/14 の 3 ヶ月間で、2009/08/15 以降は認証が必須になるそうな。 結構オオゴトだ。

Secret Access Key の取得

今までは Access Key ID で呼び出し元を識別していたが、新仕様では Access Key ID に加えて Secret Access Key というものが必要となる。 Secret Access Key は既に Access Key ID を持っているのであれば、http://aws.amazon.com/から Your Account > Access Identifiers で取得できる(要ログイン)。

リクエストの組み立て

次にリクエストを組み立てる。現行仕様での以下のリクエストを認証に対応させてみる。

http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=*********************&Operation=ItemLookup&ItemId=4101162069&ResponseGroup=ItemAttributes,Offers,Images,Reviews&Version=2009-01-06
まずはパラメータ部分のみをリスト化する。
Service=AWSECommerceService
AWSAccessKeyId=*********************
Operation=ItemLookup
ItemId=4101162069
ResponseGroup=ItemAttributes,Offers,Images,Reviews
Version=2009-01-06
これに Timestamp を付加する。amazon.co.jp の場合、Timestamp は JST を使用(amazon.com の場合は GMT)し、フォーマットは yyyy-MM-dd'T'HH:mm:ss'Z' とする。
Service=AWSECommerceService
AWSAccessKeyId=*********************
Operation=ItemLookup
ItemId=4101162069
ResponseGroup=ItemAttributes,Offers,Images,Reviews
Version=2009-01-06
Timestamp=2009-05-011T12:00:00Z
パラメータをソートする。
AWSAccessKeyId=*********************
ItemId=4101162069
Operation=ItemLookup
ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews
Service=AWSECommerceService
Timestamp=2009-05-011T12%3A00%3A00Z
Version=2009-01-06
パラメータを '&' で繋げる。
AWSAccessKeyId=*********************&ItemId=4101162069&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-05-011T12%3A00%3A00Z&Version=2009-01-06
'&' で繋げたパラメータの前に以下の 3 行を付加する。
GET
webservices.amazon.co.jp
/onca/xml
AWSAccessKeyId=*********************&ItemId=4101162069&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews
&Service=AWSECommerceService&Timestamp=2009-05-011T12%3A00%3A00Z&Version=2009-01-06

※AWSAccessKeyID 〜 Version=2009-01-06 は一行。
この 4 行のデータを Secret Access Key をキーとして RFC 2104-compliant HMAC with the SHA256 でハッシュ化する。 Java の場合、以下のロジックでハッシュ化できる。
Java Sample Code for Calculating Signature Version 2 Signatures
http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/AuthJavaSampleSig2.html
で、得られたハッシュ値がこちら。
uIwCHHLMsvxxUmd+IX+KqNh9/+eNXlUB2X+L21woSZE=
ハッシュ値を URL Encode する。
uIwCHHLMsvxxUmd%2BIX%2BKqNh9%2F%2BeNXlUB2X%2BL21woSZE%3D
URL Encode されたハッシュ値をパラメータの最後に付加する。
http://webservices.amazon.co.jp/onca/xml?AWSAccessKeyId=*********************&ItemId=4101162069&Operation=ItemLookup&ResponseGroup=ItemAttributes%2COffers%2CImages%2CReviews&Service=AWSECommerceService&Timestamp=2009-05-011T12%3A00%3A00Z&Version=2009-01-06&Signature=uIwCHHLMsvxxUmd%2BIX%2BKqNh9%2F%2BeNXlUB2X%2BL21woSZE%3D
これでリクエストは完成。

上記手順のより詳細な情報はこちら
Example REST Requests
http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/rest-signature.html

API にアクセス

上で組み立てたリクエストで API にアクセスして正常応答があれば成功。

参考

より詳細な情報は Amazon Product Advertising API のドキュメントを参照のこと。

Product Advertising API - Request Authentication
http://docs.amazonwebservices.com/AWSECommerceService/latest/DG/RequestAuthenticationArticle.html

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Mar 06, 2009

[WebService] API 経由で Google からウェブページを検索する。

一昔前には API 経由でウェブページの検索ができる Google Web APIs というものがあった。 ・・・のだけれど、久しぶりに検索しようと思ったら無くなっている。 どうやらサービスの改変やら何やらでサービス名が変わったり無くなったり新設されたり、と色々あった模様。

『Google Web APIs』
    |
(サービス名変更)
    ↓
Google SOAP Search API
    ↓
(Google SOAP Search API 新規登録停止。)
    ↓
Google AJAX Search API』 提供開始


結局現時点(2009/03/06)では Google AJAX Search API の一部に Google WEB APIs の機能制限版に近いものが提供されている。

Developer's Guide - Google AJAX Search API - Flash やその他 JavaScript を使用しない環境
http://code.google.com/intl/ja/apis/ajaxsearch/documentation/#fonje


Google というと、既に Web サービスのインフラに近い位置にあると思うので、Web 検索 API はまともなものを提供して欲しいと切に思う。

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Mar 03, 2009

[WebService] Skittles.com が面白いことになっている

Skittles.com が面白いことになっている。 サイト更改後、Skittles.com 内コンテンツのほとんどをインターネット上にある CGM のデータで構成しているのだ。 利用している CGM サービスは、Twitter(ミニブログ), Wikipedia(百科事典), YouTube(動画共有), Flickr(写真共有), Facebook(SNS)。 自社サイト内のコンテンツを顧客(というか、不特定多数?)に委ねてしまおうという何とも極端な試み。

[Skittles Home]
Skittles.com Home - Twitter

[Skittles Home]
Skittles.com Products - Wikipedia

[Skittles Home]
Skittles.com Media(Videos) - YouTube

[Skittles Home]
Skittles.com Media(Pics) - Flickr

[Skittles Home]
Skittles.com Friends - Facebook


Skittles.com は CGM 上の情報を一切フィルタリングせずに表示する、という極めてオープンな構成になっている。 グランズウェルを味方に付けるため情報操作を行っていないということを前面に押し出したかったのだろう。 営利企業がここまで思い切ったことをするのは評価に値する。 流石米国企業、といったところか(いや、米国企業でもここまで思い切ったことをするのは珍しいのかも)。

Skittles.com はオープンであることを選択したわけだけれど、その代償も当然払うことになる。 早速 Skittles.com ホームの Twitter 上にはネガティブな書き込みや不適切なサイトへのリンクが表示され始めている。

[I hate Skittles]
Skittles に対するネガティブな書き込み。
[Adult link]
アダルトサイトへのリンク(リンク先に飛ばない様に(w)。

自分たちでは制御できないものを取り込んだサイトはこの先どうなって行くのだろう。 グランズウェルの最先端を行く取り組みがどうなっていくのか注視したい。

参考資料

グランズウェルについて詳しく知りたい方はこちらの書籍がお薦め。というか、今のところこれしかない??


グランズウェル ソーシャルテクノロジーによる企業戦略

(Amazon.co.jp の商品紹介より)

米国ベストセラーの待望の邦訳! “Business Week”のベストセラーにも堂々ランクイン! ソーシャルテクノロジーが生みだすグランズウェル(大きなうねり)の正体をつかみ、 戦略的に使いこなせ!

ソニー・エレクトロニクスの広報責任者リック・クランシーは、ある「力」に悩まされていた。 その力は、とどまるところを知らずに成長していたが、正体がわからない。ブロガー。 ディスカッショングループ。ユーチューブ。会ったこともない消費者たちが、誰もが 閲覧できるフォーラムで製品を格付けしていた。会社が大切に育ててきたブランドを、 あらゆるものが攻撃していた。従来の広報ツールは何の役にも立たなかった。そう、 本書で「グランズウェル(大きなうねり)」と呼ぶトレンドと格闘しているのであった。

本書は著者らと数百人のクライアントとのやり取りと、数千時間に及ぶコラボレーションや 分析作業から生まれた。その目的はただひとつ---あなたが、テクノロジーの変化の波に 圧倒されることなく、ソーシャルテクノロジーが生みだす世界を航海できるよう支援する ことだ。どのようにビジネスに活かせるか、収益を上げ、あるいはコスト削減を実現し、 そして顧客とのエンゲージメントを強めているのか、事例に基づいて解説する。さらに、 実用可能なROI(費用対効果)のモデルも提供している。

企業がコントロールできない状況で個人がよりパワーを持つことを脅威と捉える企業も 少なくない。しかし、企業にとって、本当は個人と深い関係を築くための絶好の機会に なるのだ!さあ、グランズウェルの世界にようこそ。

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Feb 19, 2009

[WebService] 実は怖い(かもしれない) Twitter。

Twitter では位置情報によるエントリ検索ができる。 と同時に、日付指定(例えば、2009/01/01以降 2009/02/19以前)によるエントリ検索もできる。

さて、この 2 つを組み合わせると・・・!?



このマップには以下の条件に合致した Twitter エントリが表示されます。
  1. システム日付の前日以降に書き込まれたもの。
  2. 地図の中心付近の位置情報を持つもの。
とは言うものの、この位置情報って何の位置なんだろう?? 本当にこの位置で書き込んだものなのだろうか??

■ 2009/02/20 追記
geocode の検索対象はプロフィールの現在地の様だ。 ここを実際にいる場所に合わせて頻繁に更新しなければ問題無いのか。 ・・・携帯端末用 Twitter クライアントが GPS 情報を流し込んだりする可能性はあるのかな??

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Oct 24, 2007

[WebService] PlaceEngine API にチャレンジ

PlaceEngine とは

PlaceEngine は、Wi-Fi 機器を使って簡単に現在位置を推定してくれるソフトウェア。 以前 Mac OS X にインストールして放置してあったのだけれど、API があるということを知ったので早速試してみた。

PlaceEngine
http://www.placeengine.com/
PlaceEngine 技術資料
http://www.placeengine.com/doc
PlaceEngine API ローカルアプリケーションプログラミング
http://www.placeengine.com/doc/tutl

サンプルコード

サンプルコードは、PlaceEngine API ローカルアプリケーションプログラミングとほとんど同じ。 Mac OS X 版では LocalDB 機能(ローカルに位置情報を記録する機能) は使用できないということなので、PlaceEngine サーバに位置情報を問い合わせるサンプルだけ試してみた。

サンプルアプリを作成するためには、

  1. ここ から PlaceEngine クライアントをダウンロードし、インストールする。ここでは 2007/10/24 現在最新の o070531 を使用するものとする。 [PlaceEngine version]
  2. PlaceEngine を起動する。
  3. ここで PlaceEngine API アプリケーションキーを取得する。
の準備が必要。 PlaceEngine API は直接 PlaceEngine サーバに問い合わせるわけではなく、ローカルの PlaceEngine クライアントに問い合わせるものなので、PlaceEngine クライアントがローカルで起動していないと動作しない。

サンプルを動作させると PlaceEngine がセキュリティ警告ダイアログを表示する。 実行しても安全だと思う場合は YES をクリックする。
[PlaceEngine warning]

package jp.in_vitro.codelets;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class Codelet {

    private static final String KEY = "aNR3HYXx1jzYqw24...";
    private static final String URL_RTAGJS = "http://localhost:5448/rtagjs";
    private static final String URL_LOC = "http://www.placeengine.com/api/loc";
    private final long t;

    public Codelet() {
        super();

        System.setProperty("http.nonProxyHosts", "localhost");
        this.t = System.currentTimeMillis() / 1000;
    }

    public Loc getLoc() throws IOException {
        Rtag rtag = this.getRtag(t);

        if (rtag.getNumap() > 0) {
            String locRequest = URL_LOC + "?t=" + this.t + "&rtag="
                    + rtag.getRtag() + "&appk=" + KEY + "&fmt=json";
            StringBuilder locResponse = sendHttpRequest(new URL(locRequest));
            return parseLocResponse(locResponse);
        }
        return null;
    }

    protected Loc parseLocResponse(final StringBuilder response) {
        Loc location = new Loc();

        response.deleteCharAt(0);
        String responseAsString = new String(response);
        String param[] = responseAsString.split(",");
        String param2[] = responseAsString.split("\\{");

        if (param.length >= 4 && param2.length >= 2) {
            location.setLon(param[0]);
            location.setLat(param[1]);

            String info[] = param2[1].substring(0, param2[1].length() - 1)
                    .split(",");
            for (int i = 0; i < info.length; i++) {
                String tk[] = info[i].split(":");
                String name = tk[0].substring(1, tk[0].length() - 1);
                String value = tk[1];
                if ("addr".equals(name)) {
                    location.setAddr(value);
                } else if ("msg".equals(name)) {
                    location.setMsg(value);
                } else if ("floor".equals(name)) {
                    location.setFloor(value);
                } else if ("t".equals(name)) {
                    location.setT(value);
                }
            }
        }
        return location;
    }

    protected void printLoc(final Loc loc) {
        System.out.println("Longitude(経度) : " + loc.getLon());
        System.out.println("Latitude(緯度)  : " + loc.getLat());
        System.out.println("Address(住所)   : " + loc.getAddr());
        System.out.println("Floor          : " + loc.getFloor());
        System.out.println("Message        : " + loc.getMsg());
    }

    public Rtag getRtag(final long t) throws IOException {
        String rtagRequest = URL_RTAGJS + "?t=" + this.t + "&appk=" + KEY;
        StringBuilder rtagResponse = sendHttpRequest(new URL(rtagRequest));
        Rtag rtag = this.parseRtagResponse(rtagResponse);
        return rtag;
    }

    protected Rtag parseRtagResponse(final StringBuilder response) {
        Rtag rtag = new Rtag();

        String splitRtagjsResponse[] = response.substring(9,
                response.length() - 2).split(", *");
        String r = splitRtagjsResponse[0].substring(1, splitRtagjsResponse[0]
                .length() - 1);
        int numap = Integer.parseInt(splitRtagjsResponse[1]);
        String t = splitRtagjsResponse[2];

        rtag.setRtag(r);
        rtag.setNumap(numap);
        rtag.setT(t);

        return rtag;
    }

    protected StringBuilder sendHttpRequest(final URL url) throws IOException {
        HttpURLConnection connection = null;
        BufferedReader reader = null;
        try {
            connection = (HttpURLConnection) url.openConnection();
            connection.connect();
            reader = new BufferedReader(new InputStreamReader(connection
                    .getInputStream(), "UTF-8"));
            StringBuilder response = new StringBuilder();
            String line = null;
            while ((line = reader.readLine()) != null) {
                response.append(line);
            }
            return response;
        } finally {
            try {
                if (reader != null) {
                    reader.close();
                }
            } finally {
                if (connection != null) {
                    connection.disconnect();
                }
            }
        }
    }

    public static void main(final String[] args) throws Exception {
        Codelet me = new Codelet();
        Loc loc = me.getLoc();
        me.printLoc(loc);
    }

    public static class Rtag {

        private String rtag;
        private int numap;
        private String t;

        public Rtag() {
            super();
        }
        public String getRtag() {
            return this.rtag;
        }
        public void setRtag(final String rtag) {
            this.rtag = rtag;
        }
        public int getNumap() {
            return this.numap;
        }
        public void setNumap(final int numap) {
            this.numap = numap;
        }
        public String getT() {
            return this.t;
        }
        public void setT(final String t) {
            this.t = t;
        }
    }

    public static class Loc {
        private String lat;
        private String lon;
        private String addr;
        private String msg;
        private String floor;
        private String t;

        public Loc() {
            super();
        }

        public String getLat() {
            return this.lat;
        }
        public void setLat(final String lat) {
            this.lat = lat;
        }
        public String getLon() {
            return this.lon;
        }
        public void setLon(final String lon) {
            this.lon = lon;
        }
        public String getAddr() {
            return this.addr;
        }
        public void setAddr(final String addr) {
            this.addr = addr;
        }
        public String getMsg() {
            return this.msg;
        }
        public void setMsg(final String msg) {
            this.msg = msg;
        }
        public String getFloor() {
            return this.floor;
        }
        public void setFloor(final String floor) {
            this.floor = floor;
        }
        public String getT() {
            return this.t;
        }
        public void setT(final String t) {
            this.t = t;
        }
    }
}

サンプルコードの実行結果

Longitude(経度) : 13*.******
Latitude(緯度)  : 3*.******
Address(住所)   : '東京都************'
Floor          : null
Message        : '位置が取得できました'

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jul 18, 2007

[WebService] XML-RPC 用 JavaScript ライブラリ

JavaScript で XML-RPC をサポートするライブラリをメモ。 結構揃っているので、クロスブラウザ、クロスプラットフォームの品質が高いものもありそう。

Mimic XML-RPC Client for Java Script(GPL)
http://sourceforge.net/projects/mimic-xmlrpc/
jsxmlRPC(BSD License)
http://sourceforge.net/projects/jsxmlrpc/
JS-RPC Client(GPL)
http://sourceforge.net/projects/jsrpc/
XML-RPC in Mozilla(Mozilla Public License)
http://www.mozilla.org/projects/xmlrpc/
vcXMLRPC(GPL)
http://www.vcdn.org/Public/XMLRPC/
Jamritas(独自ライセンス)
http://jamritas.sourceforge.net/
jsolait(LGPL)
http://jsolait.net/

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jul 17, 2007

[WebService] XML-RPC メモ

XML-RPC に関する情報をメモ。 例によって Google 先生の覚えが良いものを適当に列挙しただけ。 技術資料をざっと眺めてみたが、単純なので実装はかなり簡単そう。

技術資料

XML-RPC.com
http://www.xmlrpc.com/
XML-RPC Specification
http://www.xmlrpc.com/spec
Wikipedia - XML-RPC
http://ja.wikipedia.org/wiki/XML-RPC
XML-RPC for Newbies
http://www.scripting.com/davenet/1998/07/14/xmlRpcForNewbies.html
XML-RPC HOWTO
http://www.linux.or.jp/JF/JFdocs/XML-RPC-HOWTO/

XML-RPC が使用できる公開サービス

XEP-0009: Jabber-RPC
http://www.xmpp.org/extensions/xep-0009.html
Movable Type で使える XML-RPC API
http://www.na.rim.or.jp/~tsupo/program/blogTool/mt_xmlRpc.html
tDiary ドキュメント - xmlrpc.rb
http://docs.tdiary.org/ja/?xmlrpc.rb
XML-RPC for Wiki (FreeStyle Wiki 用の XML-RPC モジュール)
http://www.donzoko.net/cgi/fswiki_xmlrpc/
郵便専門ネットを XML-RPC で活用する
http://yubin.senmon.net/service/xmlrpc.html

XML-RPC 用ライブラリ(Java)

Apache XML-RPC
http://ws.apache.org/xmlrpc/
Crispy
http://sourceforge.net/projects/crispy/

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jun 25, 2006

[WebService] Weather Hacks 発見!!

以前から天気予報を Web サービスで提供してくれるサイトが無いものかと思っていた。 しばらく前に調べたときには下記の様な情報に行き当たって結局諦めたのだが、現在では少し状況が変わっている様だ。

Web屋のネタ帳 - 天気予報をXMLで提供すると気象庁が発表してから半年が経った
http://neta.ywcafe.net/000484.html
Web屋のネタ帳 - 天気予報のXMLはFTPでGETできる。ただし月額10万円超
http://neta.ywcafe.net/000497.html
Web屋のネタ帳 - もしも天気予報がXMLだったら − その1 XMLとは?
http://neta.ywcafe.net/000338.html
Web屋のネタ帳 - もしも天気予報がXMLだったら − その2 できない理由
http://neta.ywcafe.net/000339.html
今回もう一度調べてみたところ、どうやら livedoor が天気予報のデータを XML で配信してくれているらしいということが分かった。 やるな!! livedoor。 Web サービスというより、単に XML がダウンロードできるだけなのだけれど、これでも十分便利。 位置情報とマッピングしてくれるサービスが提供されると、より使い出があるのだけれど。 今後の発展に期待!!
Weather Hacks
http://weather.livedoor.com/weather_hacks/rss_feed_list.html

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jun 19, 2006

[WebService] YouTube API にチャレンジ

YouTube とは

YouTube はビデオ共有サービスらしい。 しばらく前から話題になっていて気にはなっていたのだが、なかなか使ってみる機会がなかった。 調べてみたら API が公開されているということだったので、とりあえず API だけ遊んでみることにした。

YouTube
http://www.youtube.com/
Developer APIs
http://www.youtube.com/dev

試してみる

YouTube API を使用するには、YouTube のアカウントが必要。 まずは YouTube アカウント作成から行ってみた。

  1. YouTube SignUp から YouTube のアカウントを作成。
  2. developer profile で Developer ID を取得。

User Profile の取得

YouTube API は REST を採用している。 User Profile は下記の URL にアクセスすることで取得できる。

http://www.youtube.com/api2_rest?method=youtube.users.get_profile&dev_id=[Developer ID]&user=[プロファイルを取得したいユーザID]

<?xml version="1.0" encoding="utf-8"?>

<ut_response status="ok">
  <user_profile>
    <first_name />
    <last_name />
    <about_me />
    <age>55</age>
    <video_upload_count>0</video_upload_count>
    <video_watch_count>0</video_watch_count>
    <homepage />
    <hometown />
    <gender>m</gender>
    <occupations />
    <companies />
    <city />
    <country>JP</country>
    <books />
    <hobbies />
    <movies />
    <relationship />
    <friend_count>0</friend_count>
    <favorite_video_count>0</favorite_video_count>
    <currently_on>true</currently_on>
  </user_profile>
</ut_response>

Vide リストを取得

YouTube では Video にタグ付けができるらしい。 現在(2006/06/19) の YouTube API では Video リストはタグ単位、ユーザ単位で取得できる。 とりあえず "cat" というタグのついた Video リストを取得してみた。 URL は下記の通り。

http://www.youtube.com/api2_rest?method=youtube.videos.list_by_tag&dev_id=[Developer ID]&tag=cat

<?xml version="1.0" encoding="utf-8"?>

<ut_response status="ok">
  <video_list>
    <video>
      <author />
      <id>HsNYrJDwguo</id>
      <title>cat</title>
      <length_seconds>183</length_seconds>
      <rating_avg>3.46</rating_avg>
      <rating_count>54</rating_count>
      <description>cat</description>
      <view_count>51380</view_count>
      <upload_time>1145383314</upload_time>
      <comment_count>33</comment_count>
      <tags>cat</tags>
      <url>http://www.youtube.com/?v=HsNYrJDwguo</url>
      <thumbnail_url>http://sjl-static6.sjl.youtube.com/vi/HsNYrJDwguo/2.jpg</thumbnail_url>
    </video>

    snip...

  </video_list>
</ut_response>

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jun 12, 2006

[WebService] Flickr API にチャレンジ

Flickr API とは

Flickr は写真を共有するサービスを提供しているサイト。 API 経由で写真の検索などができる。

Flickr
http://www.flickr.com/
Flickr Services
http://www.flickr.com/services/api/

試してみる

  1. こちらから Flickr のアカウントを取得する。
  2. こちらから API application key を取得する。
  3. http://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=[Your API application key]&text=[Query] にアクセスする。

実行結果

http://www.flickr.com/services/rest/?method=flickr.photos.search&api_key=[My API application key]&text=dr+strangelove にアクセスした結果がこちら↓

<?xml version="1.0" encoding="utf-8" ?>
<rsp stat="ok">
<photos page="1" pages="2" perpage="100" total="167">
	<photo id="159653118" owner="14441184@N00" secret="4137e632d9" server="51" title="Dr_Strangelove" ispublic="1" isfriend="0" isfamily="0" />
	<photo id="157381443" owner="84949728@N00" secret="6dd9524b53" server="48" title="Riding the Fire Hydrant" ispublic="1" isfriend="0" isfamily="0" />
	<photo id="152649730" owner="91264084@N00" secret="e8a2ad03da" server="54" title="dr_strangelove" ispublic="1" isfriend="0" isfamily="0" />

  ...略

</photos>
</rsp>
上記の XML には URL が含まれていないのでそのままでは写真を取得することができない。 ID から URL へのマッピングルールは以下に記述されている。
Photo URLs
http://www.flickr.com/services/api/misc.urls.html

API Explorer

Flickr は Web インターフェースから API をコールできる API Explorer というアプリケーションを提供している。 ちょっと試してみるには非常に便利。

写真検索用 API をコールする API Explorer
http://www.flickr.com/services/api/explore/?method=flickr.photos.search

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jun 11, 2006

[WebService] Technorati API にチャレンジ

Technorati API とは

Technorati は Blog 検索サービスを提供しているサイト。 Search や Browse といった照会系の API を提供してくれているので、試してみた。

Technorati
http://www.technorati.com/
Developer Center
http://www.technorati.com/developers/
Technorati API Documentation
http://www.technorati.com/developers/api/

試してみる

  1. こちらで Technorati のアカウントを取得する。
  2. 生成したアカウントでサインインする。
  3. こちらに ApiKey が表示されるのでメモ。
  4. http://api.technorati.com/search?key=[Your ApiKey]&query=[Query] にアクセスして検索を行ってみる。

実行結果

http://api.technorati.com/search?key=[My ApiKey]&query=star+wars にアクセスした結果がこちら↓

<?xml version="1.0" encoding="utf-8"?>
<!-- generator="Technorati API version 1.0 /search" -->
<!DOCTYPE tapi PUBLIC "-//Technorati, Inc.//DTD TAPI 0.02//EN" "http://api.technorati.com/dtd/tapi-002.xml">
<tapi version="1.0">
<document>
<result>
    <query>star wars</query>
    <querycount>647413</querycount>
    <rankingstart>0</rankingstart>
</result>
<item>
<weblog>
<name>The Truth Shall Make Ye Fret</name>
<url>http://kingandy.livejournal.com</url>
<rssurl></rssurl>
<atomurl>http://kingandy.livejournal.com/data/atom</atomurl>
<inboundblogs>1</inboundblogs>
<inboundlinks>2</inboundlinks>
<lastupdate>2006-06-06 12:20:43 GMT</lastupdate>
</weblog>
<title>The Truth Shall Make Ye Fret</title>
<excerpt>So I've found the link at the bottom of the Penny Arcade front page that permalinks to the most recent comic. You are no longer safe from my linkage. Why the new Star Wars original trilogy DVDs are a crappy rip</excerpt>
<created>2006-06-08 08:49:22 GMT</created>
<permalink>http://kingandy.livejournal.com/388241.html</permalink>
</item>

  ...略

</document>
</tapi>

現在提供されている API

2006/06/11 現在、以下の API が提供されている。

Search
  • cosmos ・・・ Blogs linking to a given URL.
  • search ・・・ Blog posts featuring a given keyword or phrase.
  • tag ・・・ Blog posts tagged with a specific topic.
Browse
  • toptags ・・・ Top tags indexed by Technorati.
Blog information
  • bloginfo ・・・ Information about a specific blog URL such as link counts, rank, and available feeds.
  • blogposttags ・・・ The top tags used by a specific blog.
Member Information
  • getinfo ・・・ Information about a Technorati member such as full name and other blogs by the same author.

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jun 03, 2006

[WebService] SimpleAPI その1. にチャレンジ

SimpleAPI その1. ウェブサイトサムネイル作成API β版 というサービスを見つけた。 URL を渡すとページのサムネイル画像を返してくれる。 なかなか面白そうなので試してみた。

SimpleAPI
http://img.simpleapi.net/

このサイトのサムネイル画像


<a href="http://www.in-vitro.jp/blog/index.cgi"> <img src="http://img.simpleapi.net/small/http://www.in-vitro.jp/blog/index.cgi" alt="" width="128" height="128" hspace="4" vspace="4" border="0"> </a>
Blosxom 用の plugin でも作ってみようかな。

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

May 09, 2006

[WebService] Wikipedia API にチャレンジ

Wikipedia の API が無いものかと調べてみた。 「クローラのアクセスは止めて」と書いてあるものの普通に公開されていた。

Wikipedia:Database download
http://en.wikipedia.org/wiki/Wikipedia:Download#XML_schema
XML access
http://en.wikipedia.org/wiki/Special:Export/Title_of_the_article
RSS access
http://www.blinkbits.com/en_wikifeeds_rss/Title_of_the_article

XML フォーマットで記事を取得

AIBO に関する記事を XML フォーマットで取得してみた。 http://en.wikipedia.org/wiki/Special:Export/AIBO にアクセスするだけで良い。

<mediawiki xmlns="http://www.mediawiki.org/xml/export-0.3/" 
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
              xsi:schemaLocation="http://www.mediawiki.org/xml/export-0.3/ 
                                  http://www.mediawiki.org/xml/export-0.3.xsd" 
              version="0.3" 
              xml:lang="en">
<siteinfo>
<sitename>Wikipedia</sitename> 
<base>http://en.wikipedia.org/wiki/Main_Page</base> 
<generator>MediaWiki 1.7alpha</generator> 
<case>first-letter</case> 
<namespaces>
<namespace key="-2">Media</namespace> 
<namespace key="-1">Special</namespace> 
<namespace key="0" /> 
<namespace key="1">Talk</namespace> 
<namespace key="2">User</namespace> 
<namespace key="3">User talk</namespace> 
<namespace key="4">Wikipedia</namespace> 
<namespace key="5">Wikipedia talk</namespace> 
<namespace key="6">Image</namespace> 
<namespace key="7">Image talk</namespace> 
<namespace key="8">MediaWiki</namespace> 
<namespace key="9">MediaWiki talk</namespace> 
<namespace key="10">Template</namespace> 
<namespace key="11">Template talk</namespace> 
<namespace key="12">Help</namespace> 
<namespace key="13">Help talk</namespace> 
<namespace key="14">Category</namespace> 
<namespace key="15">Category talk</namespace> 
<namespace key="100">Portal</namespace> 
<namespace key="101">Portal talk</namespace> 
</namespaces>
</siteinfo>
<page>
<title>AIBO</title> 
<id>47087</id> 
<revision>
<id>51895470</id> 
<timestamp>2006-05-06T22:55:18Z</timestamp> 
<contributor>
<ip>68.121.102.200</ip> 
</contributor>
<comment>/* External links */</comment> 
<text xml:space="preserve">[[Image:AIBO.JPG|thumb|right|The AIBO ERS-7 re
sembles a small dog]] '''AIBO''' is one of several types of [[robot|robotic]] [
[pet]]s designed and manufactured by [[Sony]]; there have been sever
中略
</text> 
</revision>
</page>
</mediawiki>

RSS フォーマットで記事を取得

同じく、AIBO に関する記事を RSS フォーマットで取得してみた。 http://www.blinkbits.com/en_wikifeeds_rss/AIBO にアクセスするだけで良い。

<?xml version="1.0" encoding="utf-8" ?> 
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 
                      xmlns:annotate="http://purl.org/rss/1.0/modules/annotate/" 
                      xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<channel>
<title>AIBO RSS Feed for Wikipedia powered by BlinkBits.com</title> 
<link>http://www.blinkbits.com/en_wikifeeds/AIBO</link> 
<description>Imagine the Collective Wisdom of All Mankind Available in the 
Blink of An Eye... That's BlinkBits!</description> 
<managingEditor>lcotter@blinkbits.com</managingEditor> 
<docs>http://www.blinkbits.com</docs> 
<generator>RSS Feed 2.1.4</generator> 
<language>en</language> 
<lastBuildDate>Wed, 12 Apr 2006 08:09:19 -0400</lastBuildDate> 
<image>
<url>http://www.blinkbits.com/images/icon_6040.gif</url> 
<title>AIBO RSS Feed from Wikipedia Powered by BlinkBits.com</title> 
<link>http://www.blinkbits.com</link> 
<width>60</width> 
<height>40</height> 
</image>
<item>
<title>AIBO Wikipedia RSS Feed</title> 
<link>http://www.blinkbits.com/en_wikifeeds/AIBO</link> 
<pubDate>Wed, 12 Apr 2006 08:09:19 -0400</pubDate> 
<guid isPermaLink="true">http://www.blinkbits.com/en_wikifeeds/AIBO</guid> 
<description>
<![CDATA[ [b]AIBO[/b] is one of several types of robotic pets designed and ma
nufactured by Sony; there have been several different models since their introdu

中略

]]> 
The Wikipedia article is licensed under http://www.gnu.org/copyleft/fdl.html and
 uses material from http://en.wikipedia.org/wiki/AIBO. A preview of this article 
is available at http://www.blinkbits.com/en_wikifeeds/AIBO. 
</description>
<dc:subject>Biography</dc:subject> 
<comments>http://www.blinkbits.com/en_wikifeeds/AIBO</comments> 
</item>
</channel>
</rss>

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Apr 25, 2006

[WebService] Google Calendar API にチャレンジ

Google Calendar も API が公開されていたのでサワリだけ試してみた。

Using the Google Calendar Data API
http://code.google.com/apis/gdata/calendar.html

API 経由で Google Calendar にアクセス

Google Calendar に API 経由でアクセスするためには、まずアクセスしたいカレンダーの URL を調べなければならない。

  1. Google Calendar に Web ブラウザでアクセス
  2. Calendars > My Calendars > アクセスしたいカレンダー > Calendar settings を選択
  3. Private Address の "XML" アイコンのリンク先 URL をコピーする
上記手順で得られた URL にアクセスしてみると、カレンダーの内容を XML で取得できる。
http://www.google.com/calendar/feeds/in-vitro.example@gmail.com/private-1234567890abcdef1234567890abcdef/basic
にアクセスすると
<?xml version='1.0' encoding='UTF-8'?>
<feed xmlns='http://www.w3.org/2005/Atom'
	xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/'
	xmlns:gd='http://schemas.google.com/g/2005'>
	<id>
		http://www.google.com/calendar/feeds/in-vitro-example%40gmail.com/private-1234567890abcdef1234567890abcdef/basic
	</id>
	<updated>2006-04-24T01:05:34.000Z</updated>
	<title type='text'>private</title>
	<subtitle type='text'>private</subtitle>
	<link rel='http://schemas.google.com/g/2005#feed'
		type='application/atom+xml'
		href='http://www.google.com/calendar/feeds/in-vitro-example%40gmail.com/private-1234567890abcdef1234567890abcdef/basic'>
	</link>
	<link rel='self' type='application/atom+xml'
		href='http://www.google.com/calendar/feeds/in-vitro-example%40gmail.com/private-1234567890abcdef1234567890abcdef/basic?max-results=25'>
	</link>
	<link rel='next' type='application/atom+xml'
		href='http://www.google.com/calendar/feeds/in-vitro-example%40gmail.com/private-1234567890abcdef1234567890abcdef/basic?start-index=26&amp;max-results=25'>
	</link>
	<author>
		<name>in-vitro-example</name>
		<email>in-vitro-example@gmail.com</email>
	</author>
	<generator version='1.0' uri='http://www.google.com/calendar'>
		Google Calendar
	</generator>
	<openSearch:itemsPerPage>25</openSearch:itemsPerPage>
	<entry>
		<id>
			http://www.google.com/calendar/feeds/in-vitro-example%40gmail.com/private-1234567890abcdef1234567890abcdef/basic/1357913579abcdefabcdef2468
		</id>
		<published>2006-04-15T04:30:00.000Z</published>
		<updated>2006-04-15T14:43:51.000Z</updated>
		<category scheme='http://schemas.google.com/g/2005#kind'
			term='http://schemas.google.com/g/2005#event'>
		</category>
		<title type='text'>○○さん、××さんと昼食</title>
		<summary type='html'>
			When: 2006-04-14 21:30:00 to 00:00:00
			America/Los_Angeles&lt;br&gt;
		</summary>
		<content type='text'>
			When: 2006-04-14 21:30:00 to 00:00:00
			America/Los_Angeles&lt;br&gt;&lt;br&gt;Event
			Description:null
		</content>
		<link rel='alternate' type='text/html'
			href='http://www.google.com/calendar/event?eid=fedcba0987654321fedcba0987654321fedbca0987654321fedbca098765'
			title='alternate'>
		</link>
		<link rel='self' type='application/atom+xml'
			href='http://www.google.com/calendar/feeds/in-vitro-example%40gmail.com/private-1234567890abcdef1234567890abcdef/basic/1357913570abcdefabcdef2468'>
		</link>
		<author>
			<name>in-vitro-example</name>
			<email>in-vitro-example@gmail.com</email>
		</author>
	</entry>
</feed>
という感じの XML を取得できる。 尚、上記のリクエスト、レスポンス共にダミーなのでそのままコピペしても当然無効。

Google Calendar API のリクエスト URL フォーマット

Google Calendar API に対するリクエスト URL は

  http://www.google.com/calendar/feeds/<userID>/<visibility>/<projection>
という形式になっている。 visibility、projection に指定可能な値は
Visibility values
http://code.google.com/apis/gdata/calendar.html#Visibility
Projection values
http://code.google.com/apis/gdata/calendar.html#Projection
に記載されている。

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Apr 14, 2006

[WebService] Google Calendar で遊ぶ

Google Calendar が公開された。 面白そうなので早速遊んでみることに。 インタフェースは Mac に付属の iCal にそっくり。 かなり使いやすい。 まだカレンダの新規作成などでバグが散見されるが、バグが減って安定してくれば結構使えそう。

[Google Calendar 01]
[Google Calendar 02]
[Google Calendar 03]
[Google Calendar 04]
[Google Calendar 05]

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Apr 01, 2006

[WebService] Yahoo!オークション API にチャレンジ

Yahoo!オークションも遂に API 公開ということで少し遊んでみた。

Yahoo!デベロッパーネットワーク - Yahoo!オークション
http://developer.yahoo.co.jp/auctions/
カテゴリ情報
http://developer.yahoo.co.jp/auctions/categorytree/V1/rest/categorytree.html
商品リスト
http://developer.yahoo.co.jp/auctions/categoryleaf/V1/rest/categoryleaf.html
出品リスト
http://developer.yahoo.co.jp/auctions/sellinglist/V1/rest/sellinglist.html

Yahoo!オークション API を使用したサンプルアプリケーション

Ajax を利用した Yahoo!オークション API サンプルアプリケーション。 "+" をクリックするとツリーが展開される。 リーフノードに表示される"[OPEN]"をクリックすると、出品されているアイテムの 1 ページ目を表示する。 ただそれだけ。

ちなみに、Web ブラウザは IE のみ対応。 Ajax なので当然要 JavaScript。


  • + オークション

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Jan 20, 2006

[WebService] Google Maps API を利用しているサイトを調査

ふと思い立って Google Maps API を利用しているサイトを調べてみた。 とは言え、既にかなりの数のサイトが Google Maps API を利用している模様。 とりあえず検索エンジンで適当にかき集めてみた。

Google Maps API はクライアント側に負荷がかかるのが難点ではあるけれど、皆が色々工夫しているのが楽しい。 もっと探せばいくらでも見付かりそうだな。

サービス検索

地図でホテルの料金比較:ホテル情報館
http://www.bit-style.com/travel/
関東のデートスポットマップ
http://www.date2.jp/
地図から検索 Find Job! Mapsβ
http://www.find-job.net/fj/mapsearch.cgi
食べログ.com
http://tabelog.com/restaurant/tokyo/

ブログ・SNS連携

はてなマップ
http://map.hatena.ne.jp/
なビログ
http://navilog.manno.jp/mailbbs.php
BLOGエントリを地図に
http://daily-archive.com/
マイミクマップ
http://www.flatz.jp/var/miximap/index.php
どこだログ
http://www.platypus.st/exec/show-tb4gmap.rb
お散歩マニア
http://www.osanpomania.net/

ゲーム

Google Maps で鈴鹿サーキット試走
http://tech.nitoyon.com/javascript/application/racing/1/
Google Maps APIシューティング挫折版
http://www.asahi-net.or.jp/~cs8k-cyu/javascript/gma_shmup_test/
らくがきマップ
http://playon.jp/mm/map/

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Dec 18, 2005

[WebService] del.icio.us API にチャレンジ

del.icio.us API とは

ソーシャル・ブックマークサービスの del.icio.us が公開している API。 ブックマークの登録、削除などの操作ができる。 方式は Yahoo! 同様 REST を採用している。

del.icio.us
http://del.icio.us/
del.icio.us - Reference
http://del.icio.us/help/api/

試してみる

試してみた。

  1. 最初に del.icio.us トップ から del.icio.us のアカウント登録を行う。
  2. リクエスト用の URL を作成する。
  3. 早速リクエストを送ってみる。リクエスト URL 実行時に BASIC 認証によるログインが要求されるので 1 で登録したアカウントで認証を行う。

ブックマークの登録

http://del.icio.us/api/posts/add?url=http://www.in-vitro.jp/blog/index.cgi/index.rss&description=in-vitro.jp
<?xml version='1.0' standalone='yes'?>
<result code="done" />

ブックマークの取得

http://del.icio.us/api/posts/get?
<?xml version='1.0' standalone='yes'?>
<posts dt="2005-12-16" tag="" user="invitro.jp">
  <post href="http://www.in-vitro.jp/blog/index.cgi/index.rss" 
           description="in-vitro.jp" 
           hash="e885a76a691ce90ff1626c1bd5c41a26" 
           others="1" 
           tag="system:unfiled" 
           time="2005-12-17T14:44:59Z" />
</posts>

ブックマーク先 URL の取得指示

http://del.icio.us/api/posts/update
<?xml version='1.0' standalone='yes'?>
<update time="2005-12-17T14:54:38Z" />

ブックマークの削除

http://del.icio.us/api/posts/delete?url=http://www.in-vitro.jp/blog/index.cgi/index.rss
<?xml version='1.0' standalone='yes'?>
<result code="done" />

del.icio.us 呼び出し用 HTML

Google Web APIs (beta) にチャレンジ で使用した HTML を BASIC 認証に対応させて使用した。

<html>
<head>
<script>
<!--
  var req;

  function sendRequest() {
    var url = document.myform.url.value;
    var param = document.myform.request.value;
    var username = document.myform.username.value;
    var password = document.myform.password.value;

    req = prepareXMLHttpRequest();
    if (req == null) {
      alert('XMLHttpRequest is not supported');
      return;
    }

    var encodedParam = '';
    var splitParam = param.split('&');
    for(i = 0; i < splitParam.length; i++) {
      var tmp = splitParam[i].split('=');
      encodedParam += '&' + encodeURIComponent(tmp[0]) + '=' + encodeURIComponent(tmp[1]);
    }

    req.onreadystatechange = showResponse;
    if(username != null && password != null) {
      req.open("POST", url, true, username, password);
    } else {
      req.open("POST", url, true);
    }
    req.setRequestHeader("Content-Type" , "text/xml");
    req.send(encodedParam);
  }

  function showResponse() {
    if (req.readyState == 4) {
      if (req.status == 200) {
        document.myform.response.value = req.responseText;
      } else {
        document.myform.response.value = 'FAILURE!! ' + req.status + ':' + req.statusText;
      }
    }
  }

  function prepareXMLHttpRequest() {
    if (window.XMLHttpRequest) {
      return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      return new ActiveXObject("Microsoft.XMLHTTP");
    }
    return null;
  }
//-->
</script>
</head>

<body>
  <form name="myform">
    <input type="button" value="POST!!" onclick="sendRequest();"><br>
    <br>
    URL: <input type="text" name="url" size="100"> <span style="font-size: xx-small;">[REQUIRED]</span><br>
    USERNAME: <input type="text" name="username" size="30"> <span style="font-size: xx-small;">[OPTIONAL]</span><br>
    PASSWORD: <input type="text" name="password" size="30"> <span style="font-size: xx-small;">[OPTIONAL]</span><br>
    <br>
    REQUEST: <span style="font-size: xx-small;">[OPTIONAL]</span><br>
    <textarea name="request" cols="100" rows="25"></textarea><br>
    <br>
    RESPONSE:<br>
    <textarea name="response" cols="100" rows="25"></textarea>
  </form>
</body>
</html>

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Dec 17, 2005

[WebService] Yahoo! 検索 Web サービスにチャレンジ

Yahoo! 検索 Web サービスとは

Yahoo! が公開している検索用 API。 Google は SOAP を採用しているが、それに対し Yahoo! は REST(HTTP リクエストに対して XML レスポンスが返される) を採用している。 Yahoo! が SOAP ではなく REST を採用した理由は、「なぜYahoo! JAPAN WebサービスはRESTを使用しているのですか? 」に記載されている。 対応しているサービスは、ウェブ検索、画像検索、動画検索。

Yahoo! 検索 Web サービス
http://developer.yahoo.co.jp/search/
Yahoo! 検索 Web サービス - Reference
http://developer.yahoo.co.jp/search/web/V1/webSearch.html

試してみる

試してみた。 リクエストの送信に使用した HTML は Google Web APIs (beta) にチャレンジ で使用したものと同じ。

  1. 最初に アプリケーション ID の登録 を行う。登録には Yahoo! ID が必要。
  2. リクエスト用の URL を作成する。クエリに 1 で取得したアプリケーション ID を指定する必要がある。例) "http://api.search.yahoo.co.jp/WebSearchService/V1/webSearch?appid=[アプリケーションID]&query=Yahoo%20Web%20Search"
  3. 早速リクエストを送ってみる。2 で作成した URL を呼び出す。
[Yahoo! 検索 Web サービス の呼び出し]

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |

Dec 16, 2005

[WebService] Google Web APIs (beta) にチャレンジ

Google Web APIs (beta) とは

Google が公開している Webサービス用の API。 Google に SOAP でリクエストを送ると、SOAP レスポンスで処理結果が帰ってくる。 対応しているサービスは、キャッシュの取得、検索、スペルチェック。

Google Web APIs (beta)
http://www.google.com/apis/
Google Web APIs (beta) - Reference
http://www.google.com/apis/reference.html
License
http://www.google.com/apis/api_terms.html

試してみる

試してみた。 Google Web APIs の呼び出し方は色々あるが、とりあえず今回は直接 POST でリクエストを送り込むことにする。 POST の送信に使用した HTML は↓に添付する。

  1. 最初に Google Web APIs license key の取得 を行う。
  2. リクエスト用の SOAP メッセージを作成する。メッセージには 1 で取得したライセンスキーを埋め込む必要がある。Google Web APIs Developer's Kit をダウンロードするとサンプルの SOAP メッセージが入っているので、それを参考にするとラク。
  3. 早速リクエストを送ってみる。"http://api.google.com/search/beta2" に対して 2 で作成した SOAP メッセージを送信する。
[Google Web APIs の呼び出し]

Google Web APIs 呼び出し用 HTML

POST の送信には JavaScript を利用して ajax っぽく(笑)してみることに。

<html>
<head>
<script>
<!--
  var req;

  function sendRequest() {
    var url = document.myform.url.value;
    var param = document.myform.request.value;

    req = prepareXMLHttpRequest();
    if (req == null) {
      alert('XMLHttpRequest is not supported');
      return;
    }

    req.onreadystatechange = showResponse;
    req.open("POST", url, true);
    req.setRequestHeader("Content-Type" , "text/xml");
    req.send(param);
  }

  function showResponse() {
    if (req.readyState == 4) {
      if (req.status == 200) {
        document.myform.response.value = req.responseText;
      } else {
        document.myform.response.value = 'FAILURE!! ' + req.status + ':' + req.statusText;
      }
    }
  }

  function prepareXMLHttpRequest() {
    if (window.XMLHttpRequest) {
      return new XMLHttpRequest();
    } else if (window.ActiveXObject) {
      return new ActiveXObject("Microsoft.XMLHTTP");
    }
    return null;
  }
//-->
</script>
</head>

<body>
  <form name="myform">
    <input type="button" value="POST!!" onclick="sendRequest();"><br>
    <br>
    URL:<br>
    <input type="text" name="url" size="100"><br>
    <br>
    REQUEST:<br>
    <textarea name="request" cols="100" rows="25"></textarea><br>
    <br>
    RESPONSE:<br>
    <textarea name="response" cols="100" rows="25"></textarea>
  </form>
</body>
</html>

検索用 SOAP リクエスト(サンプル)

<?xml version='1.0' encoding='UTF-8'?>

<SOAP-ENV:Envelope 
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
  xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" 
  xmlns:xsd="http://www.w3.org/1999/XMLSchema">

  <SOAP-ENV:Body>
    <ns1:doGoogleSearch xmlns:ns1="urn:GoogleSearch" 
         SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <key xsi:type="xsd:string">[Google Web APIs license key]</key>
      <q xsi:type="xsd:string">Google Web APIs</q>
      <start xsi:type="xsd:int">0</start>
      <maxResults xsi:type="xsd:int">10</maxResults>
      <filter xsi:type="xsd:boolean">true</filter>
      <restrict xsi:type="xsd:string"></restrict>
      <safeSearch xsi:type="xsd:boolean">false</safeSearch>
      <lr xsi:type="xsd:string"></lr>
      <ie xsi:type="xsd:string">latin1</ie>
      <oe xsi:type="xsd:string">latin1</oe>
    </ns1:doGoogleSearch>
  </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Posted in WebService | このエントリーをはてなブックマークに追加 | この記事をクリップ! livedoor クリップ |