mixiアプリ » 技術仕様(Graph API方式) » PC » 写真をフォトアルバムにアップロードしてみよう
写真をフォトアルバムにアップロードしてみよう
こちらのAPIはサポート終了ました。
https://developer.mixi.co.jp/news/news_apps/016696.html
mixiアプリからフォトアップロードAPIを利用することにより、SAPが生成や加工を施した画像ファイルを、mixiアプリからユーザのかんたん公開アルバムに登録することができます。例えば、ユーザが既にmixiフォトのアルバムに登録した写真について、mixiアプリ上で加工などを行い、その結果をアルバムに再登録させることで、その加工された写真を元に友人とのコミュニケーションを生み出すことが可能です。更にその写真を見た友人がそのmixiアプリを使って新しい加工を施す・・・といった連鎖も行われるようになるでしょう。
本文書では、mixiアプリからフォトアップロードAPIについて、技術的な利用方法について説明いたします。
フォトアップロードAPI利用の事前準備
フォトアップロードAPIを利用するには、以下の事前準備をしておく必要があります。
- JavaScript API で提供されていますので、JavaScript API の利用準備を行っておく必要があります
-
利用には mixi_apps2 スコープのユーザ認可を取得しておく必要があります
ユーザ認可の方法についてはユーザ認可についてをご参照ください
アップロードの手順
mixiアプリからフォトアップロードAPIを使って画像ファイルをかんたん公開アルバムに登録するための手順は、以下となります。
- 登録したい画像ファイルをSAP側Webサーバ上で準備します。
- mixiアプリ内でフォトアップロード用APIを呼び出します。
- mixiサーバからSAP側Webサーバにフォトの取得要求が送信されます。
- SAP側Webサーバで署名の検証を行います。
- SAP側Webサーバは画像ファイルをmixiサーバに返送します。
- ユーザはmixiアプリ上で画像ファイルのサムネイルを閲覧し、登録するか選択します。
- 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として正しくない、など) |
401 | Insufficient scope | mixi_apps2 スコープのユーザ認可を取得していない |
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-----