2011-12-20 24 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>'; 
} 

?>