Vimeo SDKを使い動画を取得する
CM制作など動画を扱っているクライアント様から「Vimeoに登録している約4,000件の動画を自社のデータベースに取り込み、自社サイトで検索させたい」というご相談が御座いました。BtoB取引が主で、営業マンが営業先で参考としてお見せする動画を探したり、自社サイトにアクセスした一般ユーザーが予算を条件として検索するなどの機能が必要とのことでした。
現在は動画クリエイターがVimeoに納品し、顧客との紐付けや公開設定、タグ管理などはSalesforceで行うため、検索用のデータは手作業で登録していました。これをVimeo及びSalesforceから必要なデータをAPIでデータベースに取り込み、一列のレコードとするまでを自動化することで効率化しました。
今回はこのViemoからの動画の取り込みについて書きたいと思います。
Vimeo SDKのダウンロード
https://developer.vimeo.com/api/libraries
プラットフォームはPHPなので、該当するSDKをダウンロードし設置し、読み込みます。
1 2 | require 'vimeo_sdk/autoload.php' ; use Vimeo\Vimeo; |
トークンの取得
1 | $client = new Vimeo(client_id, client_secret, access_token); |
https://developer.vimeo.com/apps
client_id, client_secret, access_tokenはVimeoでAPPを作成した際に発行されます。
Vimeo動画を取得する
1 | $result = $client ->request( '/me/videos' ); |
とりあえずオプション無しで動画を取得すると、以下のような値が戻ってきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | Array ( [body] => Array ( [total] => 5997 [page] => [per_page] => 25 [paging] => Array ( [next] => /me/videos?page=2 [previous] => [first] => /me/videos?page=1 [last] => /me/videos?page=240 ) [data] => Array ( [0] => Array ( [uri] => /videos/*************** [name] => *********************** [description] => [type] => video [link] => https: //vimeo.com/********* [duration] => 543 [width] => 1920 [language] => [height] => 1080 |
ここで注目するのはpageです。全動画を一気に取得することは出来ず、25件づつ分割されています。
ページを指定してVimeo動画を取得する
1 | $result = $client ->request( '/me/videos' , array ( 'page' => 1, 'per_page' => 5, 'sort' => 'date' , 'direction' => 'asc' )); |
動画を日付昇順に5件づつに分割し、1ページ目を取得します。CRONで5分毎にpageを進めながら全動画を取得することにしました。
特定のフォルダーに入っている動画を取得する
1 | $result = $client ->request( '/me/folders/{フォルダーID}/videos' , array ( 'page' => 1, 'per_page' => 5, 'sort' => 'date' , 'direction' => 'asc' )); |
/manage/folders/12345
フォルダーIDはVimeo管理パネルで動画フォルダーへ移動した際のURL末尾の数字がフォルダーのIDになります。これを設定することでVimeoフォルダー内の動画のみを取得することが出来ます。
なお、フォルダーIDはフォルダー一覧から得られます。
1 | $result = $client ->request( '/me/folders' , array ()); |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | [0]=> array (10) { [ "created_time" ]=> string(25) "2020-06-08T01:35:09+00:00" [ "modified_time" ]=> string(25) "2020-10-05T03:28:30+00:00" [ "last_user_action_event_date" ]=> string(25) "2020-10-05T03:28:30+00:00" [ "name" ]=> string(1) "FolderName" [ "privacy" ]=> array (1) { [ "view" ]=> string(6) "nobody" } [ "resource_key" ]=> string(40) "***************************" [ "uri" ]=> string(32) "/users/FolderID/projects/2024842" [ "link" ]=> NULL |
その他、プロジェクト一覧やアルバム一覧なども取得可能ですが、ここでは省略いたします。
動画の取得自体は特に難しくはなく、それらをデータベースにインサート、次回は更新があった場合のみアップデートという自動処理を日に数回走らせました。詳細は省きますが、SalesforceからもAPIで動画管理データをSOQLで取得しデータベースにインサートし、VimeoのデータとJoinして利用するようにしました。