开发者

cURL - is there a way for upload a video to facebook without form?

I have some curl codes and they upload any file to any host of me successfully.

But i want to upload a video to facebook without any form. It doesn't work on facebook.

Here are codes:

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

if i change curl to form it works.

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>';

What do you suggest? where is my fault?


Here's a better code:

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

IMPORTANT NOTES:

  1. Use realpath() to get the real path of the file
  2. use curl_close($ch)
  3. Most likely your code won't work from localhost unless you add a certificate (as in the code above) or using curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); but using the later is NOT adviced (refer to this)
  4. Check the makeRequest() method in base_facebook.php
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