xmlのmysqlへの登録

前回、取得したRSSxml形式でした。

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