我正在开发一个Facebook画布应用程序,该应用程序具有用户可以上传视频的功能。
我正在考虑以下教程: Facebook Video upload documentation
但问题是,当用户上传视频时,我需要在上传后从Facebook获取视频的网址,以便我可以将其存储在我的数据库中。我需要能够让我的应用程序的用户使用嵌入式播放器播放它。
这可能吗?
如果没有,你们可以提出其他解决方案吗?
答案 0 :(得分:2)
查看Facebook文档!
以下是一个可以帮助您的链接:https://developers.facebook.com/docs/reference/api/video/
上传测试视频并print_r
返回的所有内容。在某处应该有视频ID。更新代码以获取视频ID,然后使用图API获取有关视频ID的信息。它将返回如下内容:
https://developers.facebook.com/tools/explorer/?method=GET&path=2031763147233
然后你可以简单地抓住视频的embed_html部分并将其嵌入某个地方。
抱歉,我无法获得更多帮助,找不到有关视频api返回的任何信息,但我认为有一个ID。你必须测试它才能找到答案。
答案 1 :(得分:2)
官方教程将帮助您了解如何点击正确的图谱API点来上传视频。但显然你不能按原样使用它,因为你将表单直接提交到Facebook端点,因此你不再控制框架了!
我根据Facebook帖子中的类似代码编写了tutorial,但使用了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>
以下是几点说明:
textarea
代替文字input
user_videos
权限才能阅读视频信息并获取所需数据