如何在新页面中“生成”Wall专辑

时间:2012-07-24 18:38:38

标签: facebook-graph-api facebook-wall koala

我正在尝试将图片发布到客户的页面。页面中可能有也可能没有“Wall Photos”相册。

在没有预先存在的“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

我尝试了几种变体,包括:

  • put'type'=> @ graph_client.put_object参数中的'wall':根本不发布图像
  • 创建名为“Wall Photos”的专辑 - 相册会显示,但帖子看起来不像墙贴。

要明确:* 最终目标是让此相册的所有帖子都有“大”预览 - 完整列宽,而非平铺1“预览。*

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

你想要做的事情是不可能的 - Wall Photos专辑是一张特殊的专辑,它是根据发布到Feed的照片生成的,并且没有API可用于发布照片 - 如果发布到/照片,他们进入专门为该应用程序的专辑。

然而,一切都不会丢失。如果您愿意接受更新的功能,那么您既可以实现在饲料中拍摄大照片的目标,同时也可以为您的应用带来更大的病毒潜力。答案是Open Graph Actions。具体来说是User Generated Photos in Open Graph

这个过程相对简单:

  1. 为您的应用创建一个Open Graph操作和对象(从该应用程序的Developer App Dashboard执行此操作),这可以取决于您的应用程序的功能,但是,例如,Instagram使用'take'作为他们的OG动作和'照片'作为他们的OG对象。这意味着该应用程序的帖子看起来像“Matthew用Instagram拍了照片”并显示下面的照片。您想要使用哪种操作取决于您。
  2. 向您的应用用户申请publish_actions权限,如果您还没有。
  3. 进行API调用:
  4. https://graph.facebook.com/me/YOURAPPNAMESPACE:YOURACTION? YOUROBJECTTYPE=URLWHEREYOUROGOBJECTISLOCATED& image[0][url]=URLOFPHOTOYOUWANTTOADD& image[0][user_generated]=true

    您还需要使用该用户的访问令牌对此API调用进行签名,或者我相信,如果您有该用户的publish_actions,则可以将上述调用发送到/ USERID而不是/ me并使用您的应用程序访问令牌,它将工作。

    正如您从the documentation所看到的,这将为您提供完整尺寸的照片,您可以通过Open Graph动作创建它,如果您加入额外的附加功能,可以提供额外的病毒式传播。 OG行动链接,经过身份验证的推荐等。