先生、Buzznet APIの吐くXMLが時々変です!特にjpの方
今日はひたすら写真共有サイトbuzznetのAPIをPHPから使うことに時間を費やした。
アップロードは難なく終了。アップロード時の日本語文字化けがなかなか厄介だったが、原因は分からないけどとりあえず動くようにはなった。mb_convert_encodingで、対象文字列のエンコーディングからUTF-8に変換した文字列を、ISO-8859-1からUTF-8に変換する関数を通すとちゃんと日本語が表示されるというなぞ仕様。buzznetが悪いのか、それともPEARのXML_RPCが悪いのかは不明。超暇なときにでも原因究明するかも。
一番悩んだのが、buzznet.jpにgetGalleryをsendして帰ってくるXMLの中身が最強に意味不明な状態なところ。2599180となるべきところが、		�とかなってんの。もはやアスキーコードですらない。文字列なんかは壊滅的。http://img.buzznet.com/assets/users10/haya/default/msg-11454268703-2.jpgとなるべきところが、00とかなってんの。もう見てらんない。
buzznetは.comでも.jpでもデータベースが共通っぽいので、ダメ元で.comの方にsendしてみたら、なんとちゃんとデータが帰ってきたじゃありませんか!日本はまだまだαってことなのかな。
.comのほうから帰ってきたデータは、英語の文字列はそのままだけど、例えば日本語の文字列は「アップロードテスト」が「アップロードテスト」になっている。.jpからのデータと違って、ちゃんとアスキーコードになってるんだけど、このままPHPのXMLパーサに食わせるとぐちゃぐちゃに文字化けして出力されてしまうので、PEARのRPC.phpに3行ほど書き加える。
while(preg_match('/([0-9]+);/', $data, $match)){ $data = str_replace($match[0], chr($match[1]), $data); }
これでbuzznetを使う分には問題なくなったけど、特殊文字をわざと???;で書いてある場合に、それまでまとめてchr関数に入れてしまうので宜しくない気がする。文字コードとか、そこら辺関係よくわからんです。