使用新的 Vimeo Api 获取视频时长

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 来获取不同类型的信息,但这里没有太多工作示例,并且有很多未解答的问题。

Jon*_*ach 5

尝试这个:

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)

我所做的改变:

  • 将您的 API 获取 URL 从 更改https://api.vimeo.com/videos/$idhttps://api.vimeo.com/videos/$id?fields=duration。这告诉我们的 APIduration为您拉回。结果是响应速度更快,因为我们不会处理您不使用的数据,而且速率限制也更高。请参阅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)