mixiアプリを作ってみた

前々から興味のあった mixi アプリを作ってみた。そのときのメモ。あまりきちんと調べていないので嘘が紛れ込んでいるかも。

作ったもの

  • RSS リーダ
  • 動いているのを確認し、実際に自分のページに設置してみた
  • まだ公開レベルは非公開

基本的には

mixi Developer Center に従えばOK。
その上でちょっと詰まったところをメモしときます。

mixiDeveloper に登録

mixi アプリを作成するためには、下記リンクより mixiDeveloper に登録する必要がある。

その際、本名・住所・携帯のメールアドレスを記入する必要があった。非常に抵抗があったけど結局正直に登録。


参考:

アプリを作成する

まだ何も作っていなくても、とりあえずは「アプリを作成する」必要がある。mixi アプリを動作させる場所を確保する、というイメージ? 登録しても最初の設定は非公開となっており、しばらく動作テストさせてから公開、という流れになる。
んで、ここで重要なのは ガジェット URLmixi アプリは外部のサーバにその本体ファイルを置く必要がある。自分は web サーバ をレンタルしているので http://hogehoge/gadget.xml という名前を指定しておいた。別にファイル名は何でも OK 。

mixi アプリってどうやって動作しているのか

ここで mixi アプリはどう実現するのか調べた。細かいことは置いといて

  • JavaScript ( もしくは Flash ) で動作
  • mixi アプリ用のライブラリを使ってコードを書くイメージ
  • 外部サーバに設置した ( xml ) ファイルを mixi 側から読み込んで実行させる

って感じ。
JavaScript APIより、サンプルコードや API を確認できる。ちなみにマイミクシィの情報は ニックネーム, URL, サムネイル くらいしか取得できないっぽい。マイミクシィの血液型を取得しようとして 3 時間くらいはまった。

RSS リーダアプリを作成

http://wazgo.typepad.jp/mixi_appli/2009/04/mixirss-970b.html のエントリを参考に Google AJAX Feed API を使った RSS リーダアプリを作成した。書いたコードは上記エントリと「読んでいる RSS, Google AJAX API キー」以外同じものなので割愛。そしてファイルを web サーバにアップロード。上のほうで指定したガジェット URL に対応するように。
これで完成。アプリのページやらプロフィールのページやらで動作しているところが確認できた。

twitter の非公開な自分のつぶやきを mixi アプリで表示させる

これはちょっとしたネタ。RSS リーダアプリで twitter の自分のつぶやきを読み込ませたかったが、つぶやきは非公開に設定してある。Google AJAX Feed API で認証を行うやり方がわからなかった ( というか疲れて調べる気がしなかった ) ので、こんな CGI スクリプトを書いてサーバに設置した。

rss.cgi

#!/usr/local/bin/ruby

require 'rubygems'
require 'twitter'
require 'time'
require 'rss/maker'
require 'cgi'

USERNAME = 'username'
PASSWORD = 'password'

RSS_VERSION = '2.0'
CHANNEL_TITLE = "timeline of #{USERNAME}"
CHANNEL_DESCRIPTION = CHANNEL_TITLE
CHANNEL_LINK = 'http://hogehoge/rss.cgi'
CHANNEL_LANGUAGE = 'ja'


rss = RSS::Maker.make( RSS_VERSION ) do |maker|

  maker.channel.about = CHANNEL_LINK
  maker.channel.title = CHANNEL_TITLE
  maker.channel.description = CHANNEL_DESCRIPTION
  maker.channel.link = CHANNEL_LINK
  maker.channel.language = CHANNEL_LANGUAGE

  client = Twitter::Base.new( Twitter::HTTPAuth.new( USERNAME, PASSWORD ) )
  client.user_timeline.each do |s|
    item = maker.items.new_item
    item.title = "#{s.text}"
    item.link = "http://twitter.com/#{USERNAME}/status/#{s.id}"
    item.date = Time.parse( s.created_at )
  end

end

cgi = CGI.new
print cgi.header( { 'type' => 'application/xml', 'charset' => 'UTF-8' } )
puts rss.to_s

これは以前の記事と RSS::Maker を組み合わせて、twitter の呟きを取得し RSS として出力する CGI。んで、この CGI の URL に対して、mixi アプリからアクセスさせれば見事非公開呟きが表示できた。

追記
http://username:password@hoge.com/hoge.xml

って感じで basic 認証超えられるもよう

参考:http://d.hatena.ne.jp/foodp/20070219/

追追記 : google ajax feed api にこの書き方は使えない?? 自分のmixiアプリの環境では認証できなかった。

その他

テスト環境

どうやらローカルでは mixi アプリの動作を確認できないっぽい。( eclipseプラグインがあるようだけど、自分のマシンのスペックでは少しきついのでパス ) 。だから実際に設置して、アプリのページで動作確認、で動作テストを行った。正直非常に面倒。

キャッシュ

動作テストで、設定を変えたのに反映されないことがある。それはキャッシュが残っているため。以下のエントリを参考に対策

URL

http://platform001.mixi.jp 下じゃないとアプリは動作しない模様。 http://mixi.jp 下ではアプリの存在が見えないので最初焦った。