Help us understand the problem. What is going on with this article?

PHPからvimeo APIを使う(情報取得、変更、アップロード)

More than 3 years have passed since last update.

概要

きちんと規約にのっとった動画を配信するなら、Vimeoは非常に安価で高品質で埋め込みドメイン制限もかけられて便利!
ということで、VimeoのAPIを使ってみます。
言語はPHP使います。

公式リファレンス

Vimeo Developer API
https://developer.vimeo.com/

公式ライブラリ

https://developer.vimeo.com/api/libraries
ここからPHPのライブラリをダウンロードします。

手順

具体的にアクセスするまでの手順です。

APIにアクセスするためのアプリを作成する

https://developer.vimeo.com/apps
から、アプリを作成します。

トークンの発行

万人がつかうアプリでなければ、あらかじめアクセストークンを発行しておいて、それでアクセスできます。
不特定多数が使うアプリの場合は、都度アクセストークンを発行できます。
今回は、前者の「あらかじめアクセストークンを発行しておく方法」を使います。

  1. 前の手順で作成したアプリの画面に入り「Authentication」タブを開きます。
  2. 下のほうに「Generate an Access Token」という欄があるので、トークンに与える権限を設定して、「Generate Token」ボタンをクリックします。
  3. アクセストークンが表示されるので、すぐにメモしておきます。(作成した瞬間しか表示されません。)

PHPからの接続

ライブラリのロードあたりで、公式サンプルの通りでうまく動かず戸惑いましたが、以下そのままコピペしてもらえれば動きます。
ダウンロードしたものを lib フォルダにリネームしていれています。

//事前にダウンロードしたライブラリをロード
require("./lib/autoload.php");

//アクセス情報
$config = array();
$config['client_id'] = 'XXXXXXXXXX';
$config['client_secret'] = 'XXXXXXXXXX';
$config['access_token'] = 'XXXXXXXXXX';

//Vimeoに接続
$lib = new \Vimeo\Vimeo($config['client_id'], $config['client_secret'], $config['access_token']);

//ひとまず、自身の情報を取得してみる
$user = $lib->request('/me');
echo '<pre>';
print_r($user);
echo '</pre>';

アクセス方法

できることは、こちらにすべて明記されています。
https://developer.vimeo.com/api/endpoints

また、WEB上からAPIアクセスを試すことができます。
https://developer.vimeo.com/api/playground/

以下主要なAPIアクセス方法のメモ(XXXXXXXXは、video_idにおきかえてください。)

自身のアカウント情報を取得

$user = $lib->request('/me');
echo '<pre>';
print_r($user);
echo '</pre>';

自身のビデオリストを取得

$result = $lib->request('/me/videos', array('page' => 1, 'per_page' => 10));
//echo '<pre>';
//print_r($result);
//echo '</pre>';
//データ整形:リンクのみリストアップしてみる
for($cnt=0;$cnt<count($result['body']['data']);$cnt++){
    echo '<a href="'.htmlspecialchars($result['body']['data'][$cnt]['link']).'" target="_blank">'.htmlspecialchars($result['body']['data'][$cnt]['name']).'</a><br>';
}

自身のビデオリストを取得(古いもの順)

$result = $lib->request('/me/videos', array('page' => 1, 'per_page' => 10, 'sort'=>'date', 'direction'=>'asc'));
//echo '<pre>';
//print_r($result);
//echo '</pre>';
//データ整形:リンクのみリストアップしてみる
for($cnt=0;$cnt<count($result['body']['data']);$cnt++){
    echo '<a href="'.htmlspecialchars($result['body']['data'][$cnt]['link']).'" target="_blank">'.htmlspecialchars($result['body']['data'][$cnt]['name']).'</a><br>';
}

クエリをつけて検索

  • どうもうまくいかない:neutral_face:ので、いったん保留。

自身の1つのビデオの詳細情報取得

$result = $lib->request('/me/videos/XXXXXXXX');
echo '<pre>';
print_r($result);
echo '</pre>';

ビデオの情報変更

$result = $lib->request('/videos/XXXXXXXX',array('name'=>'ビデオのタイトル','privacy'=>array('view'=>'disable','download'=>0,'embed'=>'whitelist'),'review_link'=>0),'PATCH');  
echo '<pre>';
print_r($result);
echo '</pre>';

参考 https://developer.vimeo.com/api/endpoints/videos#PATCH/videos/
Boolean型は 0 1 で指定

自身のEmbedプリセット一覧取得

$result = $lib->request('/me/presets');
echo '<pre>';
print_r($result);
echo '</pre>';

動画に設定済みのEmbedプリセットを割り付ける

$result = $lib->request('/videos/XXXXXXXX/presets/YYYYYYYY',array(),'PUT');
echo '<pre>';
print_r($result);
echo '</pre>';

YYYYYYYYはプリセットID。
プリセットIDは、プリセット一覧取得したときに[uri] => /users/ZZZZZZZZ/presets/YYYYYYYYというデータが入ってくるので、その数値。ちなみに、ZZZZZZZZはユーザーID。

動画をURLからアップロード

$result = $lib->request('/users/ZZZZZZZZ/videos',array('type'=>'pull','link'=>'http://動画までのURLフルパス'),'POST');
echo '<pre>';
print_r($result);
echo '</pre>';

ZZZZZZZZはユーザーID。
すぐに動画ID発行されてレスポンスあるので、一括アップロードなどは、これが便利。

APIの呼び出し制限(追記)

実際に、一括アップロードするようなプログラムを書いたところ、以下のようなエラーが発生。
161223_vimeoapi.PNG
1時間当たりのAPIの呼び出し制限があるようです。
https://developer.vimeo.com/guidelines/rate-limiting
エラー時のレスポンスを見ると、リミットは「1000」にみえるのですが、実質100程度のようです。「アップロード」「情報変更」「プリセット設定」の3回呼び出しを1セットにしてアップロード処理をしていると、34ファイル目でエラーになります。

参考URL

http://stackoverflow.com/questions/37675435/vimeo-api-2016-how-to-display-list-of-users-videos
ライブラリへのアクセスは、公式のサンプルではなく、こちらを参考にしたらうまくいきました。

https://github.com/websemantics/vimeo-upload
非公式、かつ使ってみてはいませんが、JavaScriptのライブラリです。

tsunet111
エレファンキューブというデジタル教材に特化した制作会社の代表。長らくFlash/ActionScripがメインでしたが、最近は、JavaScript、PHP、MYSQLなど必要に応じて使う。Facebookで「PhoneGap/Cordova 日本語グループ」運営中→ https://www.facebook.com/groups/phonegap.cordova.jp/
http://www.elephancube.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away