当使用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电影或视频文件的网址 嵌入帖子中。 read_stream。
如何通过单独使用Graph API来实现相同的嵌入行为?
答案 0 :(得分: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
您似乎可以从页面网址生成有效的来源和图片。网址看起来像http://www.youtube.com/watch?v=<code>
;获取代码(此处为3aICB2mUu2k)并将其插入源http://www.youtube.com/e/<code>
以及图片的http://img.youtube.com/vi/<code>/0.jpg
。
答案 1 :(得分: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
}
答案 2 :(得分: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
答案 3 :(得分:1)
不要使用/ feed,使用/ links(https://graph.facebook.com/me/links/),只需使用YouTube / watch发布“消息”和“链接”参数?v = ZL7nV7WwJKg URL格式。 / feed从来没有为我工作,它只是发布了一个静态的图形和链接,但我希望它实际上在Facebook上嵌入,就像你从YouTube分享视频到Facebook。像魅力一样。
答案 4 :(得分:1)
在/ feed或/ links上发布GROUPS无效。 见here。请提出问题,以便尽快修复。
/ links是/ feeds的副本 仅显示用户自己发布的链接类型的帖子。
答案 5 :(得分:0)
相反,尝试将链接发布为消息属性,它对我有用。
message = your message + link
答案 6 :(得分:0)
使用API共享任何.swf文件或视频都不会在Facebook上显示缩略图,除非它是youtube。这是按照facebook的设计。 检查此链接