ホーム > タグ > WebAPI

WebAPI

Wikipedia にレファレンス協同データベースでの検索結果を表示する Greasemonkey スクリプト

NDLが提供するレファレンス事例共有サービス「レファレンス協同データベース」がAPIを提供していたので使ってみました。せっかくなので「API腕自慢」にも応募してみます。

タイトルの通り、Wikipedia の記事にレファレンス協同データベースでの検索結果を表示する Greasemonkey スクリプトです。

このスクリプトをインストールして、たとえば「ヴァイオリン」の記事を見てみると、下のほうがこんなことになります。

CiNii のときみたいに Google の検索結果に表示しようかとも思ったんだけど、ちょっと検索に時間かかるし、Wikipedia のほうが親和性が高そうだったので Wikipedia で。ちょこちょこおもしろそうな事例がひっかかって良い感じ。記事執筆にも役立つかもしれません。

Firefox 3.6.10 + Greasemonkey 0.8.20100408.6 で動作確認。

それにしても jQuery なしの DOM 操作はめんどくさいな・・・。

追記 (2010/09/27)

何箇所か(というかコピペしたとこ以外全部・・・)「レファレンス共同データベース」と書いてましたが、正しくは「レファレンス協同データベース」でしたので修正しました。失礼しました。

7月のPORTAリニューアルについて

2009/7/7に「PORTA(国立国会図書館デジタルアーカイブポータル)」はリニューアルが行われ、外部提供インターフェイスにもいくつか機能が追加された(OpenSearchにISBNの前方一致検索を追加します)。もう随分前になってしまったが、気になるとこだけピックアップ。

OpenSearchにISBNの前方一致検索を追加

OpenSearchも、マッシュアップには一番使うであろうISBNによる検索に対応した。手軽に使えて、返ってくるメタデータも詳しい(ブラウザで表示するとあんまり見えないので、ソースを表示してみてください)。

SRU追加とCQL1.2対応

SRWのリクエストをREST(URLによるリクエスト)にしたSRUに対応した。SRWはSOAPを使うため、何かとめんどくさいが、SRUはURLに検索式を埋め込むので非常に楽。また検索式もCQL1.2に対応することで、検索クエリ中に並べ替えを指定することができるようになった。前の記事にいただいたコメントにもあるようにSRW/CQL1.1のsortKeysによる並べ替えは現時点でも実装されていないが、このCQL1.2による並べ替えはちゃんと実装されている。

OAI-PMHに対応

これ、ほんとにいいの?と思える大盤振る舞い。OAI-PMHは電子リソースのメタデータを網羅的に収集するためのプロトコル。より詳しくはWikipedia国立情報学研究所によるドキュメントの和訳あたりを参照。ようは、PORTAが持ってるメタデータを網羅的にダウンロードできて、アップデートにもちゃんと対応できるわけで、これはかなり画期的。

このサンプルで返ってくるデータは一部で、末尾に書かれたtoken(resumptionToken要素に書かれている。なお、この要素のcompleteListSizeに検索式に対するレコードの全数が書かれている。この例では6971件)をパラメータにリクエストすることで、続きのデータを得られる。このときは、下記のようにverbとresumptionTokenだけを指定してリクエストする。

なお、日によってはものすごい膨大な量のデータを登録してるようなので、ハーベストしようと思ってる人は注意が必要。

itemnoによる検索に対応

これまではPORTAで特定の1つの書誌を取得したい場合は、ISBNなどを利用するしか無かったが、PORTAでのIDであるitemnoでの検索に対応した(SRW/SRUのみ)。実は2009/7/7時点ではこの機能が実装されてなかったので、PORTAの中の方に問い合わせを行ったところ、先日実装されたことをお伝えいただいた。ただし、データベース構造上、repositoryidを指定する必要があるらしく、repositoryidとitemnoを半角ハイフンでつないだものをitemnoとして指定することで、目的の情報を取得できる。IDで情報取得できるのは、マッシュアップにはよいですね。他の方法に比べて速いし。

Photologをflickrからtumblrへ移行しました

以前にも書いたように、携帯電話で撮ったそのへんのものをコメントつきでflickrにアップしてたんですが、flickrの無料アカウントでの制限(200枚)に達してしまったのを機に、tumblrへ移行しました。

もうちょっとがんばって撮った写真(携帯電話以外で撮った写真)はflickrに置いたまま。これが200枚に達したらProアカウントにするか考えよう。

で、移行ですが、手動で1つづつ移すのは面倒なので、両サービスのAPIを利用して、flickrの特定セットの写真をtumblrに投稿するスクリプトを作成、ローカルサーバで走らせました。

自分で、しかも1回使うだけなので、使い勝手はひどいですが、参考にしたい人もいるかと思いますので、掲載しておきます。

