読者です 読者をやめる 読者になる 読者になる

halka-tech

技術的なことを書きます

mixiエコーを扱うclass書いた

php

あんまり好きじゃないんですが、mixiという粘着系インターネットにはtwitterのぱくりみたいなサービスがあります。
それがmixiエコーと言うらしいです。
mixiアプリと言うAPIか何かがあるらしいですが、よく分かりませんし携帯電話のアドレスを登録したくないのでエッチティーエムエルをパースしました。
書くに当たって調べたことをまとめて置きます。

使ったモノ

pearはinstallなりすればよいと思います。

発言のパース

ひたすらrecent_echo.plがはき出すソースを読みました。
そうするとdiv id=echoなんてのが出てきて、その下にマイミクの発言がtableになってました。
archiveListとかいうコンテナに入ってて、そこをパーサでさらいました。
tableになっているので、trをパースして中身を見ていましたら

<div id="echo_member_id_1" style="display: none;">id</div>
<div id="echo_post_time_1" style="display: none;">20090505214348</div>
<div id="echo_nickname_1"  style="display: none;">nickname</div>
<div id="echo_body_1"      style="display: none;">オナニードラッグロックンロール</div>

を発見したのでここの3つのパースしました。
display:noneで隠してるけどしっかりパースしやすいようにしているだなんて素敵ですね。
各人のエコーを表示するlist_echo.pl?id=なんとかも同じ構造でした。
文字コードeuc-jpなので適宜エンコードしてください。

発言

ソースを見てたらadd_echo.plにpostで渡せばいいことが分かったので普通に渡します。
bodyに文章がぶち込まれるみたいですし、どうやらpost_keyと言うハッシュかなんか(があったので、それも渡します。
あと、mixiのサーバがeuc-jpなので一応文章をeuc-jpにエンコードしました。
渡すモノとして

  • body
  • post_key

返信

基本的に発言と同じ内容をadd_echo.plにpostで渡せばいいみたいなんですが、twitterでいうところのReplyScreenNameと、ReplyStatusIDを渡して、誰のどの発言に対する返信なのかを判断しているみたいなので渡します。
bodyは本文ですし、post_keyはそういうことです。
RepleyScreenNameに該当するモノが返信したいエコーの発言者のidであるparent_member_id、ReplyStatusIDに該当するモノが返信したいエコーが送出された時刻であるparent_post_timeです。
渡すモノとして

  • body
  • post_key
  • parent_member_id
  • parent_post_time

使い方

よく分からないんですが、いろいろできそうです。

<?php
require_once 'mixiecho.php';
$mixi=& new mixi_echo;
//mixiにログインする
$email='メールアドレス';
$pass='パスワード';
$post_key='後ほど';
$mixi->login($email,$pass,$post_key);

//タイムラインを取得
$recent=$mixi->recent();
foreach($recent as $echo){
	echo $echo['body'].' by '.$echo['nickname'].'('.$echo['post_time'].")<br />\n";
}

//個人のエコーの発言リスト
$member=$mixi->user_echo('気になるあの子のid');
foreach($member as $echo){
	echo $echo['body'].' by '.$echo['nickname']."<br />\n";
}

//エコーに投稿
 $mixi->post('エキセントリック少年ボウイ');

 //返信
 $mixi->reply('ないわー',parent_member_id,parent_post_time);

?>

post_keyについて

mixiのサーバでデータベースに書き込むときに使うんでしょうがよく分かりません。
とりあえず発言するときに使うので、取得方法を以下に示します。
http://mixi.jp/recent_echo.plを開いてソースを表示させます。

<div id="echo">

の数行下にある

<input type="hidden" name="post_key" value="hogehoge">

ここのvalueの値です。

タイムラインのフォーマット

2次元配列で返します。

array
0 =>
array
'member_id' => string 'id'
'post_time' => string 'postした日付20090505201544みたいなかんじ'
'nickname' => string 'ニックネーム'
'body' => string 'ロマンポルシェ(本文)'

post_timeとmember_idは返信する時にparent_post_timeとparent_member_idの値として使います。
 
コードはgithubに置いておきます。http://gist.github.com/106980
とりあえず置いておきます。そのうちちゃんとsourceforgeとかに上げると思います。
http://exp.rw12.net/doc/mixi_echo.zip

こちらからダウンロードしてください.(随時アップデートして参ります.)
http://github.com/halka/mixi_echo/