遊びに行くつもりが風邪をひいてしまって家でゴロゴロしているのもアレなんで、ホビープログラミング。
塚本牧生さんが作られているWWW::Mixiというモジュールを使った、簡単な「mixi"足あと"保存+解析」Perlスクリプトmixi Log Loaderです。
例によってかなりテキトーな造りになってます。自己責任で。
あと、実行間隔の幅を取ってmixiサーバに負荷を掛けないようにしてくださいね。
*環境とか
開発環境&動作確認はWindows XP + ActivePerl 5.8.4のみで行っています。
同様の環境でもJcodeとDBI関連とDBD::SQLiteは別途ppmを使ってインストールする必要があります。
もちろんWWW::Mixiもパスに放り込んでおきましょう。
ここらのやり方分からん!という向きは諦めてください。(いや、ホントに)
一応、PPMの実行例をあげておきますが…。
C:\>ppm PPM - Programmer's Package Manager version 3.1. Copyright (c) 2001 ActiveState Corp. All Rights Reserved. (略) ppm> install Jcode ppm> install DBI ppm> install DBD-SQLite ppm> install DBD-SQLite2 ppm> exit
*インストール
で、準備ができたらmixilog.0.03.plをダウンロードして、mixilog.plにリネームして、適当なフォルダ(ここではC:\mixilog)に放り込んで、次のコマンドを実行してください。
エラーが出ずにヘルプが表示されればOKです。
C:\mixilog>perl mixilog.pl mixi Log Loader Copyright (C) DonaDona(KITAO Masato) 2004 Usage: mixilog.pl -u user@mixi.jp -p password [-naHSD] [Required Options] -u: User's Mail Address -p: User's Password [Options] -n: NoAccess Mode -a: Analyse Mode -H: HTML Output Mode -S: ShiftJIS Mode (on Analyse Mode) -D: Debug Mode
*実行
mixi Log Loaderの動作は主に二段階に分かれています。
- mixiにアクセスして"足あと"をデータベースに保存する(同日同ユーザのアクセスは最終時刻で更新します)
- データベースに保存された"足あと"をアクセス順に表示する
前者、後者ともに動作する・しないをコマンドラインオプションで制御できるようになっています。
なお、ここではログイン時のアドレスをhogehoge@hugahuga.com、パスワードをfoobarとします。
*"足あと"更新
コマンドラインオプションで-nをつけなければ、mixiにアクセスして"足あと"を確認しデータベースに取り込む処理を行います。
案外時間がかかるので気長にお待ちください(^^;
以下の実行例
C:\mixilog>perl mixilog.pl -u hogehoge@hugahuga.com -p foobar C:\mixilog>
これだけで、過去のログと照らし合わせて新しくなっているものを取り込んでいます(実際にはもう少し泥臭いですが・・・)。
*"足あと"解析
コマンドラインオプションに-aをつけると"足あと"解析処理を行います。
通常EUC-JPでの出力になるので、Windows上で動かしている場合は-Sオプションをつけると幸せになれると思います。
ちなみに以下の実行例は"足あと"の更新を行わずに解析処理を行い、Shift-JISでニックネームを出力したものです。
C:\mixilog>perl mixilog.pl -u hogehoge@hugahuga.com -p foobar -naS ---------------------------------------------------------------------- Count: NickName : Graph ---------------------------------------------------------------------- 00005: ******** : ----- 00004: ** : ---- 00002: *** : -- 00002: ***** : -- 00002: * : -- 00002: **** : -- (略) ----------------------------------------------------------------------
なお、「-H」オプションでHTML形式での出力に対応します。同一フォルダに1.pngというファイルを置いておくと、グラフ風表示がされるようになります。
*あとがき
今回勉強がてらに初めてDBIとDBD::SQLiteとかも使っていますが、気楽なプログラミングにPerlって便利だなぁと再認識する日々だったり。
まさか家でSQL書くハメになるとは思わなかったけど(苦笑)
ともあれ、便利なモジュールを公開されている塚本さんに感謝です!
あと、このスクリプト関係でなにかあったらmixiのメッセージでご連絡頂ければと思います(^^;
コメント (4)
試しに使わせていただきました。
試みは大変おもしろいとおもうのですが、
私の環境では解析処理を行う度におなじ時間の足跡を重複カウントしてしまいます。
これはバグなのでしょうか?
環境は Win2kSP4+ActivePerl v5.8.6 です。
投稿者: ma | 2005年05月04日 15:53
日時: 2005年05月04日 15:53
WindowsXP環境ではうまくうごきましたが
Linux環境で動きませんでした。
LinuxはVineLinux 3.1
print "----------------------------------------------------------------------\n";
print "Count: NickName : Graph\n";
print "----------------------------------------------------------------------\n";
while(@row = $sth->fetchrow_array) {
my ($userName, $userId, $accessCount, $latestDate, $latestTime, $firstDate) = @row;
printf ("%05d: ", $accessCount);
printf ("%-20s: ", ($sjisMode ? Jcode::convert($userName,'sjis','euc') : $userName))
;
for(my $i = 0; $i < ($accessCount / 10 - 1); $i++){
print ("+");
}
for(my $i = 0; $i < ($accessCount % 10); $i++){
print ("-");
}
print ("\n");
}
print "----------------------------------------------------------------------\n";
}
ここらへんが全く動いていない様子です。SQLはわからないので報告まで。。
投稿者: yuzz | 2005年07月29日 17:33
日時: 2005年07月29日 17:33
WindowsXP環境ではうまくうごきましたが
Linux環境で動きませんでした。
LinuxはVineLinux 3.1
print "----------------------------------------------------------------------\n";
print "Count: NickName : Graph\n";
print "----------------------------------------------------------------------\n";
while(@row = $sth->fetchrow_array) {
my ($userName, $userId, $accessCount, $latestDate, $latestTime, $firstDate) = @row;
printf ("%05d: ", $accessCount);
printf ("%-20s: ", ($sjisMode ? Jcode::convert($userName,'sjis','euc') : $userName))
;
for(my $i = 0; $i < ($accessCount / 10 - 1); $i++){
print ("+");
}
for(my $i = 0; $i < ($accessCount % 10); $i++){
print ("-");
}
print ("\n");
}
print "----------------------------------------------------------------------\n";
}
ここらへんが全く動いていない様子です。SQLはわからないので報告まで。。
投稿者: yuzz | 2005年07月29日 17:35
日時: 2005年07月29日 17:35
Linux環境でのSQLite3でのUpdate文がどうも正しくうごいてなかったようです。前投稿の部分とは全く関係ありませんでした。
すみません(^^;;
投稿者: yuzz | 2005年08月02日 01:29
日時: 2005年08月02日 01:29