Я создал приложение facebook в прошлом месяце.
Я пытаюсь загрузить видео с моего PHP-кода, но он выдает сообщение об ошибке (#353) You must select a video file to upload.
Хотя я пытался загрузить одно и то же видео из своей учетной записи Facebook напрямую, и он загружается должным образом.
Я не знаю, что не так, что существует, PHP-код выглядит так:
$api="/me/videos"; $uploaded_videos=$facebook->api($api); $video_file_path=$user_dir_abs_path."/NewProject20.mov"; if(file_exists($video_file_path)) { echo "file exists..."; }else{ die("not exist"); } $ret_obj = $facebook->api('/me/videos', 'POST', array( 'source' => '@' . $video_file_path, 'title' => "This is just a test", 'description' => 'test9000', 'privacy' => json_encode(array('value' => 'EVERYONE' )), ) ); echo '<pre>'. $ret_obj.'</pre>';
Видео, которое я загрузил, здесь
Документ, который я называю кодом, здесь
https://developers.facebook.com/blog/post/493/
https://developers.facebook.com/blog/post/608/
Я также использовал следующий код, но я получаю ту же ошибку.
$id=$facebook->getUser(); /* UID of the connected user */ $api="/".$id."/videos"; echo "api -> $api"; /*$ret_obj = $facebook->api('/me/videos', 'POST', array(*/ $ret_obj = $facebook->api($api, 'POST', array( 'source' => '@' . $video_file_path, 'title' => "This is just a test", 'description' => 'test9000', 'privacy' => json_encode(array('value' => 'EVERYONE' )), ) ); echo '<pre>'. $ret_obj.'</pre>';
Из ваших комментариев я узнал, что вам нужно загрузить / опубликовать видео с вашего сервера на facebook, вместо этого создать способ публикации, указанный в документации.
Я не знаю много о facebook-sdk, я бы предложил вам использовать CURL-метод.
<?php $app_id = "XXXXXXXXXXXXXX"; $app_secret = "XXXXXXXXXXXXXXXXXXXXXXX"; $my_url = "http://localhost/url_of_this_page.php"; $video_title = "Video title here"; $video_desc = "Video description here"; $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; $ch = curl_init(); $data = array('name' => 'file', 'file' => '@'.realpath("ipad.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( $res === false ) { echo curl_error($ch); } curl_close($ch); ?>
Как ответ от facebooks, вы получите идентификатор видео:
{"id":"892161284142980"}
Посмотрите на https://developers.facebook.com/docs/graph-api/reference/v2.0/user/videos/#publish.
Видео должны быть закодированы как
multipart/form-data
и опубликованы вgraph-video.facebook.com
вместо обычного URL-адреса API Graph.
Если у кого-то все еще есть проблема с загрузкой видео через facebook sdk4 api, код ниже работал для меня:
$file_name = "/absolute/path/to/file/in/directory"; $linkData = [ 'source' => new \CURLFile($file_name, 'video/m4v'), 'message' => 'Your message', ]; $ret_obj = $facebook->api('/me/videos', 'POST', $linkData);