2011-11-03 147 views
2

我需要通過圖表api上傳一些照片到Facebook,但照片不在同一臺服務器上,這可能嗎?如何通過圖形api上傳照片,但當照片在服務器外?

+0

您需要首先將這些照片下載到您的服務器,然後上傳它們。 – jlb

+0

我明白@jlb,但客戶無法給我訪問權限。 – MrSanders

+0

@MrSanders我在下面張貼我的答案後閱讀您的評論。您無法通過HTTP(瀏覽器)或FTP/SCP訪問圖像? –

回答

0

這是可能的,但需要存儲本地副本的中間步驟(如@jlb所述)。您只需要您想要拉取的圖像的URL和適當的Facebook權限。試試這個:

function pushImageToFacebook($url_of_image , $fb_user_id , $fb_access_token) 
{ 
    // Creates a new image file in the local directory and gets 
    // ...a file handle for it. MAKE SURE that you are able to 
    // ...write to and read from the local directory or this 
    // ...will fail due to permissions. 
    $fh = fopen($filename = 'image' . microtime() , 'w'); 
    // Writes the image data to the local file 
    fwrite($fh , file_get_contents($url_of_image)); 
    // Closes the file handle 
    fclose($fh); 

    // Sets the message argument 
    $args = array('message' => 'Photo Uploaded Using cURL'); 
    // Sets the filename argument 
    $args[basename($filename)] = '@' . realpath($filename); 
    // Initializes a cURL session and gets a cURL handle 
    $ch = curl_init(); 
    // This is your Facebook Graph API URL 
    $url = "https://graph.facebook.com/{$fb_user_id}/photos?access_token={$fb_access_token}"; 
    // Set all of your cURL session options 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_HEADER, false); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_POST, true); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $args); 
    // Fire the cURL and grab the return data (Facebook image ID) 
    $buffer = curl_exec($ch); 

    // OPTIONAL : Display the Facebook image ID 
    print_r(json_decode($buffer , true)); 

    return; 
} 
+0

謝謝,實際上我執行了一個類似的過程,但客戶(可口可樂,我認爲是安全考慮)有一個非常複雜的服務器進程來編寫文件,我需要找到任何方式上傳該照片無需下載。 (如果還有其他方法!:() – MrSanders

+0

您應該推送到Facebook上的圖像已經在客戶的服務器上,或者您正在設置某些內容,以便將來的圖像將推送到Facebook?無法訪問圖像,這是不可能的,有或沒有Graph API的他們到Facebook上,你能提供關於工作流程的更多細節嗎?你的代碼將駐留在哪裏?在與服務器上的圖像相同? –

+0

圖像在主服務器之外,我知道這些照片需要放在與api上傳相同的服務器上,而我做了這些,但客戶不讓我在同一臺服務器上下載照片,然後我試圖找到其他方式上傳不要下載他們的照片,但它似乎是不可能的。Facebook不允許通過URL上傳照片。 工作流:服務器(其中駐留FB api鍵) - >請求從外部服務器下載照片(在此st ep客戶說,你不需要找出另一種方式) - >一旦下載它們 - > Facebook上傳(服務器駐留FB api)。 – MrSanders

0

你確信顧客不會認爲你將發佈一個鏈接到他們的服務器,以FB上存在的,這樣每個視圖將產生在他們的網站流量的照片。如果圖像有沒有知識產權的關注,那麼我認爲他們擔心其他外部方將跟蹤到他們的內部服務器的URL ..

或者,讓客戶通過電子郵件發送照片,然後用cron腳本輪詢INBOX,然後從郵箱下載並在收到時上傳到FB。您需要解決安全問題,例如找到電子郵件地址併發送不應該放在FB上的照片的人。