Как загрузить видео и получить его URL в приложении Facebook - PullRequest
0 голосов
/ 28 февраля 2012

Я занимаюсь разработкой приложения для холста Facebook, в котором есть функция, с помощью которой пользователь может загружать видео.

Я думаю о том, чтобы следовать этому руководству: Документация по загрузке видео с Facebook

Но проблема в том, что когда пользователь загружает видео, мне нужно получить URL-адрес видео из Facebook после загрузки, чтобы я мог сохранить его в своей базе данных.И мне нужно, чтобы пользователи моего Приложения могли воспроизводить его с помощью встроенного проигрывателя.

Возможно ли это?

Если нет, то вы, ребята, можете предложить какое-то другое решение?

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

Официальный учебник поможет вам понять, что и как правильно выбрать API Graph Graph для загрузки видео. Но очевидно, что вы не можете использовать его как есть, так как вы отправляете форму непосредственно в конечную точку Facebook и, следовательно, вы больше не контролируете фрейм!

Я написал учебник , основанный на аналогичном коде из поста в Facebook, но использующий CURL, чтобы вы не попали на конечную точку Facebook. Это было для загрузки изображений.

Используя тот же код, но с небольшим изменением для загрузки видео, ваш код может выглядеть следующим образом:

<?php
error_reporting(E_ALL & ~E_NOTICE);
$app_id = "APP_ID";
$app_secret = "APP_SECRET";
$my_url = "REDIRECT_URI"; // mainly, redirect to this page
$perms_str = "publish_stream";

$code = $_REQUEST["code"];

if(empty($code)) {
    $auth_url = "http://www.facebook.com/dialog/oauth?client_id="
    . $app_id . "&redirect_uri=" . urlencode($my_url)
    . "&scope=" . $perms_str;
    echo("<script>top.location.href='" . $auth_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;
$response = file_get_contents($token_url);
$p = null;
parse_str($response, $p);
$access_token = $p['access_token'];
$graph_url= "https://graph-video.facebook.com/me/videos?"
         . "access_token=" .$access_token;
if (!empty($_FILES)) {
    $params = array();
    if( isset($_POST['title']) ) {
        $params['title'] = trim($_POST['title']);
    }
    if( isset($_POST['description']) ) {
        $params['description'] = trim($_POST['description']);
    }

    $uploaddir = './uploads/'; // Upload folder
    $uploadfile = $uploaddir . basename($_FILES['source']['name']);
    if (move_uploaded_file($_FILES['source']['tmp_name'], $uploadfile)) {
        $params['source'] = "@" . realpath($uploadfile);
    }

    // Start the Graph API call
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$graph_url);

    /*
        Next option is only used for
        user from a local (WAMP)
        machine. This should be removed
        when used on a live server!
        refer:https://github.com/facebook/php-sdk/issues/7
    */
    //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);

    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
    $result = curl_exec($ch);
    $decoded = json_decode($result, true);
    var_dump(curl_error($ch));
    curl_close($ch);
    if(is_array($decoded) && isset($decoded['id'])) {
        /*
            video is uploaded successfully:
            1) show success message
            2) optionally, delete video from our server
        */
        $msg = "Video uploaded successfully: {$decoded['id']}";
    }
}
?>
<!doctype html>
<html>
<head>
<title>Upload</title>
<style>
label {float: left; width: 100px;}
input[type=text],textarea {width: 210px;}
#msg {border: 1px solid #000; padding: 5px; color: red;}
</style>
</head>
<body>
<?php if( isset($msg) ) { ?>
<p id="msg"><?php echo $msg; ?></p>
<?php } ?>
<form enctype="multipart/form-data" action="" method="post">
    <p><label for="title">Title</label><input type="text" name="title" value="" /></p>
    <p><label for="description">Description</label><input type="text" name="description" value="" /></p>
    <p><label for="source">Video</label><input type="file" name="source" /></p>
    <p><input type="submit" value="Upload" /></p>
</form>
</body>
</html>

А вот пара замечаний:

  • как уже упоминалось в руководстве, это всего лишь демонстрация! Вы должны не использовать код в живом приложении!
  • Я не обрабатываю ошибки CURL здесь ... но вы должны! хорошей отправной точкой будет официальный PHP-SDK код
  • Полагаю, вам следует использовать textarea для описания видео вместо текста input
  • вам все равно понадобится разрешение user_videos для чтения видеоинформации и получения необходимых данных
2 голосов
/ 28 февраля 2012

Ознакомьтесь с документацией Facebook!

Вот ссылка, которая вам тоже поможет: https://developers.facebook.com/docs/reference/api/video/

Загрузите тестовое видео и print_r все, что возвращается. Где-то там должно быть удостоверение личности с видео. Обновите код, чтобы получить идентификатор видео, а затем используйте API-интерфейс графика для получения информации об идентификаторе видео. Он вернет что-то вроде этого:

https://developers.facebook.com/tools/explorer/?method=GET&path=2031763147233

Тогда вы можете просто взять раздел видео embed_html и вставить его куда-нибудь.

Извините, я не могу помочь, не могу найти информацию о том, что возвращает видео API, но я предполагаю, что есть идентификатор. Вам придется проверить это, чтобы узнать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...