bidders/ビッダーズ Webサービスが返すXMLでパースエラー
2006.10.30
biddersが提供するアフィリエイト2.0Webサービス(A2WS)を使ったときの問題について.
A2WS利用するとアフィリエイト2.0に参加する企業の商品データをXMLデータとして取得できます.
商品詳細情報の取得ができるようになりましたにあるように,商品詳細情報もXMLで取得できるようになりました.
ところが,この商品詳細情報を出力するオプションを使うとXMLパーサが「invalid token」とエラーメッセージを出し,パースできないという現象が出始めました.XMLのパースにはPython2.4.2 とElementTreeを使っています.
調査してみると,商品詳細情報を表すタグ<ItemComment>~</ItemComment>の末尾に^Q, ^P等の制御コードの文字が含まれている事が原因らしい.必ず末尾に含まれることから,日本語などの2バイト(?)コードの1バイト目だけ残っている状態のようだ.
これでは目的が達成できないので,あれこれ苦心した結果末尾の制御コードを正規表現で取除くという,やや強引な解決方法でしのいだ.
以下そのコード:
import re xml = re.sub(r'[x00-x1F]s*</ItemComment>', r'</ItemComment>', xml)とりあえず,これで何とかなっている. 参考にパースエラーの出るXMLを出力するURLの例を示しておく. http://ws.a20.jp/bin/aws?prog=3476&sort=sum,D&ipp=100&page=3&cmt=Y 商品が追加されると,エラーが出なくなるかもそのときはpage=<nn>ってパラメータを追加してみてください. Firefox1.5.0.7でアクセスするとFirefoxに内蔵(?)のXMLパーサが次のようなエラーメッセージを出しました.
XML パースエラー: 整形式になっていません。 URL: http://ws.a20.jp/bin/aws?prog=3476&sort=sum,D&ipp=100&page=3&cmt=Y 行番号: 94, 列番号: 259:2007/7/14 修正: エラーの出るURLを(わざわざ)見つけた.エラーメッセージも修正した.(ぼくって意地悪)
カテゴリー:技術情報メモ