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

Rya*_*ary 40 embed youtube facebook vimeo facebook-graph-api

当使用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
Run Code Online (Sandbox Code Playgroud)

非嵌入式视频


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

source:要嵌入帖子中的Flash影片或视频文件的URL.read_stream.

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

Ano*_*mie 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
Run Code Online (Sandbox Code Playgroud)

您似乎可以从页面URL生成有效的源和图片.网址看起来像http://www.youtube.com/watch?v=<code>; 获取代码(此处为3aICB2mUu2k)并将其插入http://www.youtube.com/e/<code>源和http://img.youtube.com/vi/<code>/0.jpg图片的URL 中.

  • 什么是基于非YouTube的视频? (5认同)
  • +1,但这不再有效.source参数不仅被忽略,而且还使图片参数被忽略.你能否我的观察是正确的? (2认同)

dan*_*dan 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
                }
Run Code Online (Sandbox Code Playgroud)