float32の日記: 自分、不器用なもので…… 6
perlとか使えばもっとすっきり書けるんでしょうが、自分、オーカー(awker)なもので....
#あまりにも泥臭いスクリプトだが、同じことを処理しているスクリプトを見たことないので
##もしあったら教えてくださいお願いしますorz。もっと綺麗なソースを見たい。
某所のコミック発売一覧のhtmlを整形して、Google calenderにインポートできる形式の
csvに出力させるスクリプトを曝してみるテスト。
本当はこれで加工済みのデータをGoogle Calenderで公開すればいいやと思ったら、
元サイトがサイト上情報の著作権を主張していたw
面倒くさいんで加工方法のみ曝すテスト。
awkスクリプトなんてだれもチェックしないだろうけど。
ちなみにテストはsjis環境でのwindowsでしました。
初期テストではnkfで文字コードを変換したlinuxでした。ちなみに。
【注釈】
*2007年3月のデータでのみチェック。その他の月では想定外のエラーが出ると思う(出版社名へのad hockなコマンドが多い)。
*出力は出版社ごとに「(出版社名).csv」に出力される
成年コミックも出力されるのでcsvを適当に編集してからGoogle Calenderに取り込むとよかれ。
*まあ、編集社ごと出力じゃなくて、全部一括して出力してExcelで編集するのが簡単かもね。
スクリプト適当に書き換えればできるけど、差分小さいのであげるの面倒。
{FS="</font>";if(NR==1){logt="log";};
if(index($1,"width")!=0&&index($0,"発売日")==0){
idx=index($1,"-1");
if(index($1,"tr")!=0)
{i=1; day=substr($1,idx+4);
if(index(day,"上")!=0){day=substr(day,1,2)"/8"};
if(index(day,"中")!=0){day=substr(day,1,2)"/15"};
if(index(day,"下")!=0){day=substr(day,1,2)"/28"};
dd=substr(day,4.2);dp_tmp=dd+1;
if(dp_tmp>9){dp=substr(day,1,3)""dp_tmp}else{dp=substr(day,1,3)""dp_tmp;}
}else{
data[i]=substr($1,idx+4);
i_wbr=index(data[i],"<wbr>");
if(i_wbr!=0){
tmp1=substr(data[i],1,i_wbr-1);
tmp2=substr(data[i],i_wbr+6);
data[i]=tmp1""tmp2;
}
i_wbr=index(data[i],"/");
if(i_wbr!=0){
tmp1=substr(data[i],1,i_wbr-1);
tmp2=substr(data[i],i_wbr+1);
data[i]=tmp1"/"tmp2;
}
i++};
if(index($2,"/tr")!=0){
if(index(data[1],"iframe")==0&&index(data[2],"iframe")==0&&
index(data[3],"iframe")==0&&index(day,"iframe")==0){
if(index(logt,data[1])==0){print data[1];print "件名,開始日,開始時刻,終了日,終了時刻,終日イベント,場所"> data[1]".csv";
logt=logt""data[1];}
print ""data[2]data[3]","yr"/"day",0:00:00,"yr"/"dp",0:00:00,True,"data[1],data[4]"円" >> data[1]".csv"}}}}
更に泥臭い例 (スコア:1)
手元にあるver(0.9.2d)ではこんな感じ。
's/「^t」//g;'
's,^,,;'
's,.*$,,;'
's/
/!d;' [slashdot.jp]
's/^
//g;'
's,[:blank:]*$,,g'
#「^t」はタブ文字
yy/mm 出版社 書名 [巻数] 姓 名 \価格 [書籍扱]
なんて「全角空白x2」の似非csvで吐きます。
grep通す事を想定しているのでこんな感じですが、
もうちょい置換するとgoogle calendarで使えるcsvに?
Re:更に泥臭い例(スクリプト喰われた (スコア:1)
's,^</center>,,;'
's,</Table>.*$,,;'
's/<br><A HREF=.*$//;'
'/^<li>/!d;'
's/^<li>//g;'
's,[:blank:]*</li>$,,g'
Re:更に泥臭い例(スクリプト喰われた (スコア:1, おもしろおかしい)
Re:更に泥臭い例 (スコア:1)
>なんて「全角空白x2」の似非csvで吐きます。
私はOutlookのエクスポート(Google Calendarが食べられる形式)を見て、項目名をできるだけdelして
「これだけあればいいらしい」って項目で元のスクリプトを作りました。
#発行日が月末だとエラーになるような気がしてきますた。
カレンダー上に出版情報があると便利です。
ロジックは見てないですが (スコア:0)
Re:ロジックは見てないですが (スコア:1)
#いや、最後に「;」か何かつけとかないと落ち着かないというか。
##この印象どこで養った>俺