csv

Drupal で郵便番号データを自動更新するための設定

10数万件ある郵便番号CSVデータを定期的に取得して、Drupalにインポートするための設定。

月末にデータ更新されているので、毎月5日にCSVを取得するようにOSのcronを設定し、月次のDrupal cronで1時間おきに500件ずつインポートして約10日で完了。

コンテンツタイプは作成済みの前提で、以下に設定を記述する。

Feeds設定 Read more about Drupal で郵便番号データを自動更新するための設定

コマンドラインで先頭行にCSVヘッダーを追加するテクニック

ヘッダーなしのCSVファイル

$ cat pricelist.csv 
1,ココナッツ,200
2,いちご,300
3,ぶどう,500

sedコマンドを使用し、CSVテキストファイルの先頭行にヘッダーを追加して上書きします。

$ sed -i '1iid,name,price' pricelist.csv
$ cat pricelist.csv
id,name,price
1,ココナッツ,200
2,いちご,300
3,ぶどう,500

catコマンドの場合。別ファイルの挿入などに便利です。 Read more about コマンドラインで先頭行にCSVヘッダーを追加するテクニック

コマンドラインでHTMLをCSV変換する方法

dtとddタグで作成された表形式のデータを、コマンドラインツールでCSV変換します。
$ curl -s http://doramahjong.com/tournament/ | hxnormalize -x | hxselect -s '\n' -c "table.catagoryTable" "dl" | lynx -stdin --dump  | sed -e 's/^\s\+//' | awk 'BEGIN { FS="\n"; RS="" } { print $1 "," $2 "," $3 }'
風花雪月杯,2016年11月22日 18:00:00,107 Read more about コマンドラインでHTMLをCSV変換する方法

SQLを使用してDrupalのデータをMySQLからCSV出力する方法

データ件数が数万件を超えるなど大量データを扱う場合、phpを経由するViewsやdrushコマンドは負荷が高く出力が困難なので、APIやSQLコマンドを使用します。

ノード情報をCSV出力するためのSQL文 - 都道府県コンテンツタイプの例 Read more about SQLを使用してDrupalのデータをMySQLからCSV出力する方法

pasteコマンドを使用して、複数ファイルを列方向に結合してCSVデータを作成する方法

$ cat >id.txt <<EOF
001
002
007
EOF
$ cat >name.txt <<EOF
okinawa
tokyo
james
EOF
$ cat >color.txt <<EOF
blue
red
gold
EOF
$ paste -d"," id.txt name.txt color.txt | tee list.txt
001,okinawa,blue
002,tokyo,red
007,james,gold Read more about pasteコマンドを使用して、複数ファイルを列方向に結合してCSVデータを作成する方法

フィールドを指定してAPIから取得した都道府県JSONデータを、jqコマンドでラベルをつけてJSONデータとして再出力する方法

curlを使用してDrupalサイトにログイン、Web APIからJSONデータを取得し、jqコマンドで取得フィールドにラベルをつけてJSON形式で出力。 Read more about フィールドを指定してAPIから取得した都道府県JSONデータを、jqコマンドでラベルをつけてJSONデータとして再出力する方法

Pages