2010年6月アーカイブ

2010年6月18日
| コメント(1) | トラックバック(0) XML::Simpleで文字化けしない方法

普段、MovableTypeのプラグインでお世話になっている「小粋空間」さんが、意外なところで躓いていた。

以上です。色々調べてこれが最適解と思ったのですが、より適切な解決方法がありましたらコメントください。

「より適切」かどうかは分かりませんが、よりモダンな感じの解決方法を考えてみます。

さっきの記事を書きながら、トピックスの取得だったらRSSで良いよね、と思ってしまったので、ついでに書いてみた。

# utf8
use 5.8.1;
use strict;
use warnings;
use utf8;
 
use Encode;
use Term::Encoding qw(term_encoding);
my $enc = Encode::find_encoding(term_encoding);
 
use Data::Feed;
use URI;
 
# urlを指定する
my $url = URI->new('http://dailynews.yahoo.co.jp/fc/rss.xml');
 
# サイトにアクセスし、Feedを取得する
my $feed = Data::Feed->parse($url);
print $enc->encode($_->title)."\n" for ($feed->entries);

RSSの解析をするモジュールは色々とあるけれども、今回はData::Feedを使ってみた。

簡単!たった13行のコードでHTML取得&解析をするPerlスクリプト - DQNEO起業日記」が面白そうだったので、コードをコピペしたけど、文字化けしたので、Windowsでも動くように書き直してみた。

…かなり行数は増えましたが。

# utf8
# インスパイヤ:[Perl]簡単!たった13行のコードでHTML取得&解析をする - DQNEO起業日記 <http://dqn.sakusakutto.jp/2010/06/perlhtml.html>
use 5.8.1;
use strict;
use warnings;
use utf8;
 
use Term::Encoding qw(term_encoding);
my $encoding = term_encoding;
 
binmode STDOUT => ":encoding($encoding)";
 
use LWP::UserAgent;
use HTML::TreeBuilder;
 
# urlを指定する
my $url = 'http://yahoo.jp';
 
# IE8のフリをする
my $user_agent = "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0)";
 
# LWPを使ってサイトにアクセスし、HTMLの内容を取得する
my $ua = LWP::UserAgent->new(agent => $user_agent);
my $res = $ua->get($url);
my $content = $res->decoded_content;
 
# HTML::TreeBuilderで解析する
my $tree = HTML::TreeBuilder->new;
$tree->parse($content);
 
# DOM操作してトピックの部分だけ抜き出す。
# <div id='topicsfb'><ul><li>....の部分を抽出する
my @items =  $tree->look_down('id', 'topicsfb')->find('li');
 
print $_->as_text."\n" for @items;

モダンPerlの記事を読んで、Term::Encodingを知った。

ときには外からどのような入力がくるかわからない場合もありますが,コンソールアプリケーションであれば宮川達彦氏のTerm::Encodingというモジュールを利用すれば標準入出力のエンコーディングを判定できます。

今まで、手動で「cp932」と入力していたのだが、Term::Encodingを使ってやれば自動的に文字コード(エンコーディング)を判別できるではないか、というわけです。

Google検索

Last.fm

このアーカイブについて

このページには、2010年6月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2010年5月です。

次のアーカイブは2010年7月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Creative Commons License
このブログのライセンスは クリエイティブ・コモンズライセンス.
Powered by Movable Type