2011-03-08 78 views
40

當使用Facebook網頁界面手動將視頻鏈接(從YouTube,Vimeo等)添加到帖子時,Facebook會自動將該鏈接識別爲視頻,並允許生成狀態消息以串聯方式播放視頻。該視頻在Wall或News Feed中以嵌入式播放器的形式顯示。使用Facebook Graph API發佈嵌入式視頻鏈接


下面是嵌入式視頻在手動發佈後的樣子。

Embedded Video


發佈時使用圖形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 

Not-Embedded Video


我懷疑答案是關係到source說法,但我不知道該URL應該有什麼。指定相同的URL只會產生一個沒有任何縮略圖的文章。

source:要嵌入到帖子中的Flash電影或視頻文件 的URL。 read_stream。

如何通過單獨使用Graph API來完成相同的嵌入行爲?

+0

圖像是不可見的了,可能他們應該SE上傳。 – Herbert 2015-05-11 14:36:45

+0

@Herbert對不起,這些圖像是在Stack Overflow自己託管圖像之前由Skitch託管的。我不再擁有這些屏幕截圖的副本。而Skitch(又名印象筆記)殺了他們的舊網址模式:https://discussion.evernote.com/topic/80874-old-skitch-image-urls-all-broken/ – 2015-05-11 21:55:50

回答

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>的URL中,並將其插入到圖片的http://img.youtube.com/vi/<code>/0.jpg中。

+2

+1,但這不再有效。源參數不僅被忽略,還會使圖片參數被忽略。請問我的觀察結果是否正確? – Bozho 2011-04-03 20:04:04

+0

@Bozho:剛纔我嘗試過時爲我工作。 – Anomie 2011-04-03 23:15:07

+0

這個問題似乎是......我用'http:// youtube.com'作爲嵌入鏈接而不是'http:// www.youtube.com'。現在它可以工作。但Facebook可以遵循該重定向.. :) – Bozho 2011-04-04 16:35:53

0

而不是嘗試發佈鏈接作爲消息屬性,它適用於我這種方式。

message = your message + link 
+0

沒有抱歉的傢伙....這隻顯示縮略圖...不是嵌入的視頻... – Devaroop 2011-08-24 12:18:49

+0

如果後的形式(文本+鏈接+文本)如果然後更好地包括在消息屬性中的整個事情。它甚至沒有指定鏈接= .... – Devaroop 2011-09-06 09:44:51

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 
       } 
+0

如果我把視頻嵌入到'鏈接'屬性頁面的網址,我得到一個圖像預覽,而不是在Facebook上的視頻預覽。你真的對'源'和'鏈接'有不同的價值嗎? – Sulli 2016-10-05 13:20:20

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 
+0

非常感謝。經過幾天的調查,使用'/ me/links'起作用。 – 2015-03-08 23:46:36

+0

@mindriot看起來像鏈接API現在已被棄用...聽不清 – avenet 2015-11-29 12:49:21

1

不要使用/飼料,使用/鏈接(https://graph.facebook.com/me/links/)和簡單的POST 「消息」,並使用YouTube /表 「鏈接」 參數? v = ZL7nV7WwJKg URL格式。/feed從來沒有爲我工作,它只是發佈了一個靜態圖形和鏈接,但我希望它實際上在Facebook上播放嵌入,就像它將YouTube上的視頻分享到Facebook一樣。奇蹟般有效。

1

它無法在GROUPS上發佈在/ feeds或/ links上。 見here。請迅速解決此問題,以便儘快解決。

/links是/ feeds的副本,其中 只顯示由用戶自己發佈的類型鏈接的帖子。

+0

giorgos,我很感激這個答案是前一段時間發佈的,但請避免在未來使用URL縮寫。您的帖子有65535個字符的限制,因此應該沒有理由使用網址縮短器。 – Matt 2015-07-31 08:29:46