【问题标题】:Fetch video duration using the new Vimeo Api使用新的 Vimeo Api 获取视频时长
【发布时间】:2018-05-23 22:51:01
【问题描述】:

我有一个简单的 wordpress 插件,它应该从 Vimeo 获取信息。我试图从 vimeo 使用他们的“简单 api”和以下代码获取视频时长元数据:

 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';
 }
}

结果: 空白。它没有获取任何东西,也没有“0”。

这个链接是我们用来获取信息的链接:http://vimeo.com/api/v2/video/244509537/json,当您在浏览器中加载它时,它会给出以下结果:

(结尾的'json'可以替换成“/php”或“/xml”,会给出相应格式的结果。)

但是我发现不再支持此 api,我将不得不使用 new 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";
}
}

有人可以帮忙处理这段代码吗?我看到其他人有兴趣使用新的 API 来获取不同类型的信息,但这里没有很多工作示例,并且有很多未解答的问题。

【问题讨论】:

    标签: php json api vimeo vimeo-api


    【解决方案1】:

    试试这个:

    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";
    }
    }
    

    我所做的更改:

    • 将 API 获取 URL 从 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)
    ]);
    

    【讨论】:

    • 谢谢乔恩。我的脚本中的其他地方一定有问题。我会找出那是什么,然后我会确保标记你的答案。
    猜你喜欢
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多