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

使用Facebook Graph API发布嵌入式视频链接,facebook,youtube,facebook-graph-api,embed,vimeo,Facebook,Youtube,Facebook Graph Api,Embed,Vimeo,当使用Facebook web界面将视频链接(来自YouTube、Vimeo等)手动附加到帖子时,Facebook会自动将该链接识别为视频,并允许生成的状态消息在线播放视频。视频以嵌入式播放器的形式显示在墙上或新闻提要中 下面是一个示例,演示了手动发布后嵌入式视频的外观 curl -F 'access_token=...' \ -F 'message=Link to YouTube' \ -F 'link=http://www.youtube.com/watch?v=3aI

当使用Facebook web界面将视频链接(来自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


使用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只会导致一篇没有任何缩略图的文章

:指向Flash电影或视频文件的URL 嵌入在柱子内。 读你的流


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

似乎您必须自己提取页面中实际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=
;获取代码(此处为3AICB2MU2K)并将其插入URL
http://www.youtube.com/e/
用于源代码和
http://img.youtube.com/vi/
/0.jpg
用于图片。

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

message = your message + link

下面是如何为YOUTUBE和VIMEO(很难在网上找到)手动发布视频。特别是如果您希望链接值指向用户的网站/博客文章的来源

//在“link”值中搜索youtube.com和vimeo.com
if(preg_match(“/youtube.com/”,$model->link)| | preg_match(/youtu.be/”,$model->link)){
如果(preg|u 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_代码;
$picture='1http://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];
}
/*获取Vimeo缩略图*/
$hash=unserialize(文件获取内容)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=数组(
'message'=>//用户的评论
'name'=>//文章标题
'链接'=>'http://...“//链接到用户网站上的视频
'source'=>$source,
“图片”=>$picture,
);
如果($this->_facebook->api(“/”$this->facebook用户ID。“/feed”,“post”,“$args)){
//发布到facebook
}

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

不要使用/feed,使用/links(https://graph.facebook.com/me/links/ )只需发布“消息”和“链接”“使用YouTube/watch?v=ZL7nV7WwJKg URL格式的参数/feed从来都不适合我,它只是发布了一个静态的图形和链接,但我希望它能像在YouTube和Facebook上分享视频一样,在Facebook上播放嵌入的视频。就像一个符咒。

它不适用于在/feed或/links上分组发布。 看见请投票表决这个问题,以便尽快解决

/链接是/feed的副本,其中
仅显示用户自己发布的链接类型的帖子。

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


如果表单的post If(文本+链接+文本),那么最好将整个内容包含在消息属性中。它甚至可以在不指定link=…的情况下工作…我只想再添加一点,当您单击picture时,它不会自动播放视频,而是显示另一个带有要单击播放的图片的链接。为了避免这种情况,只需再添加一个参数,autoplay=1。所以你的源URL必须是这样的-。希望这有帮助。+1,但这不再有效。源参数不仅会被忽略,还会使图片参数被忽略。你能知道我的观察是否正确吗?问题似乎是..我使用了
http://youtube.com
而不是
http://www.youtube.com
。现在它起作用了。但facebook本可以遵循这个重定向:)这似乎对维米奥不起作用,有人在那里运气好吗?我曾经能够在vimeo和YouTube的旧的基于rest的API上使用类似的代码,但是graph没有这么多。对于非基于YouTube的视频呢?非常感谢。经过几天的调查,使用“/me/links”成功了。@mindriot看起来links API现在已经被弃用了……糟糕的是图像不再可见,可能应该上传到SE上。@Herbert抱歉,这些图像是在堆栈溢出托管图像之前使用Skitch托管的。我不再有那些截图的副本了。Skitch(又名Evernote)终止了他们以前的URL模式:giorgos,我很感激这个答案是在不久前发布的,但请避免在将来使用URL缩短器。您的帖子限制为65535个字符,因此没有理由使用URL缩短器