CURL – Existe uma maneira de fazer upload de um vídeo para o Facebook sem formulário?

Eu tenho alguns códigos curl e eles carregam qualquer arquivo para qualquer host de mim com sucesso.

Mas eu quero fazer o upload de um vídeo para o Facebook sem nenhum formulário. Não funciona no Facebook.

Aqui estão os códigos:

<?php $app_id = "23***************"; $app_secret = "******************"; $my_url = "http://localhost/fbupload/"; $video_title = "Test"; $video_desc = "Test"; $code = $_REQUEST["code"]; if(empty($code)) { $dialog_url = "http://www.facebook.com/dialog/oauth?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) . "&scope=publish_stream"; echo("top.location.href='" . $dialog_url . "'"); } $token_url = "https://graph.facebook.com/oauth/access_token?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret=" . $app_secret . "&code=" . $code; $access_token = file_get_contents($token_url); $post_url = "https://graph-video.facebook.com/me/videos?" . "title=" . $video_title. "&description=" . $video_desc . "&". $access_token; //CURL CODES START 
  $ch = curl_init(); $data = array('name' => 'file', 'file' => '@/1.mp4'); curl_setopt($ch, CURLOPT_URL, $post_url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_exec($ch); 
 //CURL ENDS ?> 

Se eu mudar curl para formar, ele funciona.

 echo '
'; echo 'Please choose a file:'; echo ''; echo ''; echo '
';

O que você sugere? Onde é minha culpa?

Aqui está um código melhor:

 top.location.href='" . $dialog_url . "'"); } $token_url = "https://graph.facebook.com/oauth/access_token?client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url) . "&client_secret=" . $app_secret . "&code=" . $code; $access_token = file_get_contents($token_url); $post_url = "https://graph-video.facebook.com/me/videos?" . "title=" . $video_title. "&description=" . $video_desc . "&". $access_token; //CURL CODES START $ch = curl_init(); $data = array('name' => 'file', 'file' => '@'.realpath("sample_mpeg4.mp4"));// use realpath curl_setopt($ch, CURLOPT_URL, $post_url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); $res = curl_exec($ch); if (curl_errno($ch) == 60) { // CURLE_SSL_CACERT curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/src/fb_ca_chain_bundle.crt'); // path to the certificate $res = curl_exec($ch); } if( $res === false ) { echo curl_error($ch); } curl_close($ch); //CURL ENDS ?> 

ANOTAÇÕES IMPORTANTES:

  1. Use realpath() para obter o caminho real do arquivo
  2. use curl_close($ch)
  3. Provavelmente, seu código não funcionará a partir do localhost, a menos que você adicione um certificado (como no código acima) ou use curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); mas usar o posterior não é recomendado (consulte isso )
  4. Verifique o método makeRequest() em base_facebook.php