使用 Facebook Graph API 发布嵌入式视频链接

Posted

技术标签:

【中文标题】使用 Facebook Graph API 发布嵌入式视频链接【英文标题】:Posting an embedded video link using the Facebook Graph API 【发布时间】:2011-07-10 19:13:24 【问题描述】:

使用 Facebook 网络界面手动将视频链接(来自 YouTube、Vimeo 等)附加到帖子时,Facebook 会自动将该链接识别为视频,并允许生成的状态消息内嵌播放视频。视频在 Wall 或 News Feed 中显示为嵌入式播放器。


以下是手动发布后嵌入视频的示例。


使用 Graph 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


我怀疑答案与 source 参数有关,但我不确定 URL 应该在那里。指定相同的 URL 只会导致帖子没有任何缩略图。

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

如何单独使用 Graph API 来实现相同的嵌入行为?

【问题讨论】:

图片看不到了,可能应该上传到 SE 上。 @Herbert 抱歉,这些图片是在 Stack Overflow 自己托管图片之前由 Skitch 托管的。我不再拥有这些屏幕截图的副本。 Skitch(又名 Evernote)取消了他们旧的 URL 模式:discussion.evernote.com/topic/… 【参考方案1】:

看来您必须自己提取页面中实际 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)并将其插入 URL 中:http://www.youtube.com/e/<code> 为源,http://img.youtube.com/vi/<code>/0.jpg 为图片。

【讨论】:

我想再补充一点,当你点击图片时,它不会自动播放视频,而是显示一个带有图片的链接以点击播放。为了避免这种情况,只需添加一个参数,autoplay=1。所以你的源 URL 必须是这样的 - youtube.com/e/VIDEO_ID?autoplay=1。希望对您有所帮助。 +1,但这不再有效。 source 参数不仅被忽略,而且使图片参数被忽略。请问我的观察是否正确? 问题似乎是..我使用http://youtube.com 作为嵌入链接而不是http://www.youtube.com。现在它起作用了。但是 facebook 可以遵循那个重定向.. :) 这似乎不适用于 vimeo,有人有运气吗?我曾经能够在 vimeo 和 YouTube 的基于 rest 的旧 API 上使用类似的代码,但对于图形就没有那么多了。 对于非 YouTube 视频呢?【参考方案2】:

尝试将链接作为消息属性发布,这样对我有用。

message = your message + link

【讨论】:

如果帖子的形式为(文本+链接+文本),那么最好将整个内容包含在消息属性中。即使没有指定 link = ....,它也可以工作【参考方案3】:

以下是为 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
                

【讨论】:

如果我将嵌入视频的页面的网址放在“链接”属性中,我会在 Facebook 上获得图像预览而不是视频预览。 'source' 和 'link' 真的可以有不同的值吗?【参考方案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

【讨论】:

非常感谢。经过几天的调查,使用“/me/links”有效。 @mindriot 看起来链接 API 现在已被弃用...不好听【参考方案5】:

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

【讨论】:

【参考方案6】:

它不适用于在 /feeds 或 /links 上的 GROUPS 中发帖。 见here。请为该问题投票,以便尽快解决。

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

【讨论】:

giorgos,我很欣赏这个答案是不久前发布的,但以后请避免使用 URL 缩短器。您的帖子有 65535 个字符的限制,因此没有理由使用 URL 缩短器。【参考方案7】:

使用 API 共享任何 .swf 文件或视频不会在 facebook 上显示缩略图,除非其 youtube 。这是按照 facebook 设计的。 检查此链接

https://developers.facebook.com/bugs/589975484398226?browse=external_tasks_search_results_526fc388b99e18881434478

【讨论】:

以上是关于使用 Facebook Graph API 发布嵌入式视频链接的主要内容,如果未能解决你的问题,请参考以下文章

facebook graph api - 发布多张照片

使用 Facebook Graph API 搜索用户

使用 graph Api 获取 Facebook 页面事件

使用 Python 和 Graph API 发布到 Facebook,权限问题

如何使用 Facebook GRAPH API 删除 Facebook 评论帖子?

使用 facebook graph api 允许更多页面