cURL - есть ли способ загрузить видео на Facebook без формы? - PullRequest
0 голосов
/ 21 августа 2011

У меня есть несколько curl-кодов, и они успешно загружают любой файл на любой мой хост.

Но я хочу загрузить видео на Facebook без какой-либо формы.Это не работает на Facebook.

Вот коды:

<?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("<script>top.location.href='" . $dialog_url . "'</script>");
 }

 $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
?>

, если я изменяю curl, чтобы сформировать это работает.

echo '<form enctype="multipart/form-data" action="'.$post_url.'
 "method="POST">';
 echo 'Please choose a file:';
 echo '<input name="file" type="file">';
 echo '<input type="submit" value="Upload" />';
 echo '</form>';

Что вы предлагаете?где моя вина?

1 Ответ

1 голос
/ 22 августа 2011

Вот лучший код:

<?php
 $app_id = "XXXXXXXXXXXXXXXx";
 $app_secret = "XXXXXXXXXXXXXXXxx";
 $my_url = "YOUR_URL_HERE";
 $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_actions";
 echo("<script>top.location.href='" . $dialog_url . "'</script>");
 }

 $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
?>

ВАЖНЫЕ ЗАМЕЧАНИЯ:

  1. Используйте realpath(), чтобы получить реальный путь к файлу
  2. использовать curl_close($ch)
  3. Скорее всего, ваш код не будет работать с локального хоста, если вы не добавите сертификат (как в коде выше) или не используете curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);, но позже используете НЕ рекомендуется (см. this )
  4. Проверьте метод makeRequest() в base_facebook.php
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...