Amazon.co.jp ウィジェット

さむしんぐにゅぅ

さとうようぞう のBlog。気の向いた時に更新。サーバー落ちてたらまた来てちょ。
Perl
2009年10月09日

WWW::Mechanizeが実行時にエラーになる

ついこの間作ったGoogleWebmasterツールのレポートを定期的に取得するPlaggerプラグインを、ちゃんとデータセンターのホストでcronで動かし、かつレポートの先もサーバー上のDBとか静的ファイルに書き出しておくのが良かろう(将来的にも)、と思って作業してた。

普通に、そのホストにPlaggerを入れて、テキトーなRSSをgmailに送って、というテストに成功したまでは良かったんだけど、いざ動かしてみるとまったく動かない。
あれ、おかしいと思って普通のperlスクリプト版の方で試してみたらこちらも動かない。

follow_link(): Can't call method "url"

こんなエラーが出て、途中で処理が止まる。

「は。何これ?」

仕方がないのでエラーメッセージでググったら、既にバグレポートが上がってたんだけど、

http://code.google.com/p/www-mechanize/issues/detail?id=113

This will be fixed in 1.62.

ちょっwww
まじっすかwwww

WWW::Mechanizeの最新版は1.60。Plagger入れる時に依存関係のあったモジュールもCPANでアップデートしたので、そのまま何の疑いも持たずに1.60をいれたけどダメだったんですね。
ちなみに僕が作業で使っていたマシンにインストールしてあったバージョンは1.34。
なので、とりあえずMechanizeの古めのものを使えばよさげな感じ。


と、ここまで突き止めて今日は時間切れ。
一旦は確実に動作する(はず)の1.34を入れてみて、1.60との差分を見ながら「動くはず」のバージョンを試すってのが良いのかな?

2009年09月04日

Googleウェブマスターツールのレポートを定点観測したい

Googleウェブマスターツールが提供してくれる情報を、いちいち管理ツールにログインすることなく、定期的に自動取得したいのでPerlでこんなコードを書いてテストしてみた。

#!/usr/bin/env perl

use strict;
use WWW::Mechanize;
use Data::Dumper;
use FileHandle;
use Net::SMTP::OneLiner;

$Data::Dumper::Indent = 1;

my $url = 'https://www.google.com/accounts/ServiceLogin?service=sitemaps&passive=true&nui=1&continue=https%3A%2F%2Fwww.google.com%2Fwebmasters%2Ftools%2F&followup=https%3A%2F%2Fwww.google.com%2Fwebmasters%2Ftools%2F&hl=ja';
my $user_id = 'MY_GOOGLE_ACCOUNT';
my $user_password = 'PASSWORD';

sub message { print @_; }
sub abort { &message(@_); exit 8; }

# get top page
my $mech = WWW::Mechanize->new();
$mech->agent_alias( 'Mac Mozilla' );

my $response = $mech->get($url);
&abort(Dumper($response)) unless ($mech->success);


#login
$mech->form_number(1);
$mech->set_fields('Email' => $user_id, 'Passwd' => $user_password);
$response = $mech->submit;
&abort(Dumper($response)) unless ($mech->success);


# move to the page
$response = $mech->follow_link(text => 'blog.somethingnew2.com');
&abort(Dumper($response)) unless ($mech->success);


# move to detail page
$response = $mech->follow_link(url_regex => qr/top-search-queries/i);
&abort(Dumper($response)) unless ($mech->success);


# get top-search-queries-csv
$response = $mech->follow_link(url_regex => qr/top-search-queries-dl/i);
&abort(Dumper($response)) unless ($mech->success);

print ("$response\n");

詳細ページの表示は問題なし。CSVのデータもダウンロードできそうだ。

TODO:
Plaggerのプラグインにして、メール送信はP::P::P::Gmailとかで送るようにする。
→ ウォッチ対象のURLと、レポートの送り先をPlaggerの設定ファイル(.yaml)で管理するようにしたい
プラグインにするベースは AmazonAssociateReportJP.pm あたりを参考にすれば案外簡単にできそうだ。
Yahoo!サイトエクスプローラーのデータも自動取得するものも作らないと。
2009年08月20日

