2011-05-30 48 views
2

我們的應用程序使用PHP作爲Facebook的JS-SDK。我們可以通過兩個sdks訪問用戶圖像和朋友的圖像。將照片上傳到用戶相冊也適用。如何在用戶牆上發佈圖庫圖片

用戶當前選擇他的一個圖像,這些圖像在我們的服務器上被操縱並上傳到Facebook到它來自的相冊中。該部分起作用。我們現在想要將上傳的圖像發佈到用戶牆上。 Facebook本身會在用戶提供的關於新上傳的圖片的帖子上生成一篇文章(可以在上傳請求中禁用),但這些帖子是不可定製的。標準的Facebook發佈請求需要一個網址到可選的照片。該文件聲明,不允許鏈接到來自Facebook內容傳送網絡的圖像(已經由圖形api確認,因爲它引發了適當的錯誤)。

是否可以創建一個包含圖庫圖像的標準牆貼?理想情況下,它會使用圖庫彈出窗口,但這顯然是超級好玩的。

外部託管的副本是我們已知的(不需要的)解決方法。重新上傳圖片是一個選項,只要它不會在圖庫中顯示兩次。

回答

4

簡單的解決方案:

找一個TinyURL的爲您完成TinyURL的API fbcdn'ed圖片:

上面的url的示例:

http://tinyurl.com/api-create.php?url=http://a4.sphotos.ak.fbcdn.net/hphotos-ak-snc3/13943_196960329960_683709960_2997879_7206516_n.jpg 

返回:

http://tinyurl.com/3ta96kh 

然後使用這個URL爲 「圖片」,我在這裏嘗試過了,它的作品! :http://jsfiddle.net/dwarfy/VYAeD/27/

有另一種解決方案here但似乎Facebook的修正它,當我使用POST作爲https://graph.facebook.com/PICTURE_ID圖片代替FBCDN圖像URL還在說與Facebook CDN的錯誤。

我認爲這是最好的解決辦法...

我的例子不使用鏈接參數,但你可以將其設置爲畫廊的圖片

+0

有了這個,你不必在你的服務器上有一個圖像的副本,你不必自己做重定向,但它使公共鏈接到你的圖像..這可能不是很好的隱私 – dwarfy 2011-06-09 15:40:31

+0

無論如何,FBCDN中的任何圖片都有「公開鏈接」,只是我們無法找到我想要的這些網址。 – dwarfy 2011-06-09 15:43:10

+0

awesomeness!這仍然工作,謝謝! – zaw 2013-04-01 06:52:07

0

您必須複製該圖片,否則您無法在標準後期對話框中使用此圖片。

使用PHP函數

copy() 

我知道你正在尋找其他辦法,只好到你的服務器或任何其他服務器上創建一個備用的形象是唯一的解決辦法。

+0

正如我所說的:擁有的外部副本該圖像是一種不需要的解決方案。複製圖像不是問題的一部分。 – marsbear 2011-06-06 22:37:09

+0

是的,我寫道:「你必須製作該圖像的副本,否則你無法使用這個圖像」。 – 2011-06-08 15:34:10

+0

我不需要複製這些圖像。我們已經在我們的服務器上擁有這些圖像,因爲我們已經創建了它 – marsbear 2011-06-09 10:22:38

1

事實上,你不能在用戶的牆上張貼保存在fb上的圖像,但是你也不必將它保存在你的服務器上。如果您想發表的圖像,例如:

http://a4.sphotos.ak.fbcdn.net/hphotos-ak-snc3/13943_196960329960_683709960_2997879_7206516_n.jpg

Facebook上,你知道會不會接受這一點。但它是沒有問題,像這樣發佈:http://yourserver.com/script.php?image=a4.sphotos.ak.fbcdn.net/hphotos-ak-snc3/13943_196960329960_683709960_2997879_7206516_n.jpg(沒有http:// - 它的重要,如果你包括http://臉書將找出發生了什麼 - 我們不希望它:)

script.php的是你的服務器上的PHP文件,這樣做:

<? 
    $url = "http://".$_GET['image']; 
    header('Content-type: image/jpeg'); 
    echo file_get_contents($url); 
?> 

或者是這樣的:

<? 
    $url = "http://".$_GET['image']; 
    $image = imagecreatefromjpeg($url); 
    //some image modifications here// 
    header('Content-type: image/jpeg'); 
    echo imagejpeg($image, null, 100); 
?> 

你也可以添加URL的數據庫,並張貼這樣的:http://yourserver.com/script.php?imageid=ID隱藏所有圖像'的真實路徑。


如果你想對交通保存在牆壁上發佈圖片後只是重新定位:

<? 
    //if published then just redirect 
    $url = "http://".$_GET['image']; 
    header('Location: '.$url); die(); 
?> 
+0

有趣的想法壽我仍然必須提供所有圖像的交通方面。您的第一個建議可以用於任何網址,以便任何人都可以使用我們的服務器來代理請求。所以我必須像第三個例子那樣保護系統。這將導致更多的開銷,因爲我們不得不使用數據庫。將圖像存儲在我們的服務器上仍然是最快和最簡單的方法,即使這不是一個選項。發佈後爲+1創造性 – marsbear 2011-06-09 10:20:12

+0

(當fb上的縮略圖已經創建時),您可以從file_get_contents($ url)切換爲重定向:header('Location:$ url');死(); – Erroid 2011-06-09 15:42:14