web-dev-qa-db-ja.com

Facebook Graph APIを使用して埋め込みビデオリンクを投稿する

Facebook Webインターフェイスを使用して、ビデオリンク(YouTube、Vimeoなど)を手動で投稿に添付すると、Facebookはリンクをビデオとして自動的に認識し、結果のステータスメッセージでビデオをインラインで再生できます。ビデオは、ウォールフィードまたはニュースフィードに埋め込みプレーヤーとして表示されます。


埋め込み動画が手動で投稿された後の様子の例を次に示します。

Embedded Video


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

Not-Embedded Video


答えはsource引数に関連していると思いますが、URLがどうあるべきかわかりません。同じURLを指定すると、サムネイル画像のない投稿になります。

source :投稿に埋め込むFlashムービーまたはビデオファイルのURL。 read_stream。

Graph APIのみを使用して同じ埋め込み動作を実現するにはどうすればよいですか?

40
Ryan McGeary

ページ内の実際の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)を取得し、URLに挿入しますhttp://www.youtube.com/e/<code>はソースおよびhttp://img.youtube.com/vi/<code>/0.jpg写真用。

49
Anomie

YOUTUBEとVIMEOの動画を手動で投稿する方法は次のとおりです(オンラインで見つけるのは難しい)。具体的には、リンク値が元のユーザーのWebサイト/ブログ投稿を指すようにする場合。

                //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
                }
6
dandan

/ feedの代わりに/ linksを使用してリンクとして共有する方がうまくいくようです。 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
4
mindriot

/ feedを使用せず、/ links(https://graph.facebook.com/me/links/)を使用し、YouTube =を使用してPOST "message"および "link"パラメーターを使用します/ watch?v = ZL7nV7WwJKg URL format。/ feedは私には役に立たず、静的なグラフィックとリンクを投稿しただけですが、YouTubeからFacebookにビデオを共有するときのように、Facebookに埋め込まれて実際に再生したかったのです。 。

1
Jacob Robinson

/ feedsまたは/ linksでGROUPSに投稿することはできません。 here を参照してください。近いうちに修正するために、この問題に賛成票を投じてください。

/ linksは/ feedsの複製であり、ユーザー自身が投稿したタイプのリンクの投稿のみを表示します。

1
giorgos

代わりに、メッセージ属性としてリンクを投稿してみてください、それは私のためにそのように動作します。

message = your message + link
0
Devaroop

APIを使用して.swfファイルまたはビデオを共有すると、そのyoutubeを除き、facebookにサムネイルが表示されません。そして、それはFacebookによる設計によるものです。このリンクを確認してください

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

0
Vikash Singhal