リンクシェアのマーチャンダイザーデータの取得ツールを作成
ASPのリンクシェアで提供している、マーチャンダイザーという機能があります。
ECサイトの商品データを、CSVファイルにて一括取得出来るという、とても優れた仕組みであります。
クロスオーバーサーチという商品検索APIも公開されているのですが、データを自サイトに合わせて加工する必要があるため、未だに私は旧式のマーチャンダイザーを愛用しております。
マーチャンダイザーを使用し、商品データのCSVファイルを取得する場合、数ステップの工程があります。
1.FTPサーバに接続し、商品データの圧縮ファイルをダウンロード
2.圧縮ファイルを解凍し、CSVファイルへ変換
3.UTF-8固有の特殊文字を置換し、文字化け防止加工を施す
4.UTF-8からEUCへ文字コード変換(レンタルサーバがEUCのため)
5.DBへ商品データ取り込み
です。
本当は時代の流れとしてUTF-8に統一したいと思っているのですが、さくらのレンタルサーバがEUCのままでして…。
プログラム的に対応は可能なのですが、無駄なオーバーヘッドを増やしたくありませんので、こちらもEUCでソースを書いております。
その際に問題となるのが、UTF-8固有の文字ですね。
EUCでは存在しないものを使用してある場合、文字コード変換時に該当文字は文字化けしてしまいます。
よって変換前に、EUCに存在する類似の文字に置換する必要があるのです。
今までは5番の作業のみプログラム化しておりましたので、1番から4番までは手作業でした。
月に1度程度の作業ですので、今までは放置していたのですが、これから作成予定である新規サイトは膨大な数の商品データを扱うため、さすがに手作業では辛いと考えまして。
そこで、1番から4番までを自動で行うためのプログラムを作成しました。
使用する技術に難しい部分はありませんので、半日ほどで作れると思ったのですが、意外に躓く要素が多くて1日がかりになってしまいました。
まずは、2番の圧縮ファイルの解凍処理。
私の保持するバイブルに、サンプルがあるとばかり思っていたのですが、実際はそんなものは存在せず…。(汗)
慌ててネットを駆使して調べまくります。
ただ、ネット上に転がっているサンプルですと一気に圧縮ファイルを解凍する方法であったため、大きなファイルを解凍しようとしますと、PHPのバッファがパンクしてしまいます…。
仕方が無いのでPHPのリファレンスを参照し、1行ずつ取得する方法を見つけました。
これであれば、オーバーフローの心配がほぼありません。
次に躓きましたのは、3番の特殊文字の置換処理です。
置換命令文に該当の文字そのものを書いていたのですが、置換処理がなぜか不完全に…。
同じ文字でも、行によって置換されたりされなかったり…。
命令文そのものの動作ですので、これはさすがに私にはタッチ出来ない部分です。
おそらく、前後の文字によって解釈が違ってきてしまうのでしょう。
そこで、該当文字を文字コードに変換し、文字コードの置換へと変更しました。
そうすることで、ものの見事に置換が行われるようになりました。
ふぅ、やっと完成です。(笑)
これによりボタンを押すだけで、勝手に複数ECサイトからダウンロードを行い、勝手に圧縮ファイルを解凍し、勝手にマズイ文字を置換し、勝手に文字コードを変換し、勝手に所定のフォルダへファイルを格納する。
…かなり便利です。
これでまた1つ、作業の効率化を図ることが出来ました。
ひとつひとつは小さなことですが、この積み重ねが大事だと思います。

By あしおか, 2009 年 8 月 17 日 @ 8:50 PM
文字変換が面倒だったのでUTF-8のまま使ってました。
オーバーヘッドは考えてなかったなぁ。^^;
うちは週単位にやってるので、前回との差分を取得してDBアップデートしてます。
By HIGH LANDER, 2009 年 8 月 17 日 @ 10:02 PM
ども、HIGH LANDERです。
差分アップデートとは凝ったことをしておりますね…。
わたしもそれが理想なのですが、DBの形式をかなりカスタマイズしている+複数ECサイトのデータを混ぜてしまっている関係で、スルーしております。
By リーダー, 2009 年 8 月 18 日 @ 6:21 AM
う、うらやましくなんかないんだからねっ
By HIGH LANDER, 2009 年 8 月 18 日 @ 11:36 AM
いやぁ、良いツンデレぶりです。
…もしかしたらデレは無いかもしれませんが。(笑)