Размещение встроенной ссылки на видео с помощью API Graph Facebook

При ручном присоединении ссылки на видео (с YouTube, Vimeo и т. Д.) К сообщению с помощью веб-интерфейса Facebook, 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 приводит только к сообщению без миниатюрного изображения.

источник: URL-адрес Flash-фильма или видеофайла, который будет встроен в сообщение. read_stream.

Как можно реализовать то же встроенное поведение, используя только API Graph?

7 ответов

Решение

Похоже, что вы должны извлечь URL-адреса фактического SWF на странице и миниатюрное изображение самостоятельно. Например, это похоже на работу:

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 здесь) и вставьте его в URL http://www.youtube.com/e/<code> для источника и и http://img.youtube.com/vi/<code>/0.jpg для картины.

Вот как можно разместить видео вручную для 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
                }

Совместное использование в качестве ссылки с /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

Он не будет работать для публикации в ГРУППАХ на /feeds или /links. Смотрите здесь. Пожалуйста, опишите проблему, чтобы исправить ее в ближайшее время.

/ links является копией /feeds, которая показывает только сообщения типа ссылки, опубликованные самим пользователем.

Не используйте /feed, используйте /links (https://graph.facebook.com/me/links/) и просто POST-параметры "message" и "link", используя формат URL YouTube /watch? V =ZL7nV7WwJKg. / feed никогда не работал для меня, он просто разместил статическую графику и ссылку, но я хотел, чтобы он действительно воспроизводился встроенным на Facebook, как это происходит, когда вы делитесь видео с YouTube на Facebook. Работает как шарм.

Вместо этого попробуйте опубликовать ссылку в качестве атрибута сообщения, она работает для меня таким образом.

message = your message + link

Совместное использование с помощью API любого файла.swf или видео не приведет к отображению миниатюры на Facebook, кроме YouTube. И это в соответствии с дизайном на Facebook. Проверьте эту ссылку

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

Другие вопросы по тегам