使用 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 发布嵌入式视频链接的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 和 Graph API 发布到 Facebook,权限问题