Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

WWW::Mixi - 「もうひとつの Web」にアクセスする

国内随一のソーシャルネットワーキングサービス mixi に簡単にアクセスするためのモジュールである WWW::Mixi について説明します。

概要

Name WWW::Mixi
URI http://digit.que.ne.jp/work/?Perl%a5%e2%a5%b8%a5%e5%a1%bc%a5%eb%2fWWW%3a%3aMixi

2004 年初頭の orkut 登場により世界的に大流行したソーシャルネットワーキングサービス(以下、SNS)は、国内においても Greemixi といったサービスが立ち上げられ活況を呈する等、いまなおその規模は拡大しているところです。いまや、SNS は「もうひとつの Web」といっても過言ではないほどに、ネットワーカの生活になくてはならないものとなりつつあります。WWW::Mixi は、その SNS の中でも国内随一の規模を誇る mixi に簡単にアクセスできるよう考えられて設計されているモジュールです。

簡単な説明

WWW::Mixi は、配布サイトにおいて「LWP::UserAgent ライクなモジュール」と表現されている通り、LWP::RobotUA モジュールのサブクラスとして実装されており、そのため、WWW::Mixi により実装されている各種の便利な機能に加えて、LWP::UserAgent の各種メソッドを使用することができますし、また、robots.txt によるアクセス制限(制限の詳細については、mixirobots.txt を参照してください)への対応や、delay の設定等も可能であるため、ネットワークに優しいモジュールであるといえるでしょう。

詳しい使い方については後述の使用例や WWW::Mixi を利用している各種ツール、あるいはドキュメントを参照していただくこととして、ここではごく基本的な使い方を例示します。以下のような簡単なスクリプトにより、mixi へログインしトップページを取得することができます。

get_mixi.pl

#!/usr/bin/env perl

use strict;
use WWW::Mixi;

# 指定されたメールアドレス、パスワードにより、mixi にログイン
my $mixi = WWW::Mixi->new('メールアドレス', 'パスワード');
   $mixi->login;

# mixi トップページを取得し、標準出力に書き出す
my $response = $mixi->get('home');
print $response->content;

上記スクリプトを次のように実行します。

$ perl get_mixi.pl

あらかじめ指定されたログイン情報を用いて mixi にログインした後、ログインユーザ自身のトップページを取得し、その内容を標準出力に書き出します。

上記のスクリプトは、ログイン後に各種メソッドを用いることにより、その他の更新情報を取得するべく、簡単に機能を拡張することができます。たとえば、マイミクシィmixi における、友人の意)の最新日記一覧を取得するには、上記スクリプトに次の記述を追加します。

my @items = $mixi->get_new_friend_diary('refresh');
for my $item (@items) {
    print $item->{name}."の日記: ".$item->{subject}."\n";
}

ここでは単純に標準出力に書き出すのみですが、WWW::Mixi の各種データ取得・解析用メソッドは、結果をハッシュリファレンスの配列として返してくれるので、HTML::TemplateTemplate Toolkit のようなテンプレートエンジンによる扱いが非常に楽であるいう利点もあります。そのことは、WWW::Mixi を用いて CGI スクリプトを作成する場合に、おおいに実感されることであると思います。

また、余談になりますが、WWW::Mixi を用いて CGI スクリプトを作成するときに、コンストラクタ呼び出しの引数にログ出力のためのメソッドへを指定しなかった場合、注意が必要です。デフォルトでは、エラーメッセージを出力して die してしまうため、ログイン情報が正しくなかった場合の処理を行うたい時等に困ってしまうかもしれません。

上記の問題点をとりあえず回避するには、ログ出力メソッドを空のサブルーチンのリファレンスとして指定してやります。たとえば、コンストラクタへの引数を次のようにしていします。

my $mixi = WWW::Mixi->new('メールアドレス', 'パスワード', -log => sub {},);

本当はもっとちゃんと指定してやるべきなのでしょうが、こんなものでお茶を濁します ;-)

使用例 - コミュニティ退会の自動化

より詳細な使い方については、私が作成した mixi 更新情報チェックツール MiniMixi を含む後述の関連ツールを参照していただくとして、ここでは WWW::Mixi を利用して作成してたごく簡単なスクリプトを紹介いたします(例がネガティヴな機能を実装したスクリプトなのがアレなのですが…)。

mixi のあちこちをさまよっていると、面白そうな話題を取り扱っているコミュニティがたくさんあって、ついついたくさん入り過ぎてしまうということはないでしょうか。mixi の成熟とともに、非常に活発で有意義な内容を持つコミュニティがたくさんあらわれてきましたが、あまりに多くのコミュニティに参加していると、自分にとって真に有用な情報がノイズに紛れてしまうということにもなりかねません(というか、私自身、250 ほどのコミュニティに参加してしまい、そのような状態に陥っていました)。そこで、一度ふりかえって参加コミュニティを再検討してみるために、すべてをリセットしてみましょうということで、下記スクリプトを利用します。そもそも本当に興味のあることなど、そうそう数多くあるわけもないでしょうから、0 から再スタートする方がむしろ効率的というものです。

leave_community.pl

use strict;
use WWW::Mixi;
use Encode qw(from_to);

# 退会コミュニティ記録ファイル
my $log_file = 'community.txt';

die "usage: perl $0 <username> <password>\n"
  unless (@ARGV == 2);

my ($username ,$password) = @ARGV[0..1];
my $mixi = WWW::Mixi->new($username, $password);
   $mixi->login;

print "ログインしました。\n