🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

3181閲覧

vimeo APIでアップロード失敗

sfl

総合スコア13

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2021/03/24 00:35

編集2021/03/24 03:30

あるWebサーバに配置済みの動画ファイルを配信サービスvimeo.comへアップロードすべく、vimeo APIを使いpullアプローチにより試みたところ、statusは201が得られましたが、実際にはアップロードは完了しませんでした。
pullの場合、linkで指定されたURLにある動画にvimeo側からアクセスし、吸い上げてくれるものと思いますが、vimeoからWebサーバへのアクセスは確認できませんでした。
問題点を思いつかないのでお気づきの点あればご教示いただきたく思います。

試した手順は以下の通りです。


*viemo.com上の操作は全て管理者権限で行っています。

  1. https://developer.vimeo.com/apps でappを作成

Client identifier (client_id)
Client secrets (client_secret)
を得る

  1. 自分のアカウントでauthenticateするためのaccess tokenを生成

その際、Scopesとして
Public. Private, Create, Edit, Delete, Interact, Upload, Video Files
を指定

  1. https://github.com/vimeo/vimeo.php からvimeo.phpを入手してインストール

'/me'や'/me/videos'などのリクエストが成功し適切な結果が得られることを確認

  1. 次のPHPコードをWebサーバで実行

php

1<?php 2require("./vimeo.php-master/autoload.php"); 3 4// 上記1~2で得たコードを適用 5$client_id = 'xxxx'; 6$client_secret = 'xxxx'; 7$access_token = 'xxxx'; 8 9$client = new \Vimeo\Vimeo( 10 $client_id, 11 $client_secret, 12 $access_token 13); 14 15$url = '/me/videos'; 16$approach = 'pull'; 17$link = 'https://~';//配置済みの動画ファイルのURL 18 19$result = $client->request( 20 $url, 21 array( 22 'approach'=>$approach, 23 'link'=>$link 24 ), 25 'POST' 26); 27 28echo '<pre>'; 29print_r($result); 30echo "</pre>\n"; 31exit;
  1. 上で得られた$resultを見ると

[status] => 201
となっていて一見リクエストが成功したように見えるが、先頭を詳しく見ると

[body] => Array ( [uri] => /videos/~ //具体的な値は省略 [name] => Untitled [description] => [type] => video [link] => https://vimeo.com/~ //具体的な値は省略 [duration] => 0 [width] => 400 [language] => [height] => 300 [embed] => Array ...

となっていて、配置済みの動画ファイルの内容を反映しておらず、その動画ファイルが配置されているサーバのログを見てもvimeoからアクセスされた形跡がない。
[body][link]にあるURLを開いても「アップロード中...」のままになり、アップロード完了・最適化完了となることはない。


以上です。

5)のようになる原因についてご指摘いただければ幸甚です。
よろしくお願いします。


*追記

アップロード機能の利用には、Access Tokens生成の際にScopesとしてuploadを指定するだけでなく、別途アップロードを有効にするよう申請が必要であることがわかりました。

https://vimeo.com/help/contact
デベロッパー > アプリののアップロード許可申請 と進み、
他の設問を適当に回答して送信したところです。

申請に対して許可が下りるのに数日かかるそうなので、質問した手順で正しく動作するかどうかは許可後の検証となってしまいます。
結果はのちほど投稿しますのでよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しましたのでレポートします。

  1. https://developer.vimeo.com/apps/ で作成済みappを指定し、Permissionsの中にある"Request Upload Access"をクリックすると申請フォームが開くので、適切に記入して送信すればアップロード許可申請はOKのはず(https://vimeo.com/help/contactでの申請は無用と思う)。

3/24にこの質問をする以前に上の手順は既に実行してあったが、(2)のPHPの間違いに気づかないまま方向違いの手を重ねてしまった。

  1. 今回の問題は、本質的にはリクエストの際のパラメータの指定の間違いだった。

developer.vimeo.comやネットで見かけた古いコードを参照したため、バージョンの合わない記述をしていた。
現行のAPI (v.3.4)でpullリクエストするには、'approach'と'link'を含む配列を与える際、

php

1$result = $client->request( 2 $url, 3 [ 4 'approach'=>$approach, 5 'link'=>$link 6 ], 7 'POST' 8);

のようにパラメータに直接この配列を置くのでなく、

php

1$result = $client->request( 2 $url, 3 [ 4 'upload' => [ 5 'approach'=>$approach, 6 'link'=>$link 7 ] 8 ], 9 'POST' 10);

のように、'upload'の下に置くのが正しい。

(2)の修正を反映してアップロードの完了を確認できました。
Vimeo側からのアクションは素早く、上スクリプトの起動の数秒後には動画ファイルへのアクセスがありました。

APIの利用では、3.4での変更が大きかったようなので注意が必要と思います。
https://developer.vimeo.com/api/changelog

以上で解決とします。ありがとうございました。

投稿2021/03/26 01:15

編集2021/03/26 01:29
sfl

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問