2011-03-08 80 views
40

当使用Facebook网页界面手动将视频链接(从YouTube,Vimeo等)添加到帖子时,Facebook会自动将该链接识别为视频,并允许生成状态消息以串联方式播放视频。该视频在Wall或News Feed中以嵌入式播放器的形式显示。使用Facebook Graph API发布嵌入式视频链接


下面是嵌入式视频在手动发布后的样子。

Embedded Video


发布时使用图形API的链接,视频未嵌入。

curl -F 'access_token=...' \ 
    -F 'message=Link to YouTube' \ 
    -F 'link=http://www.youtube.com/watch?v=3aICB2mUu2k' \ 
    https://graph.facebook.com/me/feed 

Not-Embedded Video


我怀疑答案是关系到source说法,但我不知道该URL应该有什么。指定相同的URL只会产生一个没有任何缩略图的文章。

source:要嵌入到帖子中的Flash电影或视频文件 的URL。 read_stream。

如何通过单独使用Graph API来完成相同的嵌入行为?

+0

图像是不可见的了,可能他们应该SE上传。 – Herbert 2015-05-11 14:36:45

+0

@Herbert对不起,这些图像是在Stack Overflow自己托管图像之前由Skitch托管的。我不再拥有这些屏幕截图的副本。而Skitch(又名印象笔记)杀了他们的旧网址模式:https://discussion.evernote.com/topic/80874-old-skitch-image-urls-all-broken/ – 2015-05-11 21:55:50

回答

49

看来你必须自己提取页面中的实际swf和缩略图图像的URL。例如,这似乎工作:

curl -F 'access_token=...' \ 
    -F 'message=Link to YouTube' \ 
    -F 'link=http://www.youtube.com/watch?v=3aICB2mUu2k' \ 
    -F 'source=http://www.youtube.com/v/3aICB2mUu2k' \ 
    -F 'picture=http://img.youtube.com/vi/3aICB2mUu2k/0.jpg' \ 
    https://graph.facebook.com/me/feed 

看来,您可以从页面URL中生成有效的来源和图片。该URL看起来像http://www.youtube.com/watch?v=<code>;请将代码(3aICB2mUu2k在此处)插入到源http://www.youtube.com/e/<code>的URL中,并将其插入到图片的http://img.youtube.com/vi/<code>/0.jpg中。

+2

+1,但这不再有效。源参数不仅被忽略,还会使图片参数被忽略。请问我的观察结果是否正确? – Bozho 2011-04-03 20:04:04

+0

@Bozho:刚才我尝试过时为我工作。 – Anomie 2011-04-03 23:15:07

+0

这个问题似乎是......我用'http:// youtube.com'作为嵌入链接而不是'http:// www.youtube.com'。现在它可以工作。但Facebook可以遵循该重定向.. :) – Bozho 2011-04-04 16:35:53

0

而不是尝试发布链接作为消息属性,它适用于我这种方式。

message = your message + link 
+0

没有抱歉的家伙....这只显示缩略图...不是嵌入的视频... – Devaroop 2011-08-24 12:18:49

+0

如果后的形式(文本+链接+文本)如果然后更好地包括在消息属性中的整个事情。它甚至没有指定链接= .... – Devaroop 2011-09-06 09:44:51

6

以下是如何手动为YOUTUBE和VIMEO(难以在线查找)发布视频的方法。具体而言,如果您希望LINK值指向源自用户的网站/博客文章。

   //search for youtube.com and vimeo.com in the 'link' value 
       if (preg_match("/youtube.com/", $model->link) || preg_match("/youtu.be/", $model->link)){ 
        if (preg_match('%(?:youtube\.com/(?:[^/]+/.+/|(?:v|e(?:mbed)?)/|.*[?&]v=)|youtu\.be/)([^"&?/ ]{11})%i', $model->link, $match)) 
        { 
         $video_code = $match[1]; 
        } 
        $source = 'http://www.youtube.com/e/'.$video_code; 
       $picture = 'http://img.youtube.com/vi/'.$video_code.'/0.jpg'; 
       } 
       else if (preg_match("/vimeo.com/", $model->link)) 
       { 
        if (preg_match('/vimeo\.com\/(clip\:)?(\d+).*$/', $model->link, $match)) 
        { 
         $video_code = $match[2]; 
        } 
        /* Get Vimeo thumbnail */ 
        $hash = unserialize(file_get_contents("http://vimeo.com/api/v2/video/$video_code.php")); 
        $picture = $hash[0]['thumbnail_medium']; 
        $source = 'https://secure.vimeo.com/moogaloop.swf?clip_id='.$video_code.'&autoplay=1'; 
       } 

       $args = array(
       'message' => //user's comment 
       'name' => //Title of post 
       'link'  => 'http://...'//link to video on user's website 

       'source' => $source, 
       'picture' => $picture, 
       ); 

       if ($this->_facebook->api("/".$this->facebookUserID."/feed", "post", $args)){ 
       //posted to facebook 
       } 
+0

如果我把视频嵌入到'链接'属性页面的网址,我得到一个图像预览,而不是在Facebook上的视频预览。你真的对'源'和'链接'有不同的价值吗? – Sulli 2016-10-05 13:20:20

4

与/ links而不是/ feed共享链接似乎更好。嵌入YouTube,Vimeo和Facebook视频就像手动发布一样。

curl -F 'access_token=...' \ 
    -F 'message=Link to YouTube' \ 
    -F 'link=http://www.youtube.com/watch?v=3aICB2mUu2k' \ 
    https://graph.facebook.com/me/links 
+0

非常感谢。经过几天的调查,使用'/ me/links'起作用。 – 2015-03-08 23:46:36

+0

@mindriot看起来像链接API现在已被弃用...听不清 – avenet 2015-11-29 12:49:21

1

不要使用/饲料,使用/链接(https://graph.facebook.com/me/links/)和简单的POST “消息”,并使用YouTube /表 “链接” 参数? v = ZL7nV7WwJKg URL格式。/feed从来没有为我工作,它只是发布了一个静态图形和链接,但我希望它实际上在Facebook上播放嵌入,就像它将YouTube上的视频分享到Facebook一样。奇迹般有效。

1

它无法在GROUPS上发布在/ feeds或/ links上。 见here。请迅速解决此问题,以便尽快解决。

/links是/ feeds的副本,其中 只显示由用户自己发布的类型链接的帖子。

+0

giorgos,我很感激这个答案是前一段时间发布的,但请避免在未来使用URL缩写。您的帖子有65535个字符的限制,因此应该没有理由使用网址缩短器。 – Matt 2015-07-31 08:29:46