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

时间:2017-12-10 03:27:21

标签: php json api 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';
 }
}

结果:空白。它没有取任何东西而且没有" 0"同样。

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

enter image description here

(结尾' json'可以替换为" / php"或" / xml"它将以相应的格式给出结果。)

但是我发现不再支持此api 而且我必须使用 new Api 来获取我想要的持续时间数据。 (也许这就是为什么它没有提取数据)

我已经通过StackOverflowa和其他来源进行了搜索,但我无法找到一个有效的例子。我还阅读了vimeo文档,但是我无法实现它。我按照他们的建议创建了 API ,现在拥有访问令牌

我已经使用了我在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来获取不同类型的信息,但这里没有很多工作示例,还有很多未解决的问题。

1 个答案:

答案 0 :(得分:2)

试试这个:

Sub In_knapp_Click()

Dim i As Long
Dim g As Long
Dim a As Long
Dim b As Long

b = 3

For a = 1 To 7 Step 1

    If Weekday(Now(), vbMonday) = a Then

                     For g = 3 To 12 Step 2

                        If g = 11 Then
                        MsgBox "Ingen Ut tid hittades"
                        Exit For

                        Else

                            If IsEmpty(Worksheets("Pontevedra").Cells(b, g).Value) Then

                                For i = 2 To 10 Step 2

                                    If IsEmpty(Worksheets("Pontevedra").Cells(b, i).Value) Then

                                        Worksheets("Pontevedra").Cells(b, i).Value = Now
                                        ButtonOneClick = True
                                        Exit For

                                    Else

                                    MsgBox "Fel"

                                    End If

                            Else

                    Next g

                    End If           
    Else
        b = b + 1  
End If
Next a
End Sub

我所做的改变:

  • 将您的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"; } } 更改为https://api.vimeo.com/videos/$id。这告诉我们的API 为您拉回https://api.vimeo.com/videos/$id?fields=duration。结果是更快的响应,因为我们不处理您不使用的数据,以及更高的速率限制。有关详细信息,请参阅https://developer.vimeo.com/api/common-formats#json-filter
  • duration现在是return $obj[0]['duration'];。由于您要查询单个视频,因此结果集是一个关联数组。

使用以下内容运行这些更改,我会收到return $obj['duration'];

9