xmlならばxpathコマンドで個々の要素に分解することができます。
具体的には
title=`\
cat $file |\
xpath -q -e "//item[${item}]" 2>/dev/null |\
xpath -e "//title/text()" 2>/dev/null `
で変数titleに上から$item番目の見出しを代入することができます。
データベース名life_logにテーブルを作成しました。フィールドは
title 見出し、link 記事本文のURL、guid 同左、pubDate 配信日時、description 記事概要、insertDate データベース登録日時
としました。
MYSQLにinsertで登録した後、
select title,min(pubDate),max(insertDate) from nhk_main group by title order by max(insertDate)-min(pubDate) desc limit 20;
で過去24時間のうちに長い時間掲載されていたニュース上位20を検索してみました。
インドネシアのオラウータンの話題が、最も長い時間掲載されていたみたいです。
見出し | 配信開始日時 | 掲載終了 | |
1 | 珍しい白いオランウータン保護 インドネシア | 2017-05-16 22:05:00 | 2017-05-17 09:00:00 |
2 | 眞子さま 同級生とご婚約へ | 2017-05-16 19:01:00 | 2017-05-17 05:00:00 |
3 | 自衛隊機墜落 発見の4人は自衛隊員 全員死亡 | 2017-05-16 18:21:00 | 2017-05-17 04:00:00 |
4 | 文科省の審議会 新設獣医学部に「課題あり」と報告 | 2017-05-16 21:32:00 | 2017-05-17 04:00:00 |
5 | 複数ワクチン混ぜる誤った方法で乳幼児に予防接種 | 2017-05-16 18:42:00 | 2017-05-17 01:00:00 |
6 | テニス不正監視団体 日本の元プロテニス選手を永久資格停止 | 2017-05-16 22:58:00 | 2017-05-17 04:00:00 |
7 | 北朝鮮 安保理声明に反発「全面的に排撃する」 | 2017-05-16 22:03:00 | 2017-05-17 01:00:00 |
8 | 眞子さまご婚約へ ゆかりの人から祝福の声 | 2017-05-17 05:06:00 | 2017-05-17 11:00:00 |
9 | 眞子さまご婚約へ 小室さん「時期来たら改めて説明」 | 2017-05-17 10:17:00 | 2017-05-17 15:00:00 |
10 | 野党4党 金田法相の不信任決議案を提出 | 2017-05-17 10:18:00 | 2017-05-17 15:00:00 |
11 | 高浜原発4号機 きょう 再稼働へ | 2017-05-17 06:28:00 | 2017-05-17 11:00:00 |
12 | 「大学入学共通テスト」最終案まとまる 記述式も | 2017-05-16 11:43:00 | 2017-05-16 16:00:00 |
13 | トランプ大統領がロシアに機密情報漏えいか 米紙報道 | 2017-05-16 11:49:00 | 2017-05-16 16:00:00 |
14 | 大規模サイバー攻撃 北朝鮮ハッカー集団使用のソフトと類似 | 2017-05-16 13:53:00 | 2017-05-16 18:00:00 |
15 | 「乃木坂46」ファンの教師が偽造学生証を提示か | 2017-05-16 12:00:00 | 2017-05-16 16:00:00 |
16 | 自民 二階幹事長 中国 習主席と会談 北朝鮮問題で連携を | 2017-05-16 14:05:00 | 2017-05-16 18:00:00 |
17 | 国連安保理 北朝鮮ミサイル発射で緊急会合へ | 2017-05-17 01:10:00 | 2017-05-17 05:00:00 |
18 | 「テロ等準備罪」野党4党が法相不信任決議案提出へ | 2017-05-17 05:11:00 | 2017-05-17 09:00:00 |
19 | トランプ大統領 ロシアに情報で与党からも問題視する意見 | 2017-05-17 06:16:00 | 2017-05-17 10:00:00 |
20 | 自衛隊機墜落 ボイスレコーダー発見急ぎ事故原因究明へ | 2017-05-17 07:23:00 | 2017-05-17 11:00:00 |
このスクリプトも前回のcrontabに登録してしまうと、1時間に1回自動的にRSSを取得してMYSQLに登録してくれるようになります。
#!/bin/bash
mysql << _SQL_
create database if not exists life_log default character set utf8;
use life_log;
create table if not exists nhk_main(
title varchar(200),
link varchar(100),
guid varchar(100),
pubDate datetime,
description varchar(1500),
insertDate datetime,
effect int default 1,
comment varchar(20)
);
_SQL_
echo `date -d "$date"` の配信です
file=~/nhk/`date -d "$date" '+%m%d%H%M'`.xml
num_item=`cat $file | grep \<item\> | wc -l`
for ( ( item=1; item<=${num_item}; item++ ) )
do
title=`\
cat $file |\
xpath -q -e "//item[${item}]" 2>/dev/null |\
xpath -e "//title/text()" 2>/dev/null |\
nkf `
link=`\
cat $file |\
xpath -q -e "//item[${item}]" 2>/dev/null |\
xpath -e "//link/text()" 2>/dev/null `
guid=`\
cat $file |\
xpath -q -e "//item[${item}]" 2>/dev/null |\
xpath -e "//guid/text()" 2>/dev/null `
pubDate=`\
cat $file |\
xpath -q -e "//item[${item}]" 2>/dev/null |\
xpath -e "//pubDate/text()" 2>/dev/null `
pubDate=`date -d "${pubDate}" +"%Y-%m-%d %H:%M"`
description=`\
cat $file |\
xpath -q -e "//item[${item}]" 2>/dev/null |\
xpath -e "//description/text()" 2>/dev/null `
mysql life_log << _SQL_
insert into nhk_main(title,link,guid,pubDate,description,insertDate)
value("${title}","${link}","${guid}","${pubDate}","${description}","${date}");
_SQL_
done