*

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>

関連記事

no image

ようやっとiTunesMusicStoreのRSSを弄ってみた。

何とかiTunes Music StoreのRSSを利用して、Blues, Classical, J

記事を読む

no image

未来検索Livedoorからトランペット関連記事を集めてみた

前回、Yahoo!掲示板から「トランペット」関連の話題をピックアップ下のに続いて、次は「未来検索Li

記事を読む

  • ラッパ・その他用品のメーカーのWebサイトを"約60サイト集めてみました。セレクトボックスから選択すると該当ページにジャンプします。

    それでも見つからない方はこちらへ…
    ITG Links:Trumpet and Mouthpiece Makers

PAGE TOP ↑