41

使用 Facebook Web 界面手动将视频链接(来自 YouTube、Vimeo 等)附加到帖子时,Facebook 会自动将该链接识别为视频,并允许生成的状态消息内联播放视频。视频在墙或新闻源中显示为嵌入式播放器。


这是手动发布后嵌入视频的示例。

嵌入式视频


使用 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 如何实现相同的嵌入式行为?

4

7 回答 7

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

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

于 2011-03-15T18:09:51.277 回答
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
                }
于 2012-01-18T19:42:57.220 回答
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
于 2012-02-04T23:33:20.953 回答
1

不要使用 /feed,使用 /links (https://graph.facebook.com/me/links/) 并使用 YouTube /watch?v=ZL7nV7WwJKg URL 格式简单地发布“消息”和“链接”参数。/feed 从来没有为我工作过,它只是发布了一个静态图形和链接,但我希望它实际上嵌入在 Facebook 上播放,就像你将视频从 YouTube 分享到 Facebook 时一样。奇迹般有效。

于 2012-03-19T03:04:45.443 回答
1

它不适用于在 /feeds 或 /links 上的 GROUPS 中发布。见这里。请投票支持该问题,以便尽快修复。

/links 是 /feeds 的副本,它只显示用户自己发布的链接类型的帖子。

于 2014-02-28T00:28:10.103 回答
0

而是尝试将链接作为消息属性发布,这样对我有用。

message = your message + link
于 2011-08-24T09:28:02.913 回答
0

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

https://developers.facebook.com/bugs/589975484398226?browse=external_tasks_search_results_526fc388b99e18881434478

于 2014-04-26T04:58:06.463 回答