mixi4j

通勤の間ぼけーっと考えていた。
Eclipseで開発以外のことできたら楽しいかなぁと。
そういえば Twitterclipse ってあったな。
それをまねして、mixiできるmixiclipseとかって楽しいかな。
それに ひとりWikiみたいにWikiclipse とか。

調べてみると、Wikiはすでにあった。
Eclipse Wiki
まあこれは明らかに難しいので、あまりやる気はなかったが・・・w


EntertainmentなEclipseという新しい分野を開拓するもの楽しそうではないか。
All in One Entertainment Eclipseみたいな感じ。
AOEEを入れれば、2chブラウザmixiYouTubeが統合的に楽しめます。みたいな感じ。
EclipseTVとかいいかも。
妄想がふくらむなぁ。生産性低減だ。


さてはて、妄想ばかりでも仕方ないので、とりあえずMixiClientを実装してみた。思ったよりは簡単だった。
スーパーバギーなソースだけど、とりあえず載せてみる。

import java.io.BufferedReader;
import java.io.InputStreamReader;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;

public class MixiMain {
    
    public static void main(String[] args) {

        HttpClient httpClient = new HttpClient();
        
        String encode     = "EUC-JP";
        String nextUrl   = "/home.pl";

        String userName = "mailaddress";
        String password = "password";

        String loginUrl     = "http://mixi.jp/login.pl";
        String homeUrl      = "http://mixi.jp/home.pl";
        String friendUrl    = "http://mixi.jp/list_friend.pl";
        String diaryUrl     = "http://mixi.jp/new_friend_diary.pl";
        String communityUrl = "http://mixi.jp/list_community.pl";
        String albumUrl     = "http://mixi.jp/new_album.pl";
        
        PostMethod postMethod = new PostMethod(loginUrl);

        postMethod.addParameter("email", userName);
        postMethod.addParameter("password", password);
        postMethod.addParameter("next_url", nextUrl);
        
        try {
            httpClient.executeMethod(postMethod);
            postMethod.releaseConnection();

            GetMethod getMethod = new GetMethod(diaryUrl);
            httpClient.executeMethod(getMethod);
            
            BufferedReader br = new BufferedReader(
				new InputStreamReader(
				getMethod.getResponseBodyAsStream(), encode));

            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
            getMethod.releaseConnection();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

HttpUrlConnectionでもよかったんだけど、Cookieとか使うかもしれないからHttpClientで実装した。
GetMethodのコンストラクタに渡すURLを変えれば、友達リストとかコミュニティとかが取れる。


もうちょっと頑張ってまともに実装して、mixi4jとか作ってみたい。
適当に設計して、適当にスクレイピングすればできそう。


プログラムからのアクセスは許されるか?と思って利用規約を読んでみた。
# User-Agent: Jakarta Commons-HttpClient/3.1-rc1でリクエストできてしまう

サーバーに負担をかける行為、および他のユーザーのアクセスまたは操作を妨害する行為。

微妙なのはこれくらいかな。
あとはやっぱりスパムになるとまずそう。更新系を実装するのは止めておこう。
# 実装したいけど・・・


正直、オブジェクト指向なクラス設計ってよくわからない。
作りながら飲みながら考えるか。