dailymotion/cloudkey-php

Dailymotion 云API PHP绑定

dev-master 2014-09-25 15:09 UTC

This package is not auto-updated.

Last update: 2024-09-14 14:39:55 UTC


README

Dailymotion 云API PHP绑定暴露了API参考中描述的所有API方法。一个名为CloudKey的顶级类通过对象属性暴露所有命名空间。例如,在media命名空间中调用count方法如下

$cloudkey = new CloudKey($user_id, $api_key);
$result = $cloudkey->media->count();

对于期望参数的方法,这些参数必须以关联数组的形式传递

$media = $cloudkey->media->info(array('id' => $a_media_id));

返回值(如有)要么是stdClass实例(当结果是一个结构时),要么是stdClass实例的数组(当结果是一系列结构时)

# Simple structure response
$media = $cloudkey->media->info(array('id' => $a_media_id));
echo $media->id;

# List of structures response
$page = 1;
while(1) {
    $res = $cloudkey->media->list(array('fields' => array('id', 'meta.title'), 'page' => $page++));
    foreach($res->list as $media) {
        printf("%s %s\n", $media->id, $media->meta->title);
    }
    if ($res->page == $res->pages) {
        break;
    }
}

本地方法

CloudKey类暴露了额外的本地方法。这些方法在API参考中没有记录,并提供为辅助工具,以简化Dailymotion云API集成。

file->upload_file($path)

此方法管理文件上传到Dailymotion云上传服务器。与API媒体创建过程相关的信息将以dict的形式返回。

参数

  • $path: (必需) 上传文件的路径。

示例

# source asset upload example
$file = $cloudkey->file->upload_file('path/to/video.mov');
# The list of encoding assets that we want
$assets = array('mp4_h264_aac', 'mp4_h264_aac_hq', 'jpeg_thumbnail_medium', 'jpeg_thumbnail_source');
# Metadata
$meta = array('title' => 'My video', 'author' => 'Author');
$media = $cloudkey->media->create(array('assets_names' => $assets, 'meta' => $meta, 'url' => $file->url));

media.get_embed_url(id)

此方法返回一个指向Dailymotion云播放器嵌入的签名URL(有关详细信息,请参阅API参考)。生成的URL是临时的,并且根据提供的权限级别掩码授予访问权限。

参数

  • id: (必需) 媒体ID。
  • seclevel: 权限级别掩码(默认为CLOUDKEY_SECLEVEL_NONE,下面将详细介绍)。
  • expires: UNIX纪元过期时间(默认为time() + 7200(从现在起2小时))。
  • secure: true 以获取https嵌入URL(默认为false)。

如果seclevel参数中未指定CLOUDKEY_SECLEVEL_DELEGATE选项,则可能需要以下参数,具体取决于其他选项。这不建议这样做,因为它可能会导致意外的访问拒绝,主要由于GeoIP数据库的不一致。

  • asnum: 客户端的自治系统编号(默认为None)。
  • ip: 客户端的IP地址(默认为None)。
  • useragent: 客户端的HTTP User-Agent头(默认为None)。

示例

// Create an embed URL limited only to the AS of the end-user and valid for 1 hour
$url = $cloudkey->media->get_embed_url(array('id' => $media->id, 'seclevel' => CLOUDKEY_SECLEVEL_DELEGATE | CLOUDKEY_SECLEVEL_ASNUM, 'expires' => time() + 3600));

media.get_stream_url(id)

此方法返回一个指向Dailymotion云视频流的签名URL(有关详细信息,请参阅API参考)。生成的URL是临时的,并且根据提供的权限级别掩码授予访问权限。

参数

  • id: (必需) 媒体ID。
  • asset_name: 想要的媒体资产名称(默认为mp4_h264_aac)。
  • seclevel: 权限级别掩码(默认为CLOUDKEY_SECLEVEL_NONE,下面将详细介绍)。
  • expires: UNIX纪元过期时间(默认为time() + 7200(从现在起2小时))。
  • download: True 以获取下载URL(默认为False)。
  • filename: 下载URL的文件名(如果设置,则覆盖download参数)。
  • version: 插入URL的任意整数,用于刷新缓存。仅在需要时使用此参数,并且仅在需要刷新缓存时更改其值。
  • protocol: 流协议('hls'、'rtmp'、'hps'或'http')。如果为'http',则覆盖download参数。

如果seclevel参数中未指定CLOUDKEY_SECLEVEL_DELEGATE选项,则可能需要以下参数,具体取决于其他选项。这不建议这样做,因为它可能会导致意外的访问拒绝,主要由于GeoIP数据库的不一致。

  • asnum: 客户端的自治系统编号(默认为None)。
  • ip: 客户端的IP地址(默认为None)。
  • useragent: 客户端的HTTP User-Agent头(默认为None)。

示例

// Create a stream URL limited only to the AS of the end-user and valid for 1 hour
url = cloudkey.media.get_stream_url(id=media['id'], seclevel=CLOUDKEY_SECLEVEL_DELEGATE | CLOUDKEY_SECLEVEL_ASNUM, expires=time() + 3600)
$url = $cloudkey->media->get_stream_url(array('id' => $media->id, 'seclevel' => CLOUDKEY_SECLEVEL_DELEGATE | CLOUDKEY_SECLEVEL_ASNUM, 'expires' => time() + 3600));

安全级别选项

安全级别定义了Dailymotion云架构确保媒体流URL访问仅限于单个用户或一组用户的机制。不同的(可组合)选项包括

  • CLOUDKEY_SECLEVEL_NONE: URL访问授予所有人。

  • CLOUDKEY_SECLEVEL_ASNUM:仅允许指定的AS号码访问URL。AS号码代表“自治系统编号”,大致将IP分组映射到互联网上的电信公司和大型组织(例如,每个ISP都有自己的AS号码,Dailyotion的AS号码是AS41690)。

  • CLOUDKEY_SECLEVEL_IP:仅允许指定的IP地址访问URL。此选项可能导致误拒绝访问,因为一些用户在访问互联网时可能被多个代理负载均衡(这种情况通常发生在ISP和大型组织中)。

  • CLOUDKEY_SECLEVEL_USERAGENT:仅允许发送指定User-Agent HTTP头部的用户访问URL。

  • CLOUDKEY_SECLEVEL_DELEGATE:ASNUM、IP和User-Agent值将在第一次URL访问时在服务器端收集,不需要在客户端预先指定(这是推荐的方法,因为它将确保100%准确地识别ASNUM)。

  • CLOUDKEY_SECLEVEL_USEONCE:仅允许访问一次URL(使用此选项可能会阻止搜索功能正常工作)。

有关更多信息,请参阅Dailymotion Cloud流的文档。

异常

当发生错误时,Dailymotion Cloud API方法可能会抛出异常,应在您的代码中捕获这些异常。可用的异常有

  • CloudKey_Exception:发生了意外的API响应。

  • CloudKey_ProtocolException:发生了传输层错误。

  • CloudKey_InvalidNamespaceException:使用了无效的命名空间。

  • CloudKey_InvalidMethodException:调用了无效的方法。

  • CloudKey_NotFoundException:在无效的项目上请求了操作。

  • CloudKey_MissingParamException:方法调用中缺少了必需的参数。

  • CloudKey_InvalidParamException:方法调用中指定了无效的参数。

  • CloudKey_AuthorizationRequiredException:调用了需要认证的方法,但没有提供认证信息。

  • CloudKey_AuthenticationFailedException:提供了无效的认证信息。