awkでcsvファイルをXML形式にする

GoogleマーチャントにXML形式で商品情報を登録すると、Googleショッピングにリストされるようになる。Yahoo!ストアに出店していればほぼ漏れなくリストアップされるらしいが(楽天は除外されているっぽい)、Yahoo!ストアに出店していなくてもリストアップされるのは嬉しいことではないだろうか?

XMLに含ませる最低限必要な情報は、EC-CUBEがGoogleショッピング向けのRSSフィードを生成出来るようになったとの情報から参考にさせてもらった。Googleのオフィシャルなサンプルを参考にさせてもらって極シンプルなRSSフィード(XMLデータ)を作ってみる。

  • 商品名
  • 商品ページのURL
  • 商品の説明
  • 商品画像のURL
  • 商品の販売価格
  • 商品の状態(中古・新品)
  • 商品の管理ID

これらの情報を持つCSVファイルを用意すれば、あとは下記の情報をawkスクリプトに書き加えるだけでXMLファイルが生成できた。

  • サイト名
  • サイトURL
  • サイトの説明文

awkの使い方は細かく説明しないが、プログラミング出来ない私が(苦笑)awkの仕組みを活用してprintという単純なコマンドだけでXML形式で書き出す事ができた。参考になれば幸いだ。

make_xml.awk

BEGIN {
	FS=",";
	OFS="\n"
	print "<?xml version=\"1.0\"?>";
	print "<rss version=\"2.0\" ";
	print "xmlns:g=\"http://base.google.com/ns/1.0\">";
	print "<channel>";
	print "<title>ラケットプラザ本店</title>";
	print "<link>http://www.racket.co.jp/</link>";
	print "<description>ラケットスポーツ用品の総合ショップ</description>";
}

{
	print "<item>";
	print "    <title>"$1"</title>";
	print "    <link>"$2"</link>";
	print "    <description>"$3"</description>";
	print "    <g:image_link>"$4"</g:image_link>";
	print "    <g:price>"$5"</g:price>";
	print "    <g:condition>\"new\"</g:condition>";
	print "    <g:id>"$6"</g:id>";
	print "</item>";
}
END {
	print "</channel>";
	print "</rss>";
}Code language: PHP (php)

私が用意したCSVファイルはカンマ区切りだったのでFSでカンマを指定し、OFSは改行を指定している。もちろんCSVの並びによって$1~$6は調整する必要があると思われる。

実行のしかたは下記を参考にどうぞ。Linux環境下で作ったが、Windows7上のCygwinでもきちんと動いた。

$ awk -f make_xml.awk data.csv > data_feed.xml

文字数の関係で2商品のサンプルしか示せないがCSVファイルに1000商品あれば1000商品分のXMLデータが生成されるはず。実行結果は下記の通り

<?xml version="1.0"?>
<rss version="2.0"
xmlns:g="http://base.google.com/ns/1.0">
<channel>
<title>ラケットプラザ本店</title>
<link>http://www.racket.co.jp/</link>
<description>ラケットスポーツ用品の総合ショップ</description>
<item>
<title>"ダイヤソックス/Lサイズ(39410)"</title>
<link>"http://www.racket.co.jp/shop/item/8947/8947.html"</link>
<description>"<-仕様と特長:>2色使いのダイヤ柄がおしゃれ<-/仕様と特長:>"</description>
<g:image_link>"http://www.racket.co.jp/phpthumb/index.php?img=8947_1.jpg/item/"</g:image_link>
<g:price>"840"</g:price>
<g:condition>"new"</g:condition>
<g:id>"TSP-39410-L"</g:id>
</item>
<item>
<title>"Jersey Half Pant(WRAJBS10)"</title>
<link>"http://www.racket.co.jp/shop/item/21483/21483.html"</link>
<description>"<-仕様と特徴:>吸汗速乾<-/仕様と特徴:>"</description>
<g:image_link>"http://www.racket.co.jp/phpthumb/index.php?img=21483_1.jpg/item/"</g:image_link>
<g:price>"2887"</g:price>
<g:condition>"new"</g:condition>
<g:id>"WRAJBS10"</g:id>
</item>
</channel>
</rss>Code language: HTML, XML (xml)
created by Rinker
¥526 (2025/8/30 15:48:12時点 Amazon調べ-詳細)

コメント

タイトルとURLをコピーしました