取得したPage Rankをメールで送る

うごいた。
#!/usr/bin/perl
use WWW::Google::PageRank;
use Net::SMTP::OneLiner;

$PROXY = 'http://example.com:8080';
$Net::SMTP::OneLiner::HOSTNAME = "smtp.example.com";
$target_file = './pagerank_target.txt';
$mail_body = "URL\tPageRank\n";

$pr = WWW::Google::PageRank->new(proxy => $PROXY);

open IN, $target_file or die 'Open failed!';
while ($input = ){
    chomp($input);
    $result = scalar($pr->get($input));
    sleep(5);
    $mail_body .= $input . "\t" . $result . "\n"
}
close IN;

send_mail('me@example.com', 'you@example.com', "Google PageRank", $mail_body);


とりあえずデスクに置いてあるマシンでスケジューラーに登録しておこう。
送信頻度は嫌がらせのように毎週とかでいいかな?

【追記】
ドメインをexample.comに修正した

Google PageRankをperlスクリプトで取得する

そんなに毎日変動するものではないので、Google Tool Barをインストールしたブラウザで定期的にヲチしりゃいいんじゃね?
とか思うけど、まぁそこはオトナの事情で(以下ry
面倒なのでperlでスクリプト書いてしまってcronに登録してしまい、月曜日の朝にメールで送るとかにしてみよう。
CPAN探したら、そのものずばりのモジュールが有ったので、これで仕事の8割は完了したも同然。
cpanのシェルを起動して
install WWW::Google::Pagerank
で一発でインストールできたよ。
インスタンス作る時にプロキシの設定ができるようなので、こんなコードを書いたらランクが取得できた。
% cat ./pagerank.pl
use WWW::Google::PageRank;
my $pr = WWW::Google::PageRank->new(proxy => 'http://proxy.mycompany.co.jp:8080/');
print scalar($pr->get('http://blog.somethingnew2.com')), "\n";
この結果と対象URLをタブ区切りとかにして、Net::SMTP::OneLinerで送ればOKそう。
やってみよう。
2009年08月07日

AWStatsの設定ファイルをデフォルト以外に置く

Google検索したら自分のblogがヒットして、記憶力の足りなさを痛感した。

サーバーの管理権限(Linuxの場合はroot権限)があれば、セットアップスクリプトのconfigure.plがよろしく取り計らってくれるので、AWStatsは簡単にセットアップできる。設定ファイルも/etc/以下に配置されるファイルをviとかで編集すればいいので、これまた特に難しいこともない。

逆にroot権限がないと、デフォルトの場所に配置できなかったり、設定ファイルを配置する場所への書き込み権限がなかったりしてちょいと面倒。うぎゃー。
しかも、かなりの数のドメインのログを集計しないといけないので、設定ファイルの管理が煩雑になりそうだ。

awstats.plと同じ階層に設定ファイルを置いておく、といくのもアリだけど、それもまたビミョーだったので
・awstats.plはWEBから見れるディレクトリ(DocumentRoot/cgi-bin)に配置、.htaccessを編集して.plにCGI実行属性をつける
・設定ファイルはWEBから見えない場所($HOME/statsconf.dとか)に配置
ってな具合で運用してみることにした。

AWStatsは、実行時に設定ファイルを
・awstats.plと同じディレクトリ
・/usr/local/etc/awstats
・/etc
・/etc/awstats
・/etc/opt/awstats
このディレクトリから探すので、これを定義している配列 @PossibleConfigDir に$HOME/statsconf.dを追加したら動くようだ。
# AWStats-6.9の1644行目

@PossibleConfigDir = (
"$DIR", "/etc/awstats",
"/usr/local/etc/awstats", "/etc",
"/etc/opt/awstats",
"/home/hoge/statsconf.d" # ←追加
);

うーん、これもびみょーかなぁ。。。
もうちょっとエレガントに管理する方法はないものだろうか・・・。

2009年02月17日

IdeaPad S10e その1

2008年12月に参加させてもらったLenovo ideapad タッチ&トライブロガーイベントで触ったLenovoIdeaPad、モニター機が手元に届きました。

手元に到着したのは2/14ですけど、週明けの月曜日からまともに試用し始めました。
レビューの機会をご提供いただいたLenovoさん、アジャイルメディアネットワークスさん、どうもありがとうございます。

» 続きを読む
2008年02月15日

DreamhostにSVN::Coreを入れ、PlaggerでGoogle CodeのSVNコミットログをtwitterに流す

PlaggerにはCustomFeed::SVNLogというモジュールが付属しているので、ありがたく使わせてもらおうと思ったら、perlモジュールのSVN::Coreが足りない、とエラーになった・・・。

% plagger -c ./svn2twitter.yaml
Can't locate SVN/Core.pm in @INC

なのでCPANからSVN::Coreをインストールしようと思ったが、SVN::CoreはCPANには登録されていないそうなので、インストールは少々やっかい
(参考:ぶらぶら日記: SVN::Core をインストールする

さらに僕がPlaggerを動かしているのはDreamhostだったりするので、SVN::Core dreamhostでぐぐったInstalling SVK on Dreamhost - Dev411: The Code Wikiというドキュメントも発見!(英文です)

参考にさせてもらいながら早速作業をしたので、メモ。


まずは大前提として、DreamhostでちゃんとCPANが使えるようになっていること。これはPlaggerを入れた時点でクリアしているはずなんだけど、今一度コチラのページを確認しておくと良いです。
特にPERL5LIBを正しく設定してexportされていること、また$HOME/local/share/perl/ディレクトリが存在していて、ちゃんとPERL5LIBに含まれていることが超重要です。


以下、SVN::Coreを入れるための方法。

(1-1) swigの取得、configure
Dreamhostにはデフォルトで/usr/bin/swigにswigが入っているが、最初っからインストールされている/usr/bin/perlを使うように設定されているっぽい。DreamhostにPlaggerをインストールする時点で$HOME/local/bin/perlに5.8.8を入れているので、そちらを見てくれるようにswigも新規に$HOME/local/にインストールする。

一応、元々入っているswigとバージョンを合わせる為に1.3.24にしてみた。
(最新版は1.3.33)

% wget http://downloads.sourceforge.net/swig/swig-1.3.24.tar.gz
% tar zxf ./swig-1.3.24.tar.gz
% cd ./SWIG-1.3.24
% ./configure --prefix=$HOME/local \
--with-perl5=$HOME/local/bin/perl


(1-2) configure したらインストール
make && make install でオK
ここは特に問題ないはず。$HOME/local/bin/swigができる。

» 続きを読む
2008年01月23日

しょこたんが出るTV番組の情報をGoogle Calendarに入れておくことで見逃さないようにするテスト

タイトルのまんま。
前回、しょこたん☆ぶろぐの更新情報をGoogle Calendarに入れるってのができたので、今回はTV番組情報をLivedoor番組表から取得して、Google Calendar APIで更新かけてみる。

アイディアソースは [Plagger] テレビ番組表を Plagger で #2 - Bulknews::Subtech - subtech

結論から言うと、コアの部分はサクッとできた。

けど、今のやりかたじゃぁ色んな所が決定的にダメ。あー、ダメなんじゃなくて、需要を満たせてない、が正しいか。
いずれにしても対応するのには今の僕の知識と技術では結構時間がかかりそう。
すぐできると思ったんだけどなぁ。。。誰かいいアイディア・方法を教えてplease...(突っ込みコメント、TB歓迎!!)

ということで、ここまでのやり方と対応詳細は以下の通り。
» 続きを読む

しょこたん語 → 日本語フィルタ

コメントで「翻訳して」と言われたので、モジュール書いた。
ファイルをダウンロード


言うまでもなく100%ネタなので、動作確認とか一切してません。ご利用は自己責任で。

オリジナルは↓これ。
http://plagger.org/trac/browser/trunk/plagger/lib/Plagger/Plugin/Filter/Kansai.pm

Plagger::Plugin::Publish::GoogleCalendarで動いた

自作しちゃったプラグインでしょこたん☆ぶろぐGoogle CalendarにPOSTするテストですが、PlaggerSubversionリポジトリにあがってるGoogleCalendar.pmモジュールでも動く、ってのを確認しました。

一応yamlだけ貼っておきます。
ファイルをダウンロード

自作プラグインで動作していたものを、リポジトリ上のものに置き換えたので以下を直そうかと。
・予定のタイトルにいちいちfeed titleが入るのは邪魔じゃ → 消す
・終了時刻をなんとかして渡せるようにする
この修正したら、Livedoor番組表からの情報をGoogle Calendarに差し込んでみたい。

さて、寝るか。

2008年01月21日

しょこたんをもの凄い勢いで追いかけてみるテスト

しょこたん☆ぶろぐの更新頻度はすごいなぁ。
テレビにも(ほぼ)毎日出てるし、漫画書いたりCD出したりととても忙しいはずなのに、いったいいつ更新してるんだろう。そもそも、ちゃんと寝てるんだろうか?

というのが気になったので、一個一個のエントリーの更新時刻を拾い読みしてったんだけど、エントリーが多すぎて何が何だかわかんね(w
だからシステム的にしょこたん☆ぶろぐの更新時間を「可視化」してみた。

これで「いつ更新」が一目で把握できるかなぁ、と。

例えばこれは1/18(金)の午前0:00から15:00くらいまで。

0:28から01:49までが更新祭り、終わったかと思ったら03:41まで更新が続いて、その後10:00amくらいまでは普通に寝てそうな感じ。んでもって11:00くらいから活動再開。人並みの睡眠時間は確保できてそう。

» 続きを読む
2007年09月04日

スパムコメント禁止

spamがあまりに多いので、日本語を含まないコメントは全て弾くようにしました。
使ったのはこれ
ということで英語でコメントとかはやめてください(w

2007年06月05日

OpnePNEの最新日記をRSSに吐き出す、の注意事項

先日投稿したエントリ、OpnePNEの最新日記をRSSに吐き出すしまさんからトラックバックを頂き、本文で以下のような指摘をされた。

社内SNSとか、投稿はできないけど一般にも公開しちゃうような設定をしているSNSとか、多少は情報が漏れても良いようなSNS(笑)だとかであれば、敷居を下げるって意味では認証なしで全然OKだと思いますけどね。
#社内SNSの場合、重要情報が流出した際に問題にならなければですが(笑)

おっしゃる通りで、正しい用途で使って頂かないと最悪の場合情報漏洩だったりとかになってしまう訳ですよ、あのスクリプトは。。

ということで前回のエントリに追記として注意事項を掲載するとともに、コードも注意喚起の一文を追加したものに差し替えました。
最新版のスクリプトはここからもダウンロードできます。

コメント追記版をダウンロード(.zipファイル、4kb)

# コメントが4行増えただけです。処理部分は変わってないので、導入済みの方は入れ替える必要ありません。


あ、コメントを日本語で書いたので、編集して保存する場合の文字コードに注意して下さい。検証してはいませんがutf-8で保存しないと動かなくなるかもです。

2007年05月29日

OpnePNEの最新日記をRSSに吐き出す

以前書いた通り、社内でOpenPNEを使ってSNSを運用しているんですが、新卒が入って人数も増えたため業務日報としてつけさせている日記をチェックするのが結構大変になってきた。

そこで楽に日記をチェックする方法としてRSSの出力を考える。

まずはgoogleOpenPNE RSSで検索
すばらしいことに追加モジュールが○○ってなんだよぅ: OpnePNE拡張「RSS配信モジュール」 Ver.0.4.3とか公開日記 - OpenPNEカスタマイズ外部公開SNSに公開されているので、とりあえずダウンロード。

» 続きを読む
Made with dreamweaver Made with fireworks Powered by Movable Type 3.34 Powered by Wandering Wind PC・周辺機器特集! フィードメーター - さむしんぐにゅぅ
Copyright : [Articles] (C) さむしんぐにゅぅ All Rights Reserved.
[Comments/Trackbacks] ... Authors of those have rights.