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

mixiアプリ

mixiアプリ » 技術仕様(RESTful API方式) » PC » 写真をフォトアルバムにアップロードしてみよう

写真をフォトアルバムにアップロードしてみよう

こちらのAPIはサポート終了ました。
https://developer.mixi.co.jp/news/news_apps/016696.html

mixiアプリからフォトアップロードAPIを利用することにより、SAPが生成や加工を施した画像ファイルを、mixiアプリからユーザのかんたん公開アルバムに登録することができます。例えば、ユーザが既にmixiフォトのアルバムに登録した写真について、mixiアプリ上で加工などを行い、その結果をアルバムに再登録させることで、その加工された写真を元に友人とのコミュニケーションを生み出すことが可能です。更にその写真を見た友人がそのmixiアプリを使って新しい加工を施す・・・といった連鎖も行われるようになるでしょう。

本文書では、mixiアプリからフォトアップロードAPIについて、技術的な利用方法について説明いたします。

アップロードの手順

mixiアプリからフォトアップロードAPIを使って画像ファイルをかんたん公開アルバムに登録するための手順は、以下となります。

  1. 登録したい画像ファイルをSAP側Webサーバ上で準備します。
  2. mixiアプリ内でフォトアップロード用APIを呼び出します。
  3. mixiサーバからSAP側Webサーバにフォトの取得要求が送信されます。
  4. SAP側Webサーバで署名の検証を行います。
  5. SAP側Webサーバは画像ファイルをmixiサーバに返送します。
  6. ユーザはmixiアプリ上で画像ファイルのサムネイルを閲覧し、登録するか選択します。
  7. mixiサーバ内でかんたん画像アルバムに画像ファイルが登録されます。
画像ファイルの準備

登録したい画像ファイルを、mixiアプリが動作しているWebブラウザ上ではなく、SAP側のWebサーバ上で準備します。登録可能な画像ファイルの形式は「JPEG、PNG」となります。準備された画像ファイルをmixiサーバから取得可能とするため、ここで画像ファイルのURLを決定し、mixiアプリに伝えます。

フォトアップロード用APIの呼び出し

画像ファイルのURLを受け取ったmixiアプリ上で、フォトアップロード用APIを呼び出します。このAPIは、mixi.requestUploadMediaItem()関数となります。

static void mixi.requestUploadMediaItem(mediaItem, optCallback);

引数は以下となります。

名前 説明
mediaItem アップロードする画像ファイルのURLを持つopensocial.MediaItemオブジェクト
optCallback 処理が完了した後に呼び出されるコールバック関数。

この関数の呼び出し例を以下に示します。

var mediaItem = opensocial.newMediaItem(
        opensocial.MediaItem.Type.IMAGE, "http://server.name/image.png");
mixi.requestUploadMediaItem(mediaItem, function(response) {
    if (response.hadError()) {
        var code = response.getErrorCode();
        var msg = response.getErrorMessage();
        // エラー時の処理
    } else {
        // 成功時の処理
    }
});
画像ファイルのmixiサーバからの取得

上記のmixi.requestUploadMediaItem()関数を呼び出した後に、mixiサーバは指定されたURLに基づいて、画像ファイルの取得要求を送信します。SAP側Webサーバは、この取得要求に基づいて、予め準備しておいた画像ファイルをレスポンスとしてmixiサーバに返送します。

mixiサーバからのリクエストには、署名が付与されます。署名の検証には、この文書の最後に記載されている公開鍵を利用します。SAP側Webサーバは、この公開鍵を使って署名の検証を行うことで、mixiサーバからのリクエストかどうかの妥当性を必ず判断するようにしてください。

また、リクエストには「opensocial_owner_id」および「opensocial_app_id」パラメータが含まれます。これは署名のBase stringにも含まれるものです。mixiサーバからのリクエストであるという妥当性検証のほかにも、これらのパラメータを使用することで本人確認(画像ファイルを本当に対象ユーザに渡していいかどうか)も合わせて行うようにしてください。

署名つきリクエストの具体的な検証方法は、以下のドキュメントをご覧ください。

[署名つきリクエストの検証]
http://developer.mixi.co.jp/appli/spec/pc/require_servers#toc-4

ユーザの登録確認とコールバック関数の呼び出し

mixiサーバが画像ファイルの取得を完了した後に、本当にかんたん公開アルバムに公開していいかどうかを問い合わせるポップアップ画面が表示されます。そのポップアップ画面には、先ほどmixiサーバが取得した画像ファイルのサムネイル画像が表示されます。

