読者です 読者をやめる 読者になる 読者になる

はてなブログに移行した

丸2年ブログを更新していなかった。。 大したネタもないけど備忘録を綴っていく。

はてなダイアリーからはてなブログへの移行は以下のリンクの手順通り問題なく完了した。

はてなダイアリーからのインポート(ブログの移行)

Markdown でもコードのシンタックスハイライトが使えるようなのでMarkdownで書いていこうと思う。

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にファイルがアップロードされました。


Usage ATND::Lite

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 節電プロジェクト


Go節電プロジェクトAPIで出来ること

  1. みんなが消費している電力量の情報取得
  2. みんなが過去に消費した電力消費量の情報取得
  3. 電力会社が予想する、みんなの最大電力消費に関する情報の取得
  4. 電力会社の最大電気供給力に関する情報の取得


最も最新の電力消費データを一件のみ取得するには

http://api.gosetsuden.jp/usage/tokyo/actual/latest

PerlWebService::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::TwitterMooseを使っているらしい)


事前に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のモジュールメモ。
PerlRSS/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
・・・