Yahoo!ボックスAPI Hackathon向け資料

>100 Views

February 28, 14

スライド概要

profile-image

2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Yahoo!ボックスAPI Hackday資料 Yahoo! JAPAN ヤフー株式会社 スマートデバイス戦略室 スマートデバイス開発本部 開発2部 瀬川 秀樹

2.

本日の内容 1.Yahoo!ボックス紹介 -  サービス紹介        -  デベロッパー様へご案内 2.付録:1.アプリケーションの開発はじめの一歩 -  アプリケーションIdの取得から アクセストークン取得のフロー 3.付録:2.ボックスAPIを使ってみよう -  サンプルコードによるボックスAPIの使い方解説 2

3.

Yahoo!ボックスサービス概要 Yahoo!ボックスとは 写真や文書など、あらゆるファイルをサーバ上に置 いて管理できるサービスです。置いてあるファイルは ネット全体に公開して共有することもできます。 3

4.

1000万人突破! ユーザ数 4

5.

堅牢性の高い設計で 何重にもデータをバックアップ 5

6.

国内サーバ+バックボーンの回線が同業他社に比べて 圧倒的 6

7.

そんなYahoo!ボックスがAPIを 公開 7

8.

APIを使えばオンライン上のファイルの アップロード、ダウンロード、 コピー、移動、削除、公開 などができます 8

9.

本日デベロッパーの皆さまに お伝えしたい事 9

10.

ボックスAPIを使って サービスを 作ってみませんか!? 10

11.

Yahoo!  JAPAN  ID所有者全てに リーチ出来るアプリを開発できる! 11

12.

デカイIDを持つプラットフォームが あるんだからそれに 乗っかっちゃってください 乗らない手はありません 12

13.

今回のテーマは 未来のテレビの楽しみ方 皆さんは何を作りますか? 13

14.

テレビの楽しみ方 必ずしも テレビ単体で楽しまれている訳ではない 実況 検索 テレビを中心としながら それに付随する情報で 盛り上がる 投稿&参照 ながらながら・・・ 14

15.

翌日学校や会社で話題になる時代から リアルタイムでLINEやTwitterでシェア される時代へ 例えばオリンピックの個人実況など・・・ スピードが上がっている 15

16.

Yahoo!ボックスAPIを 使っていただければ 16

17.

Twitterのつぶやきなどの テキストデータ 17

18.

写真や動画

19.

ドキュメント 19

20.

ファイルの公開・共有 20

21.

あらゆるデータを自由に保存・ 引き出すことができます 21

22.

端末のストレージ領域に縛られることなく オンライン上にあるファイルを使った 自由な発想 22

23.

! なサービス 23

24.

デベロッパーの皆さまにも ! なサービスを作ってほしい 24

25.

それでは楽しい開発を! ご静聴ありがとうございました 25

26.

ここからはサンプルコードを 含めたデベロッパー向け解説ページです 26

27.

アプリケーションの開発 はじめの⼀一歩 27

28.

アプリケーションIDの取得 アプリを開発するためにはアプリケーションIDが必要です。 Yahoo!デベロッパーネットワークで取得してください。 はじめて開発する方はこちら すでにアプリケーションIDを 持っている方はこちら 28

29.

認証を通して使用するAPIの決定 アプリケーションIDにスコープ(アプリが使用する機能) を設定します。 利用するスコープに 「ボックス参照・更新機能」を入れてください。 29

30.

アプリケーションIDの確認 アプリで使うので控えておきます 30

31.

アクセストークンの取得⽅方法 31

32.

YConnect YConnect OAuth2.0の仕様に準拠した認可機能 http://developer.yahoo.co.jp/yconnect/ アプリがWebAPIへアクセスするための 「アクセストークン」を取得するための認可フロー 32

33.

YConnectユーザ認可の取得(ユーザからの見え方) 認証コード このアプリがユーザーに対して Yahoo!の各リソースへアクセスする 許可を求める画面です。 33