ユーザが登録に同意あるいは拒否を行った後に、ポップアップ画面は閉じられ、mixi.requestUploadMediaItem()関数に指定したコールバック関数が呼び出されます。このコールバック関数の引数を使用して、登録に成功したかどうかを確認することが可能です。mixiアプリは成功したかどうかを必ず確認し、それぞれ適切な処理を実装するようにしてください。

エラーコード

もし投稿に失敗した場合、コールバック関数の引数に対してgetErrorCode()関数およびgetErrorMessage()関数を呼び出すことにより、エラーコードおよびエラーメッセージを取得することができます。以下に、エラーコードおよびその意味について示します。それぞれのエラーについて、ユーザに投稿処理の失敗を表示するなど、適切な処理を実装するようにしてください。

エラーコード エラーメッセージ 説明
400 Failed to fetch URL 指定されたURLへ画像を取りにいったが正常な応答(200)が得られなかった
400 Not supported image format 取得したコンテンツのmime-typeが、jpeg または png でなかった
400 Invalid params 引数が不正 (URLがURLとして正しくない、など)
403 Quota full ユーザがアップロードできる容量を越えている
403 Forbidden なんらかの理由によりアップロードAPIの使用が禁止されている
403 User canceled ユーザが処理の継続を拒否した
413 Image too large リクエストされた画像のサイズが大きすぎる
500 Internal Server Error mixi側のサーバエラーにより処理が完了できなかった

xoauth_signature_publickeyパラメータの値と対応する公開鍵

署名つきリクエストの妥当性を検証するために使用するxoauth_signature_publickeyパラメータの値と対応する公開鍵はそれぞれ以下となります。

xoauth_signature_publickeyパラメータの値

app_photo_20140502

公開鍵

-----BEGIN CERTIFICATE-----
MIIDNzCCAh+gAwIBAgIJAOI4hgKxdhkuMA0GCSqGSIb3DQEBBQUAMDIxCzAJBgNV
BAYTAkpQMREwDwYDVQQKDAhtaXhpIEluYzEQMA4GA1UEAwwHbWl4aS5qcDAeFw0x
NDA1MDIwNTE0MjVaFw0yNDA0MjkwNTE0MjVaMDIxCzAJBgNVBAYTAkpQMREwDwYD
VQQKDAhtaXhpIEluYzEQMA4GA1UEAwwHbWl4aS5qcDCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBAKWXYJpspPZ+l7ncUUtcSuvoFka2HJwnlw6KujogVEBU
EUagVrYsd3GIPq4102dqocApxkkMGaQlJdvYgAzfGBNth5UnypKvThS+W34xE33l
7Ldnik6I/R6HAZvUmeep3TkHysQjS0iCtCUCjH+uiAtba1DW8+iAn9A7j1YMxB/Q
OzFPJ9Psp100TSbAVYWr07wXf0T1aGVVBPWwJuh0ewk+v1YvFndZ/J11hvLHug6s
gorjEtrnM3hBmRLq6GV+uKrOMIqQmMv3ls8Xu9BbJ5Q7oqDI2PAS1x25jl4MBZAo
UICPGivqlt3A8MjntL68APn7o8/y6g9D4qTSsH7pU0kCAwEAAaNQME4wHQYDVR0O
BBYEFD7Kcy53OkWCJHjxXrOAhgRz7RzOMB8GA1UdIwQYMBaAFD7Kcy53OkWCJHjx
XrOAhgRz7RzOMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKC3Jo6e
X4sWqTBYwOnJAJZWgOJzn97LWlen3QdSyqbx/c8WGauOfRLSMbJawXni8Sl7RIUR
KFbfCg3wDPbzsl6/716p52diY63cdJPCGum2C2AlFNaDTGHaTtA1W16pT28R14ZW
y0cp2VX2MvvBgfbYPN9WvFlw2A+SJi6SNgZpRUpsNl8hTUXvGfr47rioREH2/KHN
FCLAVC1B8usSmBTtTYuGJv005by4KxwchNGcoH6n1Lb0ekENA45NFAcKMBe4Hdyn
dyUdys51Grh2fwe/0pupOJ6iJX3+pLACx0jvf09mjieFJEZ3kL9hQWlQ/NzsZQsU
Uhyna4w67WedXh8=
-----END CERTIFICATE-----

このページの上部へ