« Amazonアソシエイトプログラム支援プログラムAAA(Amazon Associate Assistants)の機能AAA LiveAssociateについて(2) | メイン | mixi Log Loader Ver.0.02公開 »

mixi"足あと"保存+解析Perlスクリプト "mixi Log Loader" 公開

遊びに行くつもりが風邪をひいてしまって家でゴロゴロしているのもアレなんで、ホビープログラミング。

塚本牧生さんが作られている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のメッセージでご連絡頂ければと思います(^^;

*更新履歴

*Ver.0.03 (2004/12/01)

  • HTML出力モードのデザインを大幅変更(h1要素の閉じ忘れも修正)
  • 途中でニックネームを変更した訪問者がいたときにダブルカウントされていた点を修正。

*Ver.0.02 (2004/11/23)

  • 「-n」のときは「-u」「-p」の必須チェックをはずすようにした。
  • EUC→Shift-JIS変換を明示的に指定するようにした(文字化け対策)
  • 「-H」オプションを追加。HTML形式に標準出力で出力する。

トラックバック

このエントリーのトラックバックURL:
http://hsj.jp/blog/mt-tb.cgi/1206

コメント (4)

ma:

試しに使わせていただきました。
試みは大変おもしろいとおもうのですが、
私の環境では解析処理を行う度におなじ時間の足跡を重複カウントしてしまいます。
これはバグなのでしょうか?

環境は Win2kSP4+ActivePerl v5.8.6 です。

yuzz:

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:

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:

Linux環境でのSQLite3でのUpdate文がどうも正しくうごいてなかったようです。前投稿の部分とは全く関係ありませんでした。
すみません(^^;;

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2004年11月23日 14:37に投稿されたエントリーのページです。

ひとつ前の投稿は「Amazonアソシエイトプログラム支援プログラムAAA(Amazon Associate Assistants)の機能AAA LiveAssociateについて(2)」です。

次の投稿は「mixi Log Loader Ver.0.02公開」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type