nun*_*rey 1 php api json vimeo vimeo-api
我有一个简单的 WordPress 插件,它应该从 Vimeo 获取信息。我试图使用其“简单 api”和以下代码从 vimeo 获取视频持续时间元数据:
function vimeo_duration ($id) {
try {
$ch = curl_init("http://vimeo.com/api/v2/video/$id/json");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($ch);
$obj = json_decode($res, true);
return $obj[0]['duration'];
} catch (Exception $e) {
# returning 0 if the Vimeo API fails for some reason.
return '0';
}
}
Run Code Online (Sandbox Code Playgroud)
结果:空白。它没有获取任何内容,也没有“0”。
我们使用此链接从http://vimeo.com/api/v2/video/244509537/json获取信息,当您将其加载到浏览器中时,它会给出以下结果:
(最后的'json'可以替换为“/php”或“/xml”,它将以相应的格式给出结果。)
但是我发现这个 api 不再受支持,我必须使用新的 Api来获取我想要的持续时间数据。(也许这就是它不获取数据的原因)
我搜索了 StackOverflowa 和其他来源,但找不到这方面的有效示例。我还阅读了 vimeo 文档,但我无法实现它。我已经按照他们的建议创建了API,现在拥有了Access Token。
我使用了在 StackOverflow 中找到的代码并对其进行了一些修改。但是它不返回任何值。结果又是空白。它没有获取任何内容,也没有返回“0”。
function vimeo_duration ($id) {
try {
$authorization = 'your_vimeo_api_authorization_token_goes_here';
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => "https://api.vimeo.com/videos/$id",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer {$authorization}",
"cache-control: no-cache",
),
));
$res = curl_exec($ch);
$obj = json_decode($res, true);
return $obj[0]['duration'];
} catch (Exception $e) {
# returning 0 if the Vimeo API fails for some reason.
return "0";
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以帮忙处理这段代码吗?我看到其他人有兴趣使用新的 API 来获取不同类型的信息,但这里没有太多工作示例,并且有很多未解答的问题。
尝试这个:
function vimeo_duration ($id) {
try {
$authorization = 'your_vimeo_api_authorization_token_goes_here';
$ch = curl_init();
curl_setopt_array($ch, array(
CURLOPT_URL => "https://api.vimeo.com/videos/$id?fields=duration",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"authorization: Bearer {$authorization}",
"cache-control: no-cache",
),
));
$res = curl_exec($ch);
$obj = json_decode($res, true);
return $obj['duration'];
} catch (Exception $e) {
# returning 0 if the Vimeo API fails for some reason.
return "0";
}
}
Run Code Online (Sandbox Code Playgroud)
我所做的改变:
https://api.vimeo.com/videos/$id
为https://api.vimeo.com/videos/$id?fields=duration
。这告诉我们的 API只duration
为您拉回。结果是响应速度更快,因为我们不会处理您不使用的数据,而且速率限制也更高。请参阅https://developer.vimeo.com/api/common-formats#json-filter了解更多信息。return $obj[0]['duration'];
就是现在return $obj['duration'];
。由于您正在查询单个视频,因此结果集是一个关联数组。使用以下命令运行这些更改,我收到回复9
:
print_r([
'duration' => vimeo_duration(245823639)
]);
Run Code Online (Sandbox Code Playgroud)