😀
直近一週間の日本地震XMLをjqで処理してCSVにする
何?
NHKの地震情報API(XML形式)をjqでCSVに変換し書き出す.
スクリプト言語で書くよりコマンドラインでjqを使うとシュッと終わるのでおすすめ.
書き出したCSVはExcelで処理するなりPythonに食わせるなりできる.
API
素のままだとShift-JISなので扱いやすいUTF-8に変換する.
$ curl -s https://www3.nhk.or.jp/sokuho/jishin/data/JishinReport.xml \
| iconv -f sjis -t utf8
JishinReport.xml
<?xml version="1.0" encoding="UTF-8"?>
<jishinReport>
<record date="2021年02月28日">
<item time="13時14分ごろ" shindo="1" url="https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210228131405_20210228131703.xml">千葉県東方沖</item>
<item time="11時20分ごろ" shindo="2" url="https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210228112012_20210228112403.xml">大阪府北部</item>
<item time="09時40分ごろ" shindo="2" url="https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210228094024_20210228094308.xml">島根県東部</item>
</record>
...(省略)...
<record date="2021年02月22日">
<item time="11時57分ごろ" shindo="3" url="https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210222115717_20210222120040.xml">和歌山県北部</item>
<item time="11時23分ごろ" shindo="1" url="https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210222112327_20210222112619.xml">福島県沖</item>
<item time="10時56分ごろ" shindo="3" url="https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210222105604_20210222110001.xml">根室半島南東沖</item>
</record>
</jishinReport>
CSVにする
xq
の導入
まずXMLをJSONパーサであるjqで扱うには、jqのXMLラッパーxq
を用いる.
xq
はYAMLラッパーであるyq
に含まれる.
# インストール
$ pip install yq
パース
各カラムはdate,time,place,shindo,datasource
jq
は各データを[head1, ..., h5], [[col1, ..., c5], [c1, ..., c5], ...][]|@csv
とするとヘッダ付きCSVを書き出せる.
$ curl -s https://www3.nhk.or.jp/sokuho/jishin/data/JishinReport.xml \
| iconv -f sjis -t utf8 \
| xq -r '
[
"date",
"time",
"place",
"shindo",
"datasource"
],
(
[
.jishinReport.record[]
| ."@date" as $i | .item
| if type=="object" then [.] else . end
| map(.+={"@date":$i})[]
| [
."@date",
."@time",
."#text",
"震度"+."@shindo",
."@url"
]
] | reverse
)[] | @csv' > res.csv
res.csv
"date","time","place","shindo","datasource"
"2021年02月22日","10時56分ごろ","根室半島南東沖","震度3","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210222105604_20210222110001.xml"
"2021年02月22日","11時23分ごろ","福島県沖","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210222112327_20210222112619.xml"
"2021年02月22日","11時57分ごろ","和歌山県北部","震度3","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210222115717_20210222120040.xml"
"2021年02月23日","04時42分ごろ","茨城県北部","震度2","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210223044248_20210223044539.xml"
"2021年02月23日","06時22分ごろ","福島県沖","震度2","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210223062244_20210223062534.xml"
"2021年02月23日","06時40分ごろ","福島県沖","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210223064051_20210223064339.xml"
"2021年02月23日","07時05分ごろ","長野県北部","震度2","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210223070550_20210223070820.xml"
"2021年02月23日","09時36分ごろ","紀伊水道","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210223093601_20210223093846.xml"
"2021年02月23日","09時52分ごろ","福島県沖","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210223095217_20210223095523.xml"
"2021年02月23日","16時09分ごろ","伊予灘","震度3","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210223160907_20210223161234.xml"
"2021年02月24日","00時56分ごろ","茨城県南部","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210224005613_20210224005907.xml"
"2021年02月24日","02時39分ごろ","福島県沖","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210224023905_20210224024140.xml"
"2021年02月24日","08時35分ごろ","鹿児島県薩摩地方","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210224083552_20210224083907.xml"
"2021年02月24日","09時54分ごろ","千葉県南部","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210224095431_20210224095703.xml"
"2021年02月25日","01時12分ごろ","広島県北部","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210225011229_20210225011523.xml"
"2021年02月25日","07時26分ごろ","択捉島付近","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210225072646_20210225073009.xml"
"2021年02月25日","15時55分ごろ","熊本県熊本地方","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210225155514_20210225155813.xml"
"2021年02月25日","19時18分ごろ","千葉県北東部","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210225191851_20210225192120.xml"
"2021年02月25日","22時57分ごろ","和歌山県北部","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210225225753_20210225230139.xml"
"2021年02月26日","04時45分ごろ","秋田県沖","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210226044543_20210226044843.xml"
"2021年02月26日","07時13分ごろ","福島県沖","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210226071317_20210226071639.xml"
"2021年02月26日","10時16分ごろ","和歌山県北部","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210226101617_20210226101925.xml"
"2021年02月26日","13時04分ごろ","福島県沖","震度2","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210226130433_20210226130732.xml"
"2021年02月26日","14時03分ごろ","福島県沖","震度2","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210226140313_20210226140553.xml"
"2021年02月26日","18時42分ごろ","大分県中部","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210226184229_20210226184543.xml"
"2021年02月26日","19時18分ごろ","福島県沖","震度2","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210226191838_20210226192148.xml"
"2021年02月26日","20時31分ごろ","青森県東方沖","震度3","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210226203145_20210226203448.xml"
"2021年02月27日","00時33分ごろ","福島県沖","震度3","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210227003337_20210227003720.xml"
"2021年02月27日","02時04分ごろ","福島県沖","震度3","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210227020358_20210227020800.xml"
"2021年02月27日","05時48分ごろ","トカラ列島近海","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210227054846_20210227055307.xml"
"2021年02月27日","06時01分ごろ","トカラ列島近海","震度3","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210227060107_20210227060456.xml"
"2021年02月27日","06時12分ごろ","トカラ列島近海","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210227061230_20210227061618.xml"
"2021年02月27日","10時37分ごろ","埼玉県南部","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210227103729_20210227104020.xml"
"2021年02月28日","09時40分ごろ","島根県東部","震度2","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210228094024_20210228094308.xml"
"2021年02月28日","11時20分ごろ","大阪府北部","震度2","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210228112012_20210228112403.xml"
"2021年02月28日","13時14分ごろ","千葉県東方沖","震度1","https://www3.nhk.or.jp/sokuho/jishin/data/JSA0210228131405_20210228131703.xml"
結論
お手軽
Discussion