はてなブログに移行した
gisty でpostした際のエラー対応メモ
gistyでエラーが出たのでその対応メモ(環境:MacOS 10.6.8)
gistyについてはこちら
gistコマンドよりちょっと便利なgisty - SWDYH
上記サイトでインストールしたところ、post時にエラーとなってしまいました。一度、
$ gem uninstall swdyh-gisty
してから
$ gem install gisty $ gisty post atnd.pl Cloning into 1125148... remote: Counting objects: 3, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 0), reused 0 (delta 0) Receiving objects: 100% (3/3), done.
無事gistにファイルがアップロードされました。
Perlでキャッシュファイルを扱ってみた
Perlでのキャッシュファイルを扱うメモ。
WebAPIやスクレイピングしたりと、毎回それにアクセスするよりもキャッシュファイルにアクセスするほうが当然パフォーマンスはよくなります。
ということで今回はファイル(ディスク)キャッシュにアクセスする方法を試してみました。
CPANモジュールは、Cache::FileCache です。
Cache::FileCache - search.cpan.org
使い方は、newの際にオプションで、cache_root(保存先ディレクトリ)、name_space(cache_rootのサブディレクトリ名)、default_expires_in(保存期間)を指定します。
use Cache::FileCache; my $cache = Cache::FileCache->new({ cache_root => '/tmp', name_space => 'test', default_expires_in => 1h, # 1hとすると1時間 }); my $uri = 'http://yahoo.co.jp/'; my $data = $cache->get($uri); # getでデータ取得
getでデータを取得すると、以下のようにキャッシュファイルが作成されます。
/tmp/test/0/d/9/0d93d44d69589fe18ec48c437ff3eb100df73f38
これを踏まえて、Amazonのベストセラーページからスクレイピングする処理を書いてみました。
- キャッシュファイルがあれば、キャッシュファイルを見にいく
- キャッシュファイルがなければ、LWP::Simple::getでページ情報を取得する
#!/usr/bin/env perl use strict; use warnings; use utf8; use Encode; use Web::Scraper; use Cache::FileCache; use LWP::Simple; my $cache = Cache::FileCache->new({ cache_root => '/tmp', namespace => 'test', default_expires_in => '1h', }); my $uri = 'http://www.amazon.co.jp/gp/new-releases/books'; my $data = $cache->get($uri); my $scraper = scraper { process 'div.zg_itemInfo div.zg_title', 'btitles[]' => 'TEXT'; }; if (defined($data)){ my $res = $scraper->scrape($data); for (@{ $res->{btitles} }){ print encode_utf8($_). "\n"; } } else { my $content = get($uri); $cache->set($uri, $content); $cache->Purge(); }
車輪の再発明はするなといわれたりするけど、既にあるものでも自分なりに書いてみることがコード力アップにつながるかなとおもう。
Rubyもいいけど、Perl書くのやっぱり楽しいよ(・∀・)
環境
MacOS 10.6.8。Linuxは試してないです。
Perl 5.12.3
LWP::Simpleを使うとplackupでエラーが発生する
Mojolicious::Liteで作ったアプリをローカル環境にて、plackupすると以下のエラーが発生した。
$ plackup app.pl Prototype mismatch: sub Plack::Sandbox::app_2epl::get: none vs ($) at app.pl
該当箇所はここ
use LWP::Simple;
とりあえず、LWP::UserAgentを使うように変更したらエラーはでなくなりました。
<2011.07.21 追記>
id:syohexさんにコメントにて教えていただきました。
use LWP::Simple () と記述して関数名をインポートせず、getを利用するところでフルネームで記述すると、エラーなく動作しました。
use LWP::Simple (); ・・・ my $content = LWP::Simple::get($uri);
環境
MacOS X 10.6.8
perl 5.12.3
Plack 0.9982
Go節電プロジェクトのAPIを試してみた
GoogleのGo節電プロジェクトからAPIが提供されました。
Go節電プロジェクトAPIで出来ること
- みんなが消費している電力量の情報取得
- みんなが過去に消費した電力消費量の情報取得
- 電力会社が予想する、みんなの最大電力消費に関する情報の取得
- 電力会社の最大電気供給力に関する情報の取得
最も最新の電力消費データを一件のみ取得するには
http://api.gosetsuden.jp/usage/tokyo/actual/latest
PerlでWebService::Simpleを使ってやってみる。
#!/usr/bin/env perl use strict; use warnings; use WebService::Simple; use utf8; use Data::Dumper; my $gosetuden = WebService::Simple->new( base_url => 'http://api.gosetsuden.jp/usage/tokyo/actual/latest', response_parser => 'JSON', ); my $res = $gosetuden->get()->parse_response(); for (@{ $res }){ print $_->{usage}."\n"; print $_->{timestamp}."\n"; }
PerlでTwitter bot作成のために投稿を試してみる
PerlでのTwitterへの投稿はNet::Twitter::Liteを使うのがいいみたい。
(Net::TwitterはMooseを使っているらしい)
事前にbotに使いたいTwitterアカウントでhttps://dev.twitter.com/にログインしてconsumer_keyやらaccess_tokenを取得しておきます。
今回4つのデータはConfig::Pitにて利用することにしました。
#!/usr/bin/env perl use strict; use warnings; use utf8; use Net::Twitter::Lite; use Config::Pit; my $conf_consumer = pit_get("consumer.twitter.com"); my $conf_oauth = pit_get("oauth.twitter.com"); my $nt = Net::Twitter::Lite->new(%$conf_consumer); # access_token $nt->access_token($conf_oauth->{oauth_token}); # access_token_secret $nt->access_token_secret($conf_oauth->{oauth_token_secret}); # ツイート my $res = $nt->update('ツイートテスト');
参考サイト
Perl製Twitter BotにOAuth認証で投稿させる/楽
PerlでのRSSフィード取得 XML::Feedモジュール
特に新しいネタではないです。
Perlのモジュールメモ。
PerlでRSS/Atomフィードを扱うには、XML::Feedモジュールを使うと簡単にできます。
はてなブックマークのタグ「webservice」のRSSを取得するには
#! /use/bin/perl env use strict; use warnings; use XML::Feed; use URI; use utf8; use Encode; my $feed = XML::Feed->parse( URI->new('http://b.hatena.ne.jp/t/webservice?sort=hot&threshold=&mode=rss')) or die XML::Feed->errstr; for my $entry ($feed->entries){ print encode_utf8( $entry->title). "\n"; print $entry->link."\n"; print encode_utf8($entry->summary->body) ."\n"; my $dt = DateTime::Format::W3CDTF->parse_datetime($entry->issued); print $dt->date. "\n"; }
実行結果
Web開発系のクラウド(SaaS, PaaS, IaaS)まとめ - Goodpic http://www.goodpic.com/mt/archives2/2011/07/websaas_paas_ia.html 『クラウド』という言葉は、今や、ものすごく大きな範囲を指し示します。ちょっと色々と整理するために、個人的に気になった、主にWeb開発系のクラウドサービスを、一覧にまとめてみた。 PaaS(Platform as a Service) DotCloud Java、Ruby、Perl、Python、PHPなど幅広い言語、フレームワーク、DBに対応したPaaS。WinnerとなったGigaom Stru... 2011-07-11 ・・・