更新:ゆにかねっと搭載

Next-Lのキックオフミーティングが楽しそうだなーと思いつつ東北の片隅で所蔵館マップを直しております。


で予告してた,ゆにかねっと搭載の詳細について。



ポイントとしては前回書いたHTTP_Client。これでPHPスクリプト上でもセッション管理しながらPOSTしたりページを取得したりできる。ゆにかねっとはセッション管理できないとページが見られないのがネックで避けてたので,ここさえ越えればすでに解決したようなもの。


ゆにかねっとは各所蔵館にWebcatのFAナンバーのようなわかりやすいIDがないので,所蔵館の名前でマッチングさせる。所蔵館名は書誌のページから正規表現で取得。idとかnameとかわかりやすい目安がついてないので怪しかったが,一応なんとか所蔵館名のリストが取得できるような式ができたのでOK。


一方,この所蔵館名でマッチングできるように座標等を含むデータベースを作る。住所の載ってる所蔵館リストがないのでどうしようかなー,と思ったが,図書館の名前をgeocoding.jpあたりにかければさらっと座標がとれるのを確認して一つずつチェック。他の目録でやってるような所蔵館の利用条件等へのリンクをどうしようか迷ったが,各館のサイトにリンクさせることにして解決。なおマッチングについては,ゆにかねっとの目録上で表示される館名とデータ提供館リストの館名が同じだったので,これでマッチングOK。


手こずったのは書誌へのパーマネントなリンクをどう作るか。一応ゆにかねっとでもそういうリンクを作れないことはないのだけれど(tcdっていう書誌のIDがあるらしい),一回セッション作らんと動かんし,ISBN検索で一個しか書誌がないとダイレクトにとんじゃうのでtcdが取得できなかったりと面倒な要素が多い。
いろいろいじってたら unicanet.ndl.go.jp/psrch/redirect.jsp?type=psrch&isbn={isbn} な感じで,検索フォームにISBNを代入した状態で検索画面に飛べることが判明。この状態でsubmitしてもらえばISBNで検索できる,ってのでお茶を濁しておく。後で暇になったら,いっそ各館のOPACでISBN検索させる形式に変えてもいいかも。


表示についてはこれまでのを参考にJavascriptを組む。同じ処理を何度も作るのもおかしいのでいろいろ整理。でもJavascriptの得意な人からみたらきっと雑&無駄多し。


と,以上のような感じ。
妥協した書誌リンクの方法を除けば,たいして面倒ではなかったです。


加えて今日になって直したところとして,ある本を検索した後にページ遷移せず(=Ajaxで)別の本を検索させたあとに地図をズームすると,前回検索したマーカーが復活してしまうバグを発見。どうもGMarkerManagerの仕様らしい。
ちょっと試行錯誤したところ,以下の記述を発見。

わかってて使うのなら良いのだけどこれ、map.clearOverlays() でアイコンを消しても、地図の倍率を変えるとまたアイコンが復活する、という状態になるので注意。普通の map.addOverlay(marker); で追加した場合は、map.clearOverlays() した後は倍率を変えても復活しなかったのだけど。

これは、GMarkerManager が zoomend イベントにアイコン再描画を登録するのが原因。このイベントだけ消す方法、どうやってやるんだろう。わからなかったので、

GEvent.clearInstanceListeners(map);

で全部消して、手動で登録したイベントを再登録する、みたいな方法をとってみたが・・・。

http://e8y.net/blog/2006/12/06/p137.html


GMarkerManagerが画面ズーム時のイベントを登録してて,オーバレイを初期化してもイベントが残ってるせいで,ズームすると復活するらしい。で,それらのイベントを初期化してやれば復活しない,ってことらしい。
これで完璧なのかは不明だが,試しにclearInstanceListenersを入れてみたら古マーカーが復活しなくなったのでとりあえず様子見。


忘れてたので追記。

XMLはこんな感じっす。
http://myrmecoleon.sytes.net/map/liblist_un.php?isbn=480671335X


今まであげてきたのはこんな感じ。(ちょっと直しました)
http://myrmecoleon.sytes.net/map/liblist_alis.php?isbn=480671335X
http://myrmecoleon.sytes.net/map/liblist.php?isbn=480671335X


整理してたら処理がかぶってきたので,いい加減一つのスクリプトにまとめようかと考え中。