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

#概要
きちんと規約にのっとった動画を配信するなら、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 フォルダにリネームしていれています。

```php
//事前にダウンロードしたライブラリをロード
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におきかえてください。）

####自身のアカウント情報を取得
```php
$user = $lib->request('/me');
echo '<pre>';
print_r($user);
echo '</pre>';
```

####自身のビデオリストを取得
```php
$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>';
}
```

####自身のビデオリストを取得（古いもの順）
```php
$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:ので、いったん保留。

####自身の１つのビデオの詳細情報取得
```php
$result = $lib->request('/me/videos/XXXXXXXX');
echo '<pre>';
print_r($result);
echo '</pre>';
```

####ビデオの情報変更

```php
$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プリセット一覧取得

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

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

```php
$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からアップロード

```php
$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](https://qiita-image-store.s3.amazonaws.com/0/24420/d5a31d3e-5e3c-80ec-5fd1-50c4ae842d5b.png)
1時間当たりのAPIの呼び出し制限があるようです。
https://developer.vimeo.com/guidelines/rate-limiting
エラー時のレスポンスを見ると、リミットは「1000」にみえるのですが、実質100程度のようです。「アップロード」「情報変更」「プリセット設定」の３回呼び出しを１セットにしてアップロード処理をしていると、34ファイル目でエラーになります。

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

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