34.
[beta]
トークン、リフレッシュトークンの取り方(authorization)
//    1.認証コードを取得画⾯面を表⽰示
$appid        =  'dj0zaiZpPTZqSVJ5TW80NHh-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒-‐‑‒';
$url    =  ʻ‘https://auth.login.yahoo.co.jp/yconnect/v1/authorizationʼ’;
$params  =  '?response_̲type=code+id_̲token&client_̲id='.$appid.'&redirect_̲uri=oob&scope=openid&nonce=aaddeeff';
$url  .=  $params;
header(ʻ‘Location:  ʼ’.$url);  //  アプリケーションでYahoo!の認証画⾯面にリダイレクト
//  2.トークン取得エンドポイントにリクエストしてトークン、リフレッシュトークンを取得する
$appid    =  ʻ‘YJDNで取得するアプリケーションIDʼ’;
$secret  =  ʻ‘YJDNで取得するシークレットʼ’;
$code        =  ʻ‘1.で取得してユーザに⼊入⼒力力させた認証コードʼ’;
$url  =  ʻ‘https://auth.login.yahoo.co.jp/yconnect/v1/tokenʼ’;  //  トークン取得エンドポイント
$params    =  'grant_̲type=authorization_̲code&';
$params  .=  'code=ʻ‘.$code;
$params  .='&redirect_̲uri=oob';
$headers  =  array(
                                                    'Content-‐‑‒Type:  application/x-‐‑‒www-‐‑‒form-‐‑‒urlencoded;charset=UTF-‐‑‒8',
                                                    'Authorization:  Basic  '.base64_̲encode($appid.':'.$secret),
                                                    );
$curl  =  curl_̲init();
curl_̲setopt($curl,  CURLOPT_̲URL,  $url_̲token);
curl_̲setopt($curl,  CURLOPT_̲POST,  true);
curl_̲setopt($curl,  CURLOPT_̲RETURNTRANSFER,  true);
curl_̲setopt($curl,  CURLOPT_̲POSTFIELDS,  $params);
curl_̲setopt($curl,  CURLOPT_̲HTTPHEADER,  $headers);
curl_̲setopt($curl,  CURLOPT_̲VERBOSE,  true);
$result  =  curl_̲exec($curl);
curl_̲close($curl);

34	

35.
[beta]
トークン取得エンドポイントのレスポンスの例
string(1249)  
"{"access_̲token":"6GMsysoGhJvbEry5lYWU2ea3XsE7T4_̲xDq0tfAA1_̲AY5KiciO4QCCZEvrHUYUxySI43Vg4
rbdaQsdHrB0SmRDvjM.v4vBmWA8rmeX4qZzkqbt9BO9vZdoyfCYfDveBKN2ob8aatXQVECksRTH3WOQDFj
CcmRwnlgWCq0vyn.
1qs2Lm4OABpvyJ60bNclYp4bYnLnfg_̲2CWlSasQMzZFNddtRjd5HawBfe9nKUUfUOrybyqdefOKqR8B8lyHXT
92X1OL8w9vmEbsEA2wmYHek3yzM93RuhpstpEANARSI_̲JYX.vZLDrYuugFoP8S.Nr6rilL.
8SNyAI5XnSJ8vnjKl5q8Y_̲ly9kLKxWW1q8ftj60v1uK.hHVn21iV8hVy.LXuX8LcHYhKr2OBB4PHfJBRGCvbPay
rY3mmOL63C92Duo_̲Tnwqwymf6SQxWQu6O4KA8S0OgVJWFIsVaSxOtEcQwTJIc.RL1bvr6pQuysvEce5ZM
PWZi.U_̲6XqTFNLval1.OnqKWYSe0RQHK8Cj05GmoWRe7X7pCzwG2_̲pr0RLwjhlDkem.QXBDVpTahiLPEYK
C1O3s4rcuDVk4bPK4VaSX05EHnXHUn0oy5mjTZMaYULicpVw68K1nR5rpZ28VSR1BRiIPKcfCDdkTFx831p
B8CAALH67sKFJqGnvSonj6xoSwHDUoltpdBusP.Tw6okLb9HcpHEPLLFIweQwHyrg_̲A7SC8E7_̲VVBsG_̲H7h
DLjpq0Yo5gltrkE","token_̲type":"bearer","expires_̲in":"3600","refresh_̲token":"AJ5F3lI20AJ.
0kMFVZbABthjxGgNawjRERcbid5JFvhDdDsDovfP","id_̲token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.ey
Jpc3MiOiJodHRwczpcL1wvYXV0aC5sb2dpbi55YWhvby5jby5qcCIsInVzZXJfaWQiOiJTVlE2WlI3V1lMUFlUTj
NPVEtURVROMkdEUSIsImF1ZCI6ImRqMHphaVpwUFRacVNWSjVUVzgwTkhoTlZTWnpQV052Ym5OMWJX
VnljMlZqY21WMEpuZzlOVFEtIiwiaWF0IjoxMzkwOTA0NTE3LCJleHAiOjEzOTMzMjM2ODQsIm5vbmNlIjoiYW
FkZGVlZmYifQ.H0qnX_̲1PuxbmD4F_̲YLa1IA-‐‑‒GCNqw5byLiciSM9VXxwQ"}“
acess_̲tokenとrefresh_̲tokenは保存しておく。
access_̲tokenの有効時間は3600s
その後はaccess_̲tokenが無効になるので、保存しておいたrefresh_̲tokenでaccess_̲tokenを更更新する。
refresh_̲tokenの期限切切れの場合はやり直して両⽅方を新規取得する。

