header_02.jpg

トランペットブログ個別記事

2004年10月25日

Yahoo!掲示板からトランペットを検索

Yahoo!掲示板で「トランペット」を検索した結果を表示するPerlスクリプトを書きました。
下のほうにさりげなくありますので、よろしければどうぞ。
”■Yahoo掲示板から「トランペット」を含む書き込みをピックアップ!”って奴です。

具体的には
Yahoo!掲示板・検索オプション
http://messages.yahoo.co.jp/soptions.html

から…

  1. 「エンターテイメント」カテゴリからトランペットを検索した結果のデータをLWP::Simpleで取得。
  2. それから、正規表現でタイトルとリンク先と概要をハッシュに詰め込んで、HTML::Templateで整形。
  3. ついでにXML::RSSでrssも作ってみる。(けど、それを改めてXML::RSSでパースとすると、ちゃんとしたフォーマットじゃないって言われてエラーになる...むぅ... onz)
  4. んで、概要内のタグを消去しつつ、document.writelnで書き出す形のJavaScriptを生成。
という、BlogHackを繋ぎ合わせただけのお粗末なものです…これでさえ何回つまづいたことか('A`)
 #書籍BlogHackはこちら
 #Amazon.co.jp: 本: Blog Hacks ―プロが教えるテクニック&ツール100選

RSSを0.91じゃなくて0.9で宣言していて、ずっとdescriptionが出力されないことに頭を悩ませたり…いやはや先は長いです。いつの日かBlog Hackerになれるかなー。


ソースを載せておきます。ツッコミ大歓迎です(´・ω・`)ノ
でも、このまま使うのは危険な気がしますので、参考にすることはお勧めしません。なんないと思うけど。


#!/usr/bin/perl -I ./lib

#Yahoo!掲示板のパースをして、RSSに変換する。

#そして、JS形式で出力。


use strict ;
use LWP::Simple ;
use XML::RSS ;
use Encode ;
use encoding 'euc-jp' , STDOUT => 'UTF-8' ; #正直文字コード周りがワケワカメ

use HTML::Template ;


#まずは掲示板のデータをLWP::SimpleでGET
my $url = "http://search.mb.yahoo.co.jp/search?p=%a5%c8%a5%e9%a5%f3%a5%da%a5%c3%a5%c8&M=&R=yahoo%2Fentertainment" ;
my $rowdata = LWP::Simple::get( $url ) ;
$rowdata = decode('EUC-JP' , $rowdata) ;
#print $rowdata ;


#XMLを作っていく。
my $rss = XML::RSS -> new (
version => 0.91 ,
encode_output => 0 ,
);


$rss -> channel(

title => 'Yahoo!BBS search for trumpet RSS' ,
link => 'http://search.mb.yahoo.co.jp/' ,
description => 'Yahoo!掲示板の「トランペット」での検索結果のRSS' ,
language => 'ja' ,
);


#rssに、マッチされたものを入れていく。
my $regex = q{<UL><LI>\n<a href="(.+?)">(.+?)</a><br>(.+?)<BR>.+?</LI></UL>}
;


my @save_hash ;
while( $rowdata =~ m/$regex/gs){


$rss -> add_item(
link => $1 ,
title => $2 ,
description => $3 ,
);

push @save_hash , { link => $1 , title => $2 , description => $3 } ;

}


#ひとまず、RSSを出力。
open (RSS , ">yahoobbs.rss") ;
print RSS $rss -> as_string() ;
close RSS ;


#続いて、控えておいたデータでJavaScriptを出力


foreach ( @{@save_hash} ){
$_ -> {description} =~ s/<.*?>//g ;
}


#続いて、JSを出力するのでとりあえずHTML::Template
my $template = HTML::Template -> new( filehandle => \*DATA ) ;
$template -> param(item => \@save_hash ) ;
my @lines = split /\n/ , $template -> output() ;


open (JS , ">yahoo_bbs.js") ;
for (@lines){
s/\x27/&#x27;/g ; #シングルクォテーションをエスケープ。10進数表記では上手くいかないのは何故…

Encode::encode("utf-8" , $_ );
print JS "document.writeln('$_') ; \n" ;
}

close JS ;
exit(0);


__DATA__
<div class="yahoo_bbs">
<dl>

<TMPL_LOOP name = item >
<dt><a href="<TMPL_VAR name = link escape = HTML >"><TMPL_VAR
name = title escape = HTML ></a></dt>
<dd><TMPL_VAR name = description escape = HTML ></dd></TMPL_LOOP></dl>
</div>



■関係してそうなアイテム from Amazon
Posted by horagay at 2004年10月25日 18:45 | トラックバック
コメント
コメントする









名前、アドレスを登録しますか?






大きいバナー
バナーは大小お好きな方を御自由にどうぞ
小さいバナー
御意見は管理人まで。このページは当然リンクフリーです。
当サイトで紹介する情報等は、自己責任においてご利用下さい。 当サイトの利用によって生じたあらゆる損害に対して、管理者は一切の責任を負いません。
Copyright (C) 2003 Gonez Factory. All Rights Reserved.
旅・旅行の自作動画::Gone's Factoryもよろしければ(^-^

運営者プロフィール
060520face.jpg 大学時代トランペットに目覚める。一刻も早く上手くなりたくてネットで情報を集めていたら、サイトができてしまったという噂。現在は都内某ITベンチャー企業にてデザイナー職。
→詳しいプロフィールはこちら

自動更新バナー
投稿欄へ行きます アイコン等へのリンクです。 喇叭図書館へ行きます。 過去の新着情報を見る。 トップへ戻ります