2012-07-24 37 views
1

我正在嘗試將圖片發佈到客戶頁面。該頁面中可能有也可能沒有「牆照片」專輯。如何在新頁面中「產生」一個專輯壁紙

在沒有預先存在的「Wall Photos」專輯的情況下,我將如何創建/請求創建壁掛相冊?

我使用考拉,我可以創建相冊,但是我無法創建type =「wall」的相冊。

這裏是我用來創建/查找專輯代碼:

def get_photo_album(facebook_id) 

    # Looking for a pre-existing WALL PHOTO album 
    p "============= Getting Wall Photos album for fbid #{facebook_id}" 
    album = get_album facebook_id, 'Wall Photos' 

    unless album 
    p ' ======= Album FAIL 1 - getting Photos ' 
    album = get_album facebook_id, FALLBACK_ALBUM_NAME 
    unless album 
     p ' ========== Album FAIL 2 - MAKING Phtoos ' 
     @graph_client.put_object facebook_id, 'albums', 'name' => FALLBACK_ALBUM_NAME 

     sleep 3 # wait 3 seconds to let facebook make and fiddle with new album 

     album = get_album facebook_id, FALLBACK_ALBUM_NAME 
     unless album 
     p ' ##################### UTTER ALBUM FAIL ' 
     raise "Cannot use alternative photo album" 
     end 
    end 
    end 

    if album && album.length > 0 
    album 
    else 
    # ensure that there is an album. 
    raise "Cannot use alternative photo album" 
    end 
end 

def get_album(facebook_id, name) 

    params = {'name' => name}; 

    albums = @graph_client.get_connections(facebook_id, "albums", params) 

    p "Found #{albums ? albums.length : 0} albums named #{name} for fbid #{facebook_id}" 
    albums = albums.reject do |a| 
    a['name'] != name 
    end 
    p "Found #{albums ? albums.length : 0} albums named #{name} for fbid #{facebook_id} AFTER filtering for name" 
    pp albums 

    albums.length >0 ? albums[0] : nil 
end 

這裏是我用來放圖片本身

def put_image(facebook_id, params) 
    params = sanitize_params(params) 
    params = encode_necessary_params(params) 


    picture = URI.decode(params['picture']) 


    photo_album = get_photo_album(facebook_id) 
    photo_album_id = photo_album['id'] 

    params = params.reject do |key, value| 
    key == 'metadata_type' 
    end 

    p ' -------------------------------------- PUT PICTURE ----------------------------' 
    p "fbid:#{facebook_id}, message: #{params['message']}, picture: #{picture}" 
    p ' -------------------------------------- PUT PICTURE ----------------------------' 

    out = @graph_client.put_picture picture, {:message => params['message']}, photo_album_id 
    Statsd.increment("posts") 
    out 
rescue Exception => ex 


    handle_error(ex) 

end 

考拉碼我嘗試過幾種變化,包括:

  • 在@ graph_client.put_object參數中放置'type'=>'wall':不會發布圖像
  • 創建一個名爲'Wall Photos'的專輯 - 專輯顯示,但帖子看起來不像牆報。

需要明確的是:* 的最終目標是讓所有帖子這張專輯有「大」預覽 - 全列的寬度,而不是平鋪1" 預覽*

任何幫助,將不勝感激

回答

0

你試圖做的事情不會成爲可能 - Wall Photos相冊是一張專門的相冊,它是從發佈到feed的照片生成的,並且沒有可用的API來張貼照片 - if你張貼到/照片他們進入專輯專門爲應用程序。

但是,一切都不會丟失。如果您願意接受更新的功能,那麼您都可以實現您在Feed中提供大型照片的目標,同時爲您的應用獲得更大的病毒潛力。答案是Open Graph Actions。具體User Generated Photos in Open Graph

這個過程相對簡單:

  1. 創建你的應用的開放圖譜動作和對象(從開發者應用信息中心針對特定的應用程序做到這一點),這可以是任何根據你的應用做了什麼,但是,例如,Instagram使用'take'作爲他們的OG動作和'一張照片'作爲他們的OG對象。這意味着該應用的帖子看起來像「Matthew與Instagram合影」,並在下方顯示照片。您想要使用哪種操作取決於您。
  2. 要求publish_actions來自您的應用用戶的權限,如果您還沒有。
  3. 進行API調用到:

https://graph.facebook.com/me/YOURAPPNAMESPACE:YOURACTION? YOUROBJECTTYPE=URLWHEREYOUROGOBJECTISLOCATED& image[0][url]=URLOFPHOTOYOUWANTTOADD& image[0][user_generated]=true

您還需要簽署與該用戶的訪問令牌這個API調用,或者我相信,如果你有用戶publish_actions,你可以將上述呼叫轉換爲/ USERID而不是/我並使用您的應用的訪問令牌,它將起作用。

正如你可以從the documentation看到的那樣,這將給你一張完整尺寸的照片,你可以通過Open Graph動作創建它,如果你整合了諸如OG動作鏈接之類的附加組件, ,認證推介等。