<?php //flickrのSetのid。SetのURLに含まれています $flickr_photoset_id = '○○○○○○○○○○'; //flickrのAPI Key。 http://www.flickr.com/services/api/ で取得してください。 $flickr_api_key = '○○○○○○○○○○'; //tumblrに登録したメールアドレス $tumblr_email = '○○○○○○@○○○○○○○○○○'; //tumblrのパスワード $tumblr_password = '○○○○○○○○○○'; //投稿先のtumblr $tumblr_group = '○○○○○○.tumblr.com'; //Setの情報を取得する $s = simplexml_load_file('http://api.flickr.com/services/rest/?method=flickr.photosets.getPhotos&api_key='.&flickr_api_key.'&photoset_id='.$flickr_photoset_id.'&extras=url_o,date_upload,date_taken'); foreach($s->photoset->photo as $p_no => $p_val){ //写真1枚の情報を取得 $p_info = simplexml_load_file('http://api.flickr.com/services/rest/?method=flickr.photos.getInfo&api_key='.&flickr_api_key.'&photo_id='.$p_val->attributes()->id); //tumblrへのリクエスト作成 $request_multipart = array( 'email' => $tumblr_email, 'password' => $tumblr_password, 'type' => 'photo', 'source' => substr($p_val->attributes()->url_o,7), 'caption' => $p_info->photo->description, 'date' => $p_info->photo->dates->attributes()->taken, 'group' => $tumblr_group ); //tumblrへのリクエスト $c = curl_init('http://www.tumblr.com/api/write'); curl_setopt($c, CURLOPT_POST, true); curl_setopt($c, CURLOPT_POSTFIELDS, $request_multipart); curl_setopt($c, CURLOPT_RETURNTRANSFER, true); $result = curl_exec($c); $status = curl_getinfo($c, CURLINFO_HTTP_CODE); if (curl_errno($c)) { echo "curl_error($c)\n"; } curl_close($c); print_r($result."\n"); } ?>

flickr.photosets.getPhotosだとオリジナル画像のURLが取得できるのに、flickr.photos.getInfoだと取得できないのがよくわからんけど、まあ問題なし。

これをxampp上で実行して、tumblrを確認しだい、手動でflickr側の写真を削除していきました。削除は手でやったほうが安心だもんね。

その後、サブドメインの設定をドメイン管理会社の管理ページとtumblrのカスタマイズページで行い、めでたく完了。

いやしかし、API提供されてるといろいろ便利です。Webサービスを選ぶ際にはAPIやインポート/エクスポート機能をちゃんと見ておくべきですね。

参考

iTunes Store RSS Generator+ を公開しました

iTunes Store は、音楽はもちろん、Podcastやオーディオブックなど、魅力的なコンテンツが多数あります。しかし、新しいコンテンツが追加されても、なかなか気付きにくいという弱点があります。

幸い、iTunes Store はAPIを通じて検索することができるので、検索結果をRSSで出力するWebサービスを作成しました。

検索条件を指定して「検索」をクリックしたら、「Get RSS Feed」をクリックするか、ブラウザやブックマークレットによるRSS自動検知機能を使って購読してください。

ただ、作成中に気付いたのですが、iTunes Storeの検索APIでは並べ替えができず、リリース日の情報も持たないため、必ずしも新しいコンテンツをチェックできるわけではなさそうです。これはAPIの仕様上どうしようもないのでご了承ください。

CiNii Web API コンテストに先走る

NIIがCiNiiのAPIを使ったWebアプリケーションコンテストを開催するらしい。

APIを提供するだけでなく、こうして利用を促すのはとても良いですね。

で、CiNiiのAPIが使えて何が作れるだろうと考えて、とりあえず、Googleの検索結果ページに、同じキーワードでCiNiiを検索した結果を表示してみようと考えた。

そして、できたのがこのGreasemonkeyスクリプト。

こんな感じで表示される。

cinii - Google 検索

検索語にクリーンヒットする論文は多くないけど、普段目にしない論文がひっかかってきたりして結構おもしろい。常用するかは微妙なとこだけど。

で、お気づきの方も多いと思うが、これは、Greasemonkeyスクリプトであって、Webアプリケーションではない。よって、今回のコンテストには応募できず。作り終えてから気づいたよ。馬鹿ですいません。

まあ、ほら、API使ったらこんなことできるよー、ってサンプルだと思ってください。これくらいのものなら1、2時間でできるし、レスポンスも早くてびっくりですよ。

追記: 応募しました (2009/07/07)

当エントリーのはてブコメ(移転前のURL。つらい。)で、別にGreasemonkeyスクリプトでも応募していいんじゃないかという、ありがたいお言葉をいただいたので、応募してみました(もうコメントもらってから2週間以上経ってますが。どんだけカメなんだ、私)。まあ、NIIの方に判断してもらったらいい話ですよね。

開発者登録は所属やら電話番号とかあるので、一応匿名の身としては怖じ気付いたけど、名前(ハンドル)とメールアドレスだけでも問題なく登録できたので、匿名のプログラマも安心ですよ! (ってことを開発者登録のページにも書いといたほうがいいと思う)

ホーム > タグ > WebAPI

検索
フィード
メタ情報

ページの上部に戻る