東京大学情報基盤センター 学術情報研究部門 助教 清田 陽司 (兼 株式会社リッテル 上席研究員) 2010年4月9日 @東京大学アントレプレナープラザ会議室 マイニング探検会 #1 東京大学情報基盤センター 学術情報研究部門 助教 清田 陽司 (兼 株式会社リッテル 上席研究員)
素朴な疑問 そもそも、図書館の価値ってなに? まわりの人たちに価値をどうやって伝えるか? 過去の情報の蓄積と提供 研究・調査・教育のための知的インフラ 情報リテラシーを育てる場 「知る権利」の保証=民主主義を支える柱 etc. まわりの人たちに価値をどうやって伝えるか?
Webが世界に与えたインパクト 最初は「ハッカーのおもちゃ」 まわりの人たちを巻き込んでいくことで爆発的に成長 世界に新たな「知的ゲーム」を提供した 究極の「暇つぶしツール」 参加者の数が価値を生み出している 多くの人々の人生に新たな意味を与えた ゲームの意味を問うことには意味がない! 意味は後から生み出される
知的ゲームの提供者としての図書館 現在の図書館の基盤を築いたのは何か? 価値あるゲームを社会に提供することで認められた 誰でも情報に触れられる場を提供したこと 膨大な情報を検索できるツールを提供したこと 価値あるゲームを社会に提供することで認められた Webによってかなりの部分が代替されつつある → 新たな知的ゲームを創造すべき時期になっている!
新たな知的ゲームを創造するために 多くの人々を巻き込むしかけ Webがもつ価値を徹底的に利用 図書館パラダイムの再構築 組織の壁を超えた交流 エンターテインメント精神が大事 Webがもつ価値を徹底的に利用 Webを支える「ルール」と「テクニック」を知っておく プログラミングできなくても大丈夫 実際に手を動かして体験学習 図書館パラダイムの再構築 ライブラリアンシップを次の世代に受け継ぐために ひとりひとりが新サービスのプロデューサーとしての役割を果たしていこう!
トピック案 情報検索 データマイニング レコメンデーション テキスト処理 大規模データ処理 信頼性の向上 Webインタフェース Lucene、GETAssoc、… データマイニング 相関ルール抽出、回帰分析、機械学習、クラスタリング レコメンデーション 協調フィルタリング、プロファイル推定、… テキスト処理 形態素解析、構文解析、固有表現抽出、… 大規模データ処理 Hadoop、Amazon EC2/S3、Google Apps Engine、Windows Azure 信頼性の向上 HDFS、ZooKeeper、… Webインタフェース AJAX、Flash、HTML5、…
API (Application Programming Interface) OS(Windows、MacOS、Linuxなど)やプログラミング言語(C言語、Java、C#など)によって提供 OSやライブラリ内部の機能を利用できる APIの役割 アプリケーション開発においてプログラミングの手間を省く システム間の連携 抽象化 (=人間のレベルに近づける) 簡潔さと柔軟性のトレードオフ 抽象化しすぎると細かな要望に手が回らない
Web API APIの概念をWebの世界に援用 Webサービス運営者によって提供 Web APIの役割 トレードオフが存在 単に「API」といえば「Web API」 Webサービス運営者によって提供 Webサービス内部の機能やデータを利用できる Web APIの役割 新たなWebサービス開発の手間を省く Webサービス間の連携 → マッシュアップ 抽象化 トレードオフが存在 簡単にするほど細かな処理ができなくなる
Web APIを支える技術 リソースの指定 IPアドレス ドメイン名 URL 通信プロトコル TCP/IP (インターネット) HTTP / HTTPS (cf. Z39.50) ファイルフォーマット XML JSON APIへの情報送信 SOAP REST ブラウザへの情報提供 RSS / Atom OpenSearch
URL (Uniform Resource Locater) インターネット上のリソースの「住所」 プロトコル+ホスト名+パス名 で構成 http://ja.wikipedia.org/wiki/Wikipedia https://mail.google.com/mail/ ftp://ftp.iij.ad.jp/pub/linux/centos/5/os/x86_64/ ホスト名はドメイン名またはIPアドレス http://124.83.167.215/hl
HTTP (HyperText Transfer Protocol) Webを支える基盤プロトコル(通信規約) ほぼすべてのWebサービスはHTTPを利用 暗号化されたHTTP = HTTPS クライアント=サーバモデル クライアント(ブラウザとか)からのリクエストを受けて、サーバがコンテンツをクライアントに返す いろんなコンテンツを送れる テキスト、画像、動画、プログラム、XML、… サーバがコンテンツをどう作るかは関知せず ディスクにしまってあるコンテンツをそのまま書き出してもよい (静的コンテンツ) プログラムでコンテンツをその場で作ってしまってもよい(動的コンテンツ)
静的コンテンツの場合 クライアント (ブラウザソフト) サーバ (www.mi-tan.jp) URLの入力 インターネット HTTPサーバ GET / HTTP/1.1 Host: www.mi-tan.jp User-Agent: Mozilla/5.0 ….. クライアント (ブラウザソフト) サーバ (www.mi-tan.jp) URLの入力 インターネット HTTPサーバ コンテンツの表示 HTTP/1.1 200 OK Date: Tue, 06 Apr 2010 13:14:32 GMT Server: Apache Content-Type: text/html <html> <head> <title>マイニング探検会(マイタン) - 図書館の未来を探る勉強会 -</title> </head> <body class=“mainPage”> … </body> <html> <head> <title>マイニング探検会(マイタン) - 図書館の未来を探る勉強会 -</title> </head> …
動的コンテンツの場合 クライアント (ブラウザソフト) サーバ (search.yahoo.co.jp) 検索クエリーの入力 インターネット GET /search?p=マイニング探検会&ei=UTF-8 HTTP/1.1 Host: search.yahoo.co.jp User-Agent: Mozilla/5.0 クライアント (ブラウザソフト) サーバ (search.yahoo.co.jp) 検索クエリーの入力 インターネット HTTPサーバ コンテンツの表示 HTTP/1.1 200 OK Date: Tue, 06 Apr 2010 13:14:32 GMT Server: Apache Content-Type: text/html <html> <head> <title>「マイニング探検会」の検索結果 - Yahoo!検索</title> </head> <body> … </body> 検索エンジンサーバ 検索インデックス
HTTPリクエストのメソッド GET POST URL埋め込み形式で情報を送ることができる http://search.yahoo.co.jp/search?p=マイニング探検会&ei=UTF-8 サイズ制限あり (Internet Explorerでは2083bytes) ブラウザから簡単に試せる POST さまざまなコンテンツを送ることができる ファイルをアップロードすることも可能 サイズ制限なし 利用が少し面倒
XML (eXtensible Markup Language) <?xml version="1.0" encoding="UTF-8"?> <レシピ 名前="パン" 準備時間="5分" 調理時間="3時間"> <料理>基本的なパン</料理> <材料 量='3' 単位='カップ'>小麦粉</材料> <材料 量='0.25' 単位='オンス'>イースト</材料> <材料 量='1.5' 単位='カップ' 状態="温かい">水</材料> <材料 量="1" 単位="ティースプーン">食塩</材料> <要領> <手順>全ての材料を一緒にして混ぜます。</手順> <手順>十分にこねます。</手順> <手順>布で覆い、暖かい部屋で1時間そのままにして おきます。 </手順> <手順>もう一度こねます。</手順> <手順>パン焼きの容器に入れます</手順> <手順>オーブンに入れて温度を180℃にして30分間 焼きます。 </要領> </レシピ> マークアップ言語の規格 電子的文書を記述する規格SGMLの後継 「タグ」で構造を表現できる 応用例 ニュースリーダー (RSS) 電子書籍 (Open eBook) オフィス文書
SOAPとREST SOAP (Simple Object Access Protocol) REST (Representational State Transfer) XMLで記述されたSOAPメッセージを送信 利点 HTTP以外も利用可能 (SMTP) 複雑な指示が送れる 欠点 利用が面倒 キャッシュ不可 URLを情報送信の手段として利用 利点 簡単に利用できる キャッシュ可能 欠点 HTTPに依存 あまり複雑な指示は送れない
紹介するWeb API Amazon Twitter CiNii (国立情報学研究所) PORTA (国立国会図書館) レファレンス共同データベース (国立国会図書館) J-Global (科学技術振興機構)
Amazon Product Advertising API 商品検索 検索条件による絞り込み 商品画像の表示 商品情報の取得 レビュー・ランキング・関連商品・販売状態などの取得 アフィリエイトとの連携 (Amazonアソシエイト) サーバーサイド SOAPまたはRESTが利用可能 APIキーの発行が必須 http://developer.amazonwebservices.com/connect/kbcategory.jspa?categoryID=19 ※OpenSearchはAPIキーなしで利用可能
Twitter API Twitterのアプリケーションを作るために必要な一通りの機能を提供 3種類のAPI タイムラインの取得 ステータスの取得 アカウント情報の取得 発言の投稿 3種類のAPI REST 2種類 (歴史的経緯) Streaming GETメソッド (メッセージ投稿など一部はPOST) 公開ユーザのタイムライン取得以外は認証が必要 ドキュメント http://apiwiki.twitter.com/ 利用例 (自分のタイムライン) http://api.twitter.com/1/statuses/home_timeline.xml
CiNii API NII論文検索の基本的な機能を提供 GETメソッド REST準拠 フォーマット 認証不要 ツールバーなどからの論文・著者検索 論文・著者詳細情報の取得 CiNii内のコンテンツへの直接リンク GETメソッド REST準拠 フォーマット 検索: RSS or Atom 詳細情報: RDF 認証不要 ドキュメント http://ci.nii.ac.jp/info/ja/if_link_receive.html 利用例 (RSSフィード) http://ci.nii.ac.jp/opensearch/search?q=長尾真&range=0&sortorder=1&start=1&count=20&format=atom ※OpenSearchが利用可能
PORTA API NDL PORTAコンテンツの検索とハーベスティング機能を提供 GETメソッド/POSTメソッドが混在 REST/SOAP/Z39.50が混在 認証不要 用途 プロトコル 返却形式 検索 OpenSearch XML(RSS2.0) OpenURL HTML画面 SRU XML SRW XML(SOAP) Z39.50 SUTRS データのダウンロード (ハーベスト) OAI-PMH
レファレンス共同データベースAPI 詳細検索画面と同等の検索機能を提供 GETメソッド REST準拠 フォーマット 認証不要 キーワード検索 (boolean) 館ごとの検索指定 アクセス数ランキング GETメソッド REST準拠 フォーマット XML (独自形式) 認証不要
J-GLOBAL Web API 4つの基本情報を検索可能 取得可能な検索結果 WebAPIキーの取得が必要 「文献」「科学技術用語」「科学物質」「資料」 J-GLOBAL サイトの検索結果一覧と同等レベルの情報を取得可能 取得可能な検索結果 HTML形式 JSON形式 Ajaxで利用可能 WebAPIキーの取得が必要
APIの利用制限 APIキーの発行を受けないと利用できないものがある 呼び出し頻度に注意 利用規約 過度の呼び出しはサーバに負荷をかける アクセス制限を受けることも 利用規約 非営利利用に制限されているもの リンクを張ることが義務づけられているもの(Amazonなど)
Web API提供の考え方 なぜ公開するのか? 何を公開し、何を公開しないか? どうやって普及させるか? お互いハッピーになれるかも? cf. カーリルのスクレイピング 何を公開し、何を公開しないか? 個人情報はNG レコメンデーションは? どうやって普及させるか? APIコンテスト アフィリエイト 開発者(ベンダー含む)との関係をどう築いていくか? サービスとしてどう継続していくか? 標準をどう作っていくか? 営利と非営利の境界線 図書館とWeb書店はどこまで連携可能か?