使用Facebook Graph API发布embedded式video链接
当使用Facebooknetworking界面手动将video链接(从YouTube,Vimeo等)附加到post时,Facebook会自动将该链接识别为video,并允许生成的状态消息以串联方式播放video。 该video在Wall或News Feed中显示为embedded式播放器。
以下是手动发布后embeddedvideo的示例。
使用graphicsAPI发布链接时,video不会embedded。
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只会导致没有任何缩略图的post。
来源 :要embedded到post中的Flash电影或video文件的URL。 read_stream。
如何通过单独使用Graph API来完成相同的embedded行为?
看起来你必须自己提取页面中的实际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>
的源代码和http://img.youtube.com/vi/<code>/0.jpg
的图片。
以下是如何为YOUTUBE和VIMEO手动发布video(难以在线查找)。 具体而言,如果您希望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 }
与/链接而不是/ feed共享似乎更好。 embeddedYouTube,Vimeo和Facebookvideo,就像手动发布一样。
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,使用/链接(https://graph.facebook.com/me/links/),只需使用YouTube / watch?v = ZL7nV7WwJKg URL格式POST“message”和“link”参数。 / feed从来没有为我工作,它只是发布了一个静态graphics和链接,但我希望它实际上播放embedded在Facebook上,就像它分享从YouTube到Facebookvideo。 奇迹般有效。
它不适用于在/ feeds或/ links上发布在GROUPS上。 看到这里 。 请赶快解决这个问题,以便尽快得到解决。
/ links是/ feeds的副本,它只显示用户自己发布的链接types的post。
而是尝试张贴链接作为消息属性,它适用于我这种方式。
message = your message + link
使用API共享任何.swf文件或video将不会在Facebook上显示缩略图,除非它的YouTube。 这是按照facebookdevise的。 检查这个链接