mixi Developer Center (ミクシィ デベロッパーセンター)

mixiアプリ

mixiアプリ » 技術仕様(RESTful API方式) » モバイル » ページ遷移とAPIアクセス

ページ遷移とAPIアクセス

ページ遷移を行う(GET)

アプリケーション内で別のページに遷移するには、urlパラメータで遷移先のURLを指定します。アプリIDは、SAPサーバーにopensocial_app_idというパラメータが送られてきますので、これを利用してください。

http://ma.mixi.net/[アプリID]/?url=[エスケープ済みURL]

先頭の http://ma.mixi.net/[アプリID]/ の部分はアプリケーションごとに常に固定なので、次のような書き方も可能です。

<a href="?url=http%3A%2F%2Fexample.com%2Ffoo%2Fbar%3Fa%3D1%26b%3D2">次のページ</a>

また、ユーザがアクセスしている端末のキャリアがドコモの場合には、”guid=ON”パラメータも付加してください。これは、mixiへのログイン状態を維持するために必要になります。以下に例を示します。

<a href="?guid=ON&url=http%3A%2F%2Fexample.com%2Ffoo%2Fbar%3Fa%3D1%26b%3D2">次のページ</a>

ページ遷移を行う(POST)

次にPOSTメソッドを使って、携帯電話からformデータを送信する方法を説明します。urlパラメータで指定する点は、GETメソッドと同じです。このとき、携帯電話からPOSTメソッドで送信されたデータは、SAPサーバにもPOSTメソッドで送信されます。
この点だけ注意していただければ、通常のWebアプリケーションのように作成することができます。

以下にFormタグの記述例を示します。

<form action="?guid=ON&url=http%3A%2F%2Fexample.com%2Ffoo%2F" method="post">
  <input name="field1" type="text" value="value1" />
  <input type="submit" value="送信" />
</form>

もしくは、次のように記述することもできます。

<form action="?guid=ON" method="post">
  <input name="url" type="hidden" value="http://example.com/foo/" />
  <input name="field1" type="text" value="value1" />
  <input type="submit" value="送信" />
</form>

RESTful APIでプロフィールを取得する

RESTful APIにアクセスするためには、APIリクエストに適切なOAuth Signatureを付加する必要があります。
Google App Engine上でプロフィール情報を取得して表示するサンプルを以下に示します。

#!/usr/bin/env python
import os
import oauth
import logging
import urllib, urllib2

from google.appengine.api import memcache
from google.appengine.api import urlfetch
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app
from django.utils import simplejson

CONSUMER_KEY = 'YOUR_CONSUMER_KEY'
CONSUMER_SECRET = 'YOUR_CONSUMER_SECRET'
BASE_URL = 'http://api.mixi-platform.com/os/0.8'

def get_person(user_id):
    data = memcache.get('person-%s' % user_id)
    if data is not None:
        return data

    consumer = oauth.OAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET)
    params = {'xoauth_requestor_id': user_id,
              'format': 'json',
             }

    request = oauth.OAuthRequest.from_consumer_and_token(
                  consumer,
                  http_method = 'GET',
                  http_url = BASE_URL + '/people/@me/@self',
                  parameters = params,
              )
    request.sign_request(oauth.OAuthSignatureMethod_HMAC_SHA1(), consumer, None)

    uri = '%s?%s' % (request.http_url, urllib.urlencode(params))
    r = urllib2.Request(uri, headers=request.to_header())

    try:
        data = simplejson.loads(urllib2.urlopen(r).read())
        memcache.add('person-%s' % user_id, data, 3600)
        return data
    except urllib2.HTTPError, e:
        logging.error(e)
        return False
    except:
        return False

class HelloHandler(webapp.RequestHandler):
    def get(self):
        self.response.headers['Content-Type'] = 'application/xhtml+xml; charset=Shift_JIS'
        owner_id = self.request.get('opensocial_owner_id')
        if owner_id:
            person = get_person(owner_id)

        template_values = {
            'app_id': self.request.get('opensocial_app_id'),
            'user_info': person['entry'] if person else None,
        }

        path = os.path.join(os.path.dirname(__file__), 'tmpl/hello.html')
        self.response.out.write(template.render(path, template_values))

application = webapp.WSGIApplication([
    (r'/hello',    HelloHandler),
], debug=True)

def main():
    run_wsgi_app(application)

if __name__ == '__main__':
    main()

テンプレートファイル

<?xml version="1.0" encoding="Shift_JIS"?>
<!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.0) 1.0//EN" "i-xhtml_4ja_10.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" dir="ltr">
<head>
  <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" />
  <title>mixiアプリモバイル</title>
</head>
<body>
<div style="text-align:center">
{% if user_info %}
  <img src="{{ user_info.thumbnailUrl }}" /><br />
  {{ user_info.displayName }}
{% else %}
  プロフィール情報の取得に失敗しました。
{% endif %}
</div>
</body>
</html>

このページの上部へ