先日の記事(PORTAのAPI使ってみた、けど。)のあと、いろいろ試してようやくまともに書誌情報が取得できたので、報告します。
解説すると長くなるので、とりあえずPHPのサンプルを各種。プログラマー各氏にはこのほうが話が早いかも。
FC2ブログの仕様上、拡張子がphpだとアップ出来ないのでtxtにしてます。
PORTAへのリクエストでは、書誌情報のスキーマがdcかdcndl_portaか選べ、そのパッキング方法をxmlとstringから選べる。はじめどれがいいかわかんなかったので、都合この組み合わせ4つのサンプルを用意した。
- スキーマ:dc パッキング:xml
porta_dc_xml.txt - スキーマ:dc パッキング:string
porta_dc_string.txt - スキーマ:dcndl_porta パッキング:xml
porta_dcndl_xml.txt - スキーマ:dcndl_porta パッキング:string
porta_dcndl_string.txt
また、先日の記事の追記でも書いたけど、PHPのSimpleXMLだと名前空間の扱いがめんどくさいので、名前空間付きの要素名を適当に置換するバージョンも2つのスキーマ向けに作った。
- スキーマ:dc パッキング:xml 名前空間付きの要素名を置換
porta_dc_replace.txt - スキーマ:dcndl_porta パッキング:xml 名前空間付きの要素名を置換
porta_dcndl_replace.txt
結局、最後のやつが一番使いやすい気がします。
あと、おまけ。
- 最後のやつの出力サンプル
porta_dcndl_replace.html
にしても、dc:identifierの種類が属性を参照しないとわからんとか、全角英数字を使ってるとか、複数の著者名と役割表示が1つの文字列にまとめられてるとか、Amazonに比べると扱いにくいこと扱いにくいこと。既存の目録規則やDublin Coreにとらわれずに、もっとまともな構造のデータで出力してくれると嬉しいんだけどなあ。


ラボ長さま、初めまして。サンプルありがとうございます!
おかげで「SOAPって何?」な自分でも無事XMLを
取得できました。
ただ、「$req = array(‘version’…);」に’’sortKeys’ => ‘title,,0′
と追加してソートをしようとしているんですが
どうやっても出力順が変わりません。
さくさくとソートができればぐっと実用的になると思うんですが・・
ラボ長さまはソートできていますか?
Cloudさん、はじめまして。
たしかにsortKeysを指定してもソートできないですね。私もいろいろ試してみましたが、まだできてません。
ちょっと今後も調べてみます。
お返事ありがとうございます。
私だけではないと分かったので、思い切って
PORTAのページから直接問い合わせてみました。
即返事が来て正常に動作しないことを確認したので
対応していただけるとのことでした。
しばらく待てばいいようですね。
こんにちわ、はじめまして。貴重な情報、ありがとうございます。
「スキーマ:dcndl_porta パッキング:xml 名前空間付きの要素名を置換」を基に
ISBNコードから書籍情報を取得してDBに入れるスクリプトを作成しました。
問題なく動作はするのですがPORTAからデータの取得まで5秒〜30秒ほどかかってしまいます。
サーバーの応答速度の問題だとは思いますが、リクエストを変更するなどの方法で
改善する方法はあるのでしょうか。