2011-12-20 218 views
11

我正尝试上传几张具有过去创建日期的旧照片,以便它们在时间轴上正确显示。现有的api只允许传递消息和来源。上传过去的日期照片

POST https://graph.facebook.com/ALBUM_ID/photos?access_token=xyz 
    ..multipart.form.data.with.message.and.source.. 

是我可以上传照片的唯一途径。

POST https://graph.facebook.com/PHOTO_ID?access_token=xyz 
    created_time=2010-01-20T09:04Z&updated_time=2010-01-20T09:04Z 

也不移动照片日期。

我尝试使用/feed api创建照片上传文章,但它不允许我将现有照片发布。它使它成为一个类型链接的帖子。

我想正是创建照片的对象和发布以下内容:

{ 
    "id": "xx_yy", 
    "from": { 
     "name": "My Name", 
     "id": "myfbid" 
    }, 
    "story": "<My Name> added a new photo.", 
    "picture": "<PhotoJPEG>", 
    "link": "<FBPhoto_URL>", 
    "name": "Photo Name", 
    "icon": "https://s-static.ak.facebook.com/rsrc.php/v1/yz/r/StEh3RhPvjk.gif", 
    "actions": [ 
     { 
      "name": "Comment", 
      "link": "https://www.facebook.com/xxx/posts/yy" 
     }, 
     { 
      "name": "Like", 
      "link": "https://www.facebook.com/xx/posts/yy" 
     } 
    ], 
    "privacy": { 
     "description": "Group", 
     "value": "CUSTOM", 
     "friends": "SOME_FRIENDS", 
     "allow": "<GROUPID>" 
    }, 
    "place": { 
     "id": "<placeid>", 
     "name": "<PlaceName>" 
    }, 
    "type": "photo", 
    "object_id": "12345", 
    "created_time": "2010-09-20T13:37:54+0000", 
    "updated_time": "2010-09-20T13:37:54+0000", 
    "comments": { 
     "count": 0 
    } 
    } 
+3

对于它的价值,我与尼克 - 费尔顿在谈到Facebook的12月第七,他表示,这是不可能的API,但会很快。我期待添加旧照片! – 2011-12-25 04:01:15

+0

我认为时间轴功能现在是一个以用户为中心的功能,这对于开发人员来说还是不可用的。即使对于用户来说,时间轴功能也不适用于所有...因此,当每一件事情都是虚假的时候,我希望Facebook会拿出一个通过API处理这些东西的选项 – Vijay 2011-12-28 06:59:39

回答

8

我是FB的工程师,但不在平台团队,所以我不是100%最新的。 Graph API中的照片上传器上有一个未记录的字段'backdated_time'。我认为它是超级新闻,并将在未来几周内被docd,但在这期间随时尝试它(并回到这里!)。

它看起来需要一个ISO-8601时间戳。

该文档团队已被追逐找出发生了什么事。

另外,DMCS不太正确。我们鼓励FB工程师(特别是我们的开发者支持团队的工程师)在此讨论问题,并且每周在我们的开发人员博客上发布多少个问题以及多少个答案。所以有一个承诺就SO回答问题 - 以https://developers.facebook.com/blog/post/625/为例。

但是,现有功能的支持与新功能的错误/请求之间存在差异。如果您有错误或功能请求,请将其添加到http://developers.facebook.com/bugs

谢谢!

+0

我试过了,它的工作原理!谢谢!工作示例代码在我的答案。而且......你知道是否有类似的地点?我尝试了一些猜测(例如“位置”),但没有任何工作。 – 2012-01-07 00:59:38

+1

如果该位置已经是图形中的某个位置,那么地点页面的“place”和uid可能会起作用 – mrtom 2012-01-09 11:29:02

+0

它起作用了!谢谢:) – Alagu 2012-01-10 20:46:31

1

我会与时间表如何利用新的假设,认为这是一个Facebook的bug或增强需要的要进行API。你有没有提交给Facebook?

+0

我还没有提交给Facebook,但我认为facebook.stackoverflow.com是与FB人谈话的方式。 (https://developers.facebook.com/blog/post/545/) – Alagu 2011-12-30 11:14:25

+0

不,只是其他程序员在这里。你将需要提交你自己的bug到https://developers.facebook.com/bugs – DMCS 2011-12-30 14:28:44

0

以下代码有效。 (结合了this FB example代码mrtom's undocumented field。)

<?php 

$app_id = "YOUR_APP_ID"; 
$app_secret = "YOUR_APP_SECRET"; 
$post_login_url = "YOUR_POST_LOGIN_URL"; // should be the URL of this script 

$code = $_REQUEST["code"]; 

//Obtain the access_token with publish_stream permission 
if(empty($code)) { 
    $dialog_url= "http://www.facebook.com/dialog/oauth?" 
    . "client_id=" . $app_id 
    . "&redirect_uri=" . urlencode($post_login_url) 
    . "&scope=publish_stream"; 
    echo("<script>top.location.href='" . $dialog_url 
    . "'</script>"); 
} 
else { 

    $token_url="https://graph.facebook.com/oauth/access_token?" 
    . "client_id=" . $app_id 
. "&redirect_uri=" . urlencode($post_login_url) 
    . "&client_secret=" . $app_secret 
    . "&code=" . $code; 
    $response = file_get_contents($token_url); 
    $params = null; 
    parse_str($response, $params); 
    $access_token = $params['access_token']; 

// Show photo upload form to user and post to the Graph URL 
$graph_url= "https://graph.facebook.com/me/photos?" 
. "access_token=" .$access_token; 

echo '<html><body>'; 
echo '<form enctype="multipart/form-data" action="' 
.$graph_url .' "method="POST">'; 
echo 'Please choose a photo: '; 
echo '<input name="source" type="file"><br/><br/>'; 
echo 'Say something about this photo: '; 
echo '<input name="message" 
    type="text" value=""><br/><br/>'; 
echo 'ISO Date for this photo: '; 
echo '<input name="backdated_time" 
    type="text" value=""><br/><br/>'; 

echo '<input type="submit" value="Upload"/><br/>'; 
echo '</form>'; 
echo '</body></html>'; 
} 

?>