如何通过Facebook视频ID获取视频缩略图?

18

我正在尝试使用以下代码嵌入Facebook视频:

<object width="400" height="224" >
<param name="allowfullscreen" value="true" />
<param name="allowscriptaccess" value="always" />
<param name="movie" value="http://www.facebook.com/v/115316011865684" />
<embed src="http://www.facebook.com/v/115316011865684" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="400" height="224">
</embed>
</object>

它运行良好,但是否有类似的方法可以从视频ID显示视频缩略图?
例如:http://www.facebook.com/thumbnail/115316011865684 还是其他方式?

4个回答

32

1
谢谢,它帮了我 :) ... 我能用这种方式获取视频标题吗? - Mohd Shahid
1
要获取视频标题,请调用 https://graph.facebook.com/VIDEO_ID 并查找返回的 "name" 字段。此调用还将返回 "picture" 字段,对应于缩略图。有关更多详细信息,请参见 https://developers.facebook.com/docs/reference/api/video/。 - C Abernathy
2
这是一张相当小的图片,我能否获得像YouTube那样更大的缩略图? - TomSawyer
1
似乎这只适用于页面而不是用户。对于页面来说效果很好。对于用户,他们必须进行身份验证并给予权限,据我所知。如果您正在从页面获取视频,则@Eric Klien的下面方法将使您可以访问更大的图像。 - Jake
1
我们如何使用这个URL直接获取大图像? - Vivek Sancheti
显示剩余3条评论

9
https://graph.facebook.com/VIDEO_ID会提供更多信息,包括更大的缩略图供选择。(您可以在https://developers.facebook.com/docs/graph-api/reference/video上获取可用信息列表。)
这是一些PHP代码,可以找到最大的缩略图:
$data = file_get_contents("https://graph.facebook.com/$video_id?fields=format");
if ($data !== FALSE)
{
 $result=json_decode($data);
 $count=count($result->format)-1;
 $thumbnail=$result->format[$count]->picture;
}

更新:自2017年7月10日起,Facebook更改了其API,因此上述代码已进行更新。以下是一些附加的PHP代码,以获取视频的大缩略图,以防Facebook再次更改内容:

$data = file_get_contents("https://graph.facebook.com/$video_id/thumbnails?access_token=$facebook_access_token");
if ($data !== FALSE)
{
 $result=json_decode($data);
 $thumbnail=$result->data[0]->uri;
}

这个第二种解决方案需要一个Facebook访问令牌。以下是获取Facebook访问令牌的说明:https://smashballoon.com/custom-facebook-feed/access-token/ 更新: Facebook正在越来越难以获得具有必要权限的访问令牌,以执行这样简单的任务。以下是如何从原始HTML中获取信息的方法:
$data = `curl -s -A 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0' -L 'https://www.facebook.com/1706818892661729/'`;

if (preg_match('#<video [^>]+></video>\s*<div [^>]+><img [^>]+src="([^"]+)#s',$data,$matches))
 {
  $image = $matches[1]; $image = str_replace('&amp;','&',$image);
  if (strpos($image,'&')) {print "Answer: $image\n";}
 }

请注意,如果您下载该页面,Facebook还会提供meta属性twitter:image,但该图像仅为200x200。如果Facebook不那么麻烦的话,它们也会提供meta属性og:image和一个体面大小的图像,但他们没有这样做。

2
看起来这只适用于网页而不是用户。但对于页面,它非常有效。对于用户,他们必须进行身份验证并给予权限,据我所知。 - Jake
@jake 我认为用户上传视频是可能的。我看到很多在线Facebook视频下载器可以做到这一点。我很好奇他们是如何做到的。 - basagabi
在2016年2月,当我研究这个问题时,没有真正的方法可以使用用户视频来实现,但是您可以使用页面视频来实现。我不确定您看到了什么,但这与在Facebook上观看视频无关。如果您在另一个网站上看到来自Facebook的缩略图,则它们要么来自Facebook页面(而不是用户),要么它们获得了使用API的用户的许可。这是一个大问题,因为用户被锁定,您必须通过API获得他们的许可才能使用他们的内容。 - Jake

1

1
我创建了一个PHP函数,可以回答你的问题,而无需阅读关于Facebook Graph的乏味文档。 你只需要插入你的视频链接,包括Facebook和YouTube,但你也可以修改以添加其他来源。 只需复制YouTube视频链接地址栏,对于Facebook,右键单击视频并单击“显示视频网址”,然后复制即可。
    //get video thumbnail for facebook and youtube
function get_vid_thumbnail($link){
    $thumbnail='';
//check if video link is facebook
    if (strpos($link, 'facebook') !== false) {
        $thumbnail=fb_thumb($link);
        //$thumbnail='fb';
    }
//check if video link is youtube
    if (strpos($link, 'youtube.com') !== false) {
        $thumbnail=youtube_thumb($link);
        //$thumbnail='youtube';
    }
    return $thumbnail;
}


//supporting functions
//get youtube thumbnail
function youtube_thumb($link){
    $new=str_replace('https://www.youtube.com/watch?v=','', $link);
    $vv='https://img.youtube.com/vi/'.$new.'/0.jpg';
    return $vv;
}

//clean the facebook link
function fb_video_id($url) {
    //split the url
    $main=parse_url($url);
    //get the pathe and split to get the video id
    $main=$main['path'];
    $main=explode('/',$main);
    $main=$main[3];
    return $main;
}
//get the thumbnail
function fb_thumb($link) {
    $img = 'https://graph.facebook.com/'.fb_video_id($link).'/picture';
    return $img;
}

//get video thumbnail for fb and youtube ends

//get embed url for facebook and youtube to be used as video source
function get_vid_embed_url($link){
    $embed_url='sss';
//check if video link is facebook
    if (strpos($link, 'facebook') !== false) {
        # code...
        $embed_url=fb_embed_link($link);
        //$thumbnail='fb';
    }
//check if video link is youtube
    if (strpos($link, 'youtube.com') !== false) {
        # code...
        $embed_url=youtube_embed_link($link);
        //$thumbnail='youtube';
    }
    return $embed_url;
}
//get youtube embed link
function youtube_embed_link($link){
    $new=str_replace('https://www.youtube.com/watch?v=','', $link);
    $link='https://www.youtube.com/embed/'.$new;
    return $link;
}
//get facebook embed link
function fb_embed_link($link) {
    $link = 'https://www.facebook.com/plugins/video.php?href='.$link.'&show_text=0&width=560';
    return $link;
}

如果链接中除了 ?v= 之外还有更多的查询参数,那么 youtube_thumb($link) 将无法正常工作。 - Ma Kobi
你具体需要什么解决方案呢?这样我可以写下来并发布,我认为这比一个踩票更好 :) - Sodruldeen Mustapha
1
谢谢,兄弟,这正是我在寻找的 :) - Mohit Sehgal
@MohitSehgal 如果这对你有用,请点赞,我很高兴它能帮到某个人 :) - Sodruldeen Mustapha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接