35	

36.

トークンを使用してユーザのGuidを取得する ・Guidとは   Yahoo!  JAPAN  IDをサービスで使わない(表⽰示しない)ために   Yahoo!  JAPAN  IDに「⼀一対」になった代替ID  (変わることはない) ・どうやって取るか   YConnectで⽤用意されているUserInfoAPIへリクエストして取得する   http://developer.yahoo.co.jp/yconnect/userinfo.html 36

37.
[beta]
取得したトークンでUserInfoAPIへリクエスト
・リクエスト(GET)
<?php
$access_̲token  =  ʻ‘取得したアクセストークンʼ’;
$httpHeader  =  array(
                                                          ʻ‘GET  /yconnect/v1/attribute?schema=openid  HTTP/1.1ʼ’,
                                                          ʻ‘Host:  userinfo.yahooapis.jpʼ’,
                                                          ʻ‘Authorization:  Bearer  ʻ‘  .  $access_̲token,
                                                              );
$curlSetOptArray  =  array(
                                                                        CURLOPT_̲URL                                      =>  'https://userinfo.yahooapis.jp/yconnect/v1/attribute?
schema=openid',
                                                                        CURLOPT_̲HTTPHEADER              =>  $httpHeader,
                                                                        CURLOPT_̲VERBOSE                        =>  true,
                                                                        CURLOPT_̲SSL_̲VERYFYPEER  =>  true,
                                                                        CURLOPT_̲HEADER                            =>  true,
                                                                        );
$ch  =  curl_̲init();
curl_̲setopt_̲array($ch,  $curlSetOptArray($ch,  $curlSetOptArray);
$result  =  curl_̲exec($ch);
curl_̲close($ch);

37	

38.

UserInfoAPI:レスポンス ・レスポンス {“user_̲id”:“SVQ6ZR7WYLPYTN3OTKTETN2GDQ”     Guid(user_̲id)が返ってきます。(後ほど使います) 38

39.

ボックスAPIを使ってみよう 39

40.

ボックスの仕様 Sid(StorageID) ユーザに紐づくストレージ上の領域ID UniqId 各ファイル・フォルダに振られる ユニークID Sid+UniqIdの組み合わせでストレージ上の オブジェクトを指定する 40

41.

ボックスの仕様:公開について 公開URL 見せたいファイルを 公開状態にする 41 公開URLから いつでも参照できる

42.

ボックスの仕様:公開のポイント ・継承公開 上位フォルダに公開設定をするとその配下全ての ファイル・フォルダも「継承公開」として公開状態になる仕様。 継承公開されているかどうかは 「PublicInherited」フラグで判断することができる。 ・コピー コピーすると、コピー先での予期せぬ公開を防ぐためコピー先 ファイル・フォルダの全ての公開情報がリセットされる。 ・移動 移動は公開状態が維持されたまま移動される。 Sid  UniqIdは変わらない。 42

43.

ボックスの仕様:継承公開について 公開 継承公開 継承公開 継承公開 継承公開 公開 継承公開 継承公開 43

44.

ボックスAPIの使い方 サンプルコードを通してAPIの基本的な使い方を解説します。 フォルダ作成やアップロードなどの結果は実際にボックスを 確認しながら行ってみてください。 ユーザ情報取得 作成したフォルダ にアップロード フォルダ作成 44 アップロードした ファイルを公開する

45.

ボックスユーザ情報取得:リクエスト <?php $access_̲token  =  ʻ‘取得したアクセストークンʼ’; $guid  =  ʻ‘取得したGuidʼ’; $url  =  ʻ‘https://ybox.yahooapis.jp/v1/user/fullinfo/ʼ’  .  $guid; $httpHeader  =  array(                                                        ʻ‘Host:ybox.yahooapis.jpʼ’,                                                        ʻ‘Authorization:  Bearer  ʻ‘  .  $access_̲token,                                                            ); $curlSetoptArray  =  array(                                                                      CURLOPT_̲URL  =>  $url,                                                                      CURLOPT_̲HTTPHEADER  =>  $httpHeader,                                                                      CURLOPT_̲RETURNTRANSFER  =>  true,                                                                      CURLOPT_̲VERBOSE  =>  true,                                                                      CURLOPT_̲HEADER  =>  true,                                                                      ); $ch  =  curl_̲init(); curl_̲setopt_̲array($ch,  $curlSetoptArray); $result  =  curl_̲exec($ch); curl_̲close($ch); 45

46.

ボックスユーザ情報取得:レスポンス <?xml  version="1.0"  encoding="UTF-‐‑‒8"?> <User> <Guid>NG33XHXZ5GMCQBYUHODK5IFENQ</Guid> <isService>true</ServiceStatus> <isSuspend>false</ServicesSuspend> <QuotaOver>false</QuotaOver> <Sid>box-‐‑‒l-‐‑‒e7q4pp5kzdohdpe7vvheelgpce</Sid>  (ユーザのSid) <RootUniqId>d9b6ed3f-‐‑‒3826-‐‑‒4f3b-‐‑‒a47f-‐‑‒5e09a73cbe69</RootIUniqId>(ユーザのルートデ ィレクトリ「/」(マイボックス)のUniqId) <Quota> <Max>53687091200</Max>    使⽤用できる容量量(Byte) <TotalUsed>2242518</TotalUsed>      現在使⽤用している容量量(Byte) </Quota> </User> 次:ルートディレクトリ「/」(マイボックス)のUniqIdが取得出来たので、ルートディレクトリにフォルダを作成する 46

47.
[beta]
フォルダ作成:リクエスト
$sid  =  ʻ‘ユーザのSidʼ’;
$uid  =  ʻ‘ルートディレクトリ「/」のUniqIdʼ’;
$access_̲token  =  ʻ‘取得したアクセストークンʼ’;
$url  =  'https://ybox.yahooapis.jp/v1/file/'  .  $sid  .  '/'.$uid;
//  フォルダ作成のボディ
$body  =  ʻ‘<?xml  version=“1.0”  encoding=“UTF-‐‑‒8”?><Object><Name>作成したいフォルダの名前</Name></Object>ʼ’;
$httpHeader  =  array(
                                                                  'Host:ybox.yahooapis.jp',
                                                                  'Authorization:  Bearer  '  .  $access_̲token,
                                                                    );
$curlSetoptArray  =  array(
CURLOPT_̲URL                                              =>  $url,
CURLOPT_̲HTTPHEADER                  =>  $httpHeader,
CURLOPT_̲RETURNTRANSFER  =>  true,
CURLOPT_̲VERBOSE                                =>  true,
CURLOPT_̲HEADER                                    =>  true,
CURLOPT_̲POST                                            =>  true,
CURLOPT_̲POSTFIELDS                      =>  $body,
);
$ch  =  curl_̲init();
curl_̲setopt_̲array($ch,  $curlSetoptArray);
$result  =  curl_̲exec($ch);
curl_̲close($ch);

47	

48.
[beta]
フォルダ作成:レスポンス
<?xml  version="1.0"  encoding="utf-‐‑‒8"  ?>
<Object>
<Sid>box-‐‑‒l-‐‑‒svq6zr7wylpytn3otktetn2gdq-‐‑‒1004</Sid>
<UniqId>17c80ee0-‐‑‒612e-‐‑‒481b-‐‑‒b73b-‐‑‒3afaf59f1aa6</UniqId>  作成されたフォルダのUniqId
<Path><![CDATA[/作成したいフォルダの名前]]></Path>
<ModifiedTime>2014-‐‑‒02-‐‑‒06T19:56:32+09:00</ModifiedTime>
</Object>

次:フォルダにファイルをアップロードする
48	

49.

フォルダ作成されたか確認する ボックスWebを開いてフォルダが作成されたかどうか確認 49

50.
[beta]
アップロード:リクエスト
<?php
$token  =  ʻ‘アクセストークンʼ’;
$sid  =  ʻ‘ユーザのSidʼ’;
$uid  =  ʻ‘アップロードするフォルダのUniqIdʼ’;
$file  =  ʻ‘/tmp/test.jpgʼ’;
$file_̲name  =  ʻ‘test.jpgʼ’;
$body  =  file_̲get_̲contents($file);
$headers  =  array(
                                                    ʻ‘Authorization:  Bearer  ʼ’  .  $token,
                                                    ʻ‘Content-‐‑‒Type:  multipart/form-‐‑‒dataʼ’,
                                                    ʻ‘Content-‐‑‒length:  ʻ‘  .  filesize($file),
                                                    ʻ‘box-‐‑‒obj-‐‑‒sid:  ʻ‘  .  $sid,
                                                    ʻ‘box-‐‑‒obj-‐‑‒parentuniqid:  ʻ‘  .  $uid,
                                                    ʻ‘box-‐‑‒obj-‐‑‒filename:  ʻ‘.  $file_̲name,
                                                    ʻ‘box-‐‑‒obj-‐‑‒md5:  ʻ‘  .  Md5($body),
                                                        );
$url  =  'https://upload.ybox.yahooapis.jp/v1/upload';
$curl  =  curl_̲init($url);
curl_̲setopt($curl,CURLOPT_̲HEADER,  true);
curl_̲setopt($curl,CURLOPT_̲HTTPHEADER,  $headers);
curl_̲setopt($curl,CURLOPT_̲POST,true);
curl_̲setopt($curl,CURLOPT_̲RETURNTRANSFER,  true);
curl_̲setopt($curl,CURLOPT_̲POSTFIELDS,$body);
curl_̲setopt($curl,CURLOPT_̲VERBOSE,true);
$result  =  curl_̲exec($curl);
if(!curl_̲errno($curl)){
        $response_̲header  =  curl_̲getinfo($curl);
}
curl_̲close($curl);
var_̲dump($result);

50	

51.
[beta]
アップロード:レスポンス
<?xml  version="1.0"  encoding="utf-‐‑‒8"  ?>
<Object>
<Name>test.jpg</Name>
<Sid>box-‐‑‒l-‐‑‒svq6zr7wylpytn3otktetn2gdq-‐‑‒1004</Sid>
<UniqId>0c703d7c-‐‑‒3e10-‐‑‒4af2-‐‑‒bccc-‐‑‒4539492a5c18</UniqId>アップロードされて発⾏行行された
UniqId
<Etag>"5ddf0bde1391418521237985"</Etag>
<ModifiedTime>2014-‐‑‒02-‐‑‒03T18:08:41+09:00</ModifiedTime>
<Path>/作成したいフォルダの名前/test.jpg</Path>
<Url>https://yoctfs.jp/res/box-‐‑‒l-‐‑‒svq6zr7wylpytn3otktetn2gdq-‐‑‒1004?
account=storage&amp;expires=1391418642&amp;uid=0c703d7c-‐‑‒3e10-‐‑‒4af2-‐‑‒
bccc-‐‑‒4539492a5c18&amp;signature=NzY2ODkyM2MyNzc5YmQ1YWRmMmY1N2YxZWQ3NTh
kMWEyZDJmYjYyMg-‐‑‒-‐‑‒</Url>
</Object>

次:アップロードしたファイルを公開設定する

51	

52.

アップロードされたか確認する ボックスWebを開いてファイルがアップロードされたか確認 52

53.

ファイル公開:リクエスト ・リクエスト:公開したいファイルのUniqIdを指定してリクエスト(PUT) $sid  =  ʻ‘ユーザのSidʼ’; $uid  =  ʻ‘公開したいファイルのUniqIdʼ’; $url  =  'https://ybox.yahooapis.jp/v1/file/public/'.$sid.'/'.$fuid; $httpHeader  =  array(        'Host:ybox.yahooapis.jp',        'Authorization:  Bearer  '  .  $access_̲token, ); $curlSetoptArray  =  array(                                                                            CURLOPT_̲URL                        =>  $url,                                                                            CURLOPT_̲HTTPHEADER          =>  $httpHeader,                                                                            CURLOPT_̲RETURNTRANSFER  =>  true,                                                                            CURLOPT_̲VERBOSE                =>  true,                                                                            CURLOPT_̲HEADER                  =>  true,                                                                            CURLOPT_̲PUT  =>  true,                                                                              ); $ch  =  curl_̲init(); curl_̲setopt_̲array($ch,  $curlSetoptArray); curl_̲exec($ch); $response_̲header  =  curl_̲getinfo($ch); curl_̲close($ch); 53

54.

公開されたか確認してみる ボックスWebを開いてファイルが公開状態になっているか確認 54

55.

参考資料 •Yahoo!デベロッパーネットワーク(YJDN) http://developer.yahoo.co.jp/ •ボックスAPI http://developer.yahoo.co.jp/webapi/box/ •YConnect http://developer.yahoo.co.jp/yconnect/ •Yahoo!ボックス http://info.box.yahoo.co.jp/index.html 写真素材:©株式会社データクラフト 55