こんにちは、バズー株式会社、開発チームリーダーの清水です。
弊社はmixiアプリモバイル(携帯専用)をほうを専門にやってきましたが、mixiアプリ(PC版)を希望する声が多いため、mixiアプリについて調べてみました。mixiアプリは Javascript をガリガリゴリゴリ書くので、苦手です・・。しかもmixiの強力なキャッシュが効くらしく、それもやっかいです。
なんとか Javascript を最小限にして、PHP で書けないかと思い仕様書を見ていたら、PC でも RESTful API が使えるようです。RESTful API が使えるなら話は PHP だけで済みます(mixiアプリモバイルは RESTful API を使って実装します)。
外部サーバーからデータを取得する gadgets.io.makeRequest というのがあるので、それを使ってみました。ガジェットのソースはたったこれだけです!アプリのソースコードはすべてサーバー側に隠ぺいできます!
この場合、表示する部分はすべて、http://somewhere/ から HTML を取得して、それをそのまま表示させます。他に RSS フィードや JSON にも対応しているようですが、今回は無視(詳細はmixiアプリの仕様書をどうぞ)。
ちなみに POST には未対応(POSTに対応させるにはmixiアプリの仕様書をどうぞ)。外部サーバーでリダイレクトをかけてしまう場合も未対応です(こちらはたぶんどうしようもない)。
■gadget.xml
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="テストアプリ">
<Require feature="opensocial-0.8" />
<Optional feature="content-rewrite">
<Param name="exclude-urls"></Param>
<Param name="exclude-urls">.*</Param>
<Param name="include-tags"></Param>
</Optional>
</ModulePrefs>
<Content type="url" view="mobile" href="http://somewhere/mobile" />
<Content type="html">
<![CDATA[
<div id="contents" style="width:690px;height:500px;overflow:scroll;">
</div>
<script type="text/javascript">
var req_url = "/";
// GET
function do_get(url) {
var url = "http://somewhere"+url;
var params = {};
params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT ;
params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;
gadgets.io.makeRequest(url, function(response) {
if (response) {
document.getElementById("contents").innerHTML = response.data;
}
}, params);
}
// 初期化
function init() {
do_get("/");
}
// 起動完了時に呼ばれる関数の設定
gadgets.util.registerOnLoadHandler(init);
</script>
]]>
</Content>
</Module>
■リンクの書き方
リンクはすべて以下のようにガジェット内の get_url 関数を呼ぶように書き換えなければなりません。
<a href="javascript:void(0)" onclick="get_url('/some_module/some_action/param1/123/param2/345')">なんちゃら</a>
■懸案点
gadgets.io.makeRequest はどうやら AJAX 的に動くらしく、いくらリンクを叩いても PV が増えないようです。
その分、レスポンスは非常によいですが・・。




















コメントする