日付と記事がペアになっているサイトを見つけた。
http://www.reuters.com/resources/archive/jp/ には、記事のハイライトがずっしりとおいてあった。
- まずは、2010 年から拾っていこう。
- 次に、日付のページを確認する。[http://www.reuters.com/resources/archive/jp/20140801.html]のように YYYYMMDD.html となっている。運が良い。
- そのページにアクセスしてみると、ハイライト記事があるので、下図のように、赤枠の文章を取り出せばOKなわけだ。
プログラムのイメージ
- そこで稚拙ながらスクリプトを書いてみる。
- 日付の数値をぐるぐると 2010 年から 2014 年まで回す。
- 次いでに、データファイルの格納先ディレクトリとデータファイル名を用意しておく。
- その日付に応じたページの内容をごっそりと持ってくる。
- ソースファイル中のマーキングにめぼしを付けて、赤線エリア内の文字を抽出する。
- HTML ソースからテキストのみを取り出す。
- データファイルのフォーマットを作成しておいて、書き出す。
- 途中で、unixtime の変換操作を行う。
ソースコード(アジャイルなので見本として)
#! /bin/sh # /bin/date -j -f "%Y-%m-%d %H:%M:%S" "2014-08-01 18:00:00" +%s -> 1406910255(GMT) # /bin/date -j -f "%Y-%m-%d %H:%M:%S" "2014-08-01 18:00:00" +%A -> 金曜日 # /bin/date -r 1262336400 +"%Y-%m-%d %H:%M:%S" -> 2010-01-01 # 2010-01-01 = 1262336400 24H = 86400 # 2014-09-01 = 1409562000 start=1262336400 while true do if [ $start -eq 1409562000 ] then exit # END = 2014-08-31 fi journal=`/bin/date -r $start +"%Y-%m-%d %H:%M:%S"` #entry140101-180000.txt jornalfile=`/bin/date -r $start +"%y%m%d"` filename="entry$jornalfile-180000.txt" #YY="2013" #YYMMDD="20131201" YY=`/bin/date -r $start +"%Y"` YYMMDD=`/bin/date -r $start +"%Y%m%d"` PRE1="VERSION|fp-1.0.2|SUBJECT|" PRE2=`/bin/date -r $start +"%Y-%m-%d "` PRE3=`/bin/date -j -f "%Y-%m-%d %H:%M:%S" "$journal" +%A` PRE4="|CONTENT|" POS1="|AUTHOR|flatpress|DATE|" POS2=`/bin/date -j -f "%Y-%m-%d %H:%M:%S" "$journal" +%s` POS3="|CATEGORIES|9|" start=`expr $start + 86400` wget=/usr/local/bin/wget nkf=/usr/local/bin/nkf awk=/usr/bin/awk html2text=/usr/local/bin/html2text #URL_Y="http://www.reuters.com/resources/archive/jp/$YY.html" URL_D="http://www.reuters.com/resources/archive/jp/$YYMMDD.html" work1="work1.html" work2="work2.html" work3="work3.html" work4="work4_utf8.txt" keyword="class=\"headlineMed\"" $wget -O $work1 $URL_D while read line do if echo $line | grep $keyword > /dev/null then hit=`echo $line | grep $keyword | $nkf -e` URL_I=`echo $hit | $awk 'gsub("\047", " "){print $4}'` break fi done < $work1 ### $wget -O $work2 $URL_I STA="id=\"midArticle_start\"" END="class=\"pageNavigation\"" ERR="nbsp;" echo > $work3 flag=0 while read line do if echo $line | grep $STA > /dev/null then flag=1 fi if echo $line | grep $END > /dev/null then flag=0 fi if echo $line | grep $ERR > /dev/null then flag=0 fi if [ $flag -eq 1 ] then echo $line >> $work3 fi done < $work2 $html2text $work3 > $work4 ### #VERSION|fp-1.0.2|SUBJECT|2014-08-01, Fri|CONTENT|ここからコンテンツ #コンテンツ #|AUTHOR|flatpress|DATE|1406910255|CATEGORIES|9| # # /bin/date -j -f "%Y-%m-%d %H:%M:%S" "2014-08-01 18:00:00" +%s -> 1406910255(GMT) # /bin/date -j -f "%Y-%m-%d %H:%M:%S" "2014-08-01 18:00:00" +%A -> 金曜日 echo "---------------------------------------------------------------------------" echo $journal echo "---------------------------------------------------------------------------" echo -n $PRE1 > content/$filename echo -n $PRE2 >> content/$filename echo -n $PRE3 | nkf -w >> content/$filename echo -n $PRE4 >> content/$filename cat $work4 >> content/$filename echo -n $POS1 >> content/$filename echo -n $POS2 >> content/$filename echo $POS3 >> content/$filename done
#なんか、相当に時間がかかってる。非力なインタネット回線とマシンの性能の問題なのかな。1日では終わりそうもないなぁ。
データファイルをコピーする
#! /bin/sh FROM="content" TO="/usr/local/www/virtual/flatpress.world/fp-content/content" #for year in 10 11 12 13 14 #do # for mon in 01 02 03 04 05 06 07 08 09 10 11 12 # do # mkdir -p $TO/$year/$mon/ # done #done #exit for year in 10 11 12 13 14 do for mon in 01 02 03 04 05 06 07 08 09 10 11 12 do cp "$FROM/entry$year$mon"* $TO/$year/$mon/ done done
#こちらもまだ検証していない。。。
引き続き、こちらの記事をご覧ください。「基本的動作の確認」、「5年分の記事を入れて確認」