【发布时间】:2011-02-14 19:57:25
【问题描述】:
您好,我正在构建网站,我需要从不同链接检索视频(如果是视频)、图像、描述的功能,例如不同的视频网站,或者如果一般网站链接获取缩略图和描述。
是否存在任何 php 类?为此请帮我提出更好的解决方案提前谢谢...
哦,是的,示例就像 facebook 链接选项卡
【问题讨论】:
标签: php
您好,我正在构建网站,我需要从不同链接检索视频(如果是视频)、图像、描述的功能,例如不同的视频网站,或者如果一般网站链接获取缩略图和描述。
是否存在任何 php 类?为此请帮我提出更好的解决方案提前谢谢...
哦,是的,示例就像 facebook 链接选项卡
【问题讨论】:
标签: php
您应该使用 curl o file_get_contents 来检索您链接到的数据,然后通过 mime-tipe 识别(首先)。 如果你有 text/html mime 提示,你应该从页面中提取所有图像/对象。
但是最好的方法是使用 curl 来模拟浏览器。 也许您可以在 http://phpclasses.org 上找到一些针对该解决方案的类
【讨论】:
首先,您很可能指的是 Youtube 和 Vimeo 等视频网站。
这两个网站都有一个 API 功能,您可以使用它来获取您的视频信息:
对于 youtube api 请求中的广泛框架,您可以使用 Zend Data:http://framework.zend.com/download/gdata
对于 Vimeo PHP 库,请使用 https://github.com/vimeo/vimeo-php-lib
大多数其他专业网站都会有某种 API,而且很可能会有适合它们的库。
是否有与所有这些网站交互的本地类?
简短的回答是否定的,所有 API 都不同,因此没有一个类可以成功与所有网站交互。
您需要做的是创建一个基于驱动程序的包来处理这个问题。
你的基类看起来像这样:
class VideoAPI
{
private $driver;
public function __construct($driver)
{
require_once "drivers/" . $driver . ".class.php";
$driverClass = $driver . "_Driver";
$this->driver = new $driverClass;
}
public function FetchVideoById($id)
{
return $this->driver->FetchVideoById($id);
}
}
然后,您的驱动程序将有一个接口,如下所示:
interface IVideoDriver
{
public function FetchVideoById($id);
/*.
Other required methods
.*/
}
每个驱动程序都会实现该方法并扩展请求类,如下所示:
class Youtube_Driver extends VideoRequest implements IVideoDriver
{
protected $base_url = "http://gdata.youtube.com"
public function FetchVideoById($id)
{
$Request = $this->request($this->base_url . "/feeds/api/videos/",array(
"format" => "json",
"api_id" => $this->config->api_keys->youtube
));
if($Request->status() == VideoRequest::STATUS_OK)
{
return $Request->Response();
}
}
}
【讨论】: