Facebook graph api 如何";“繁殖”;新页面中的墙相册

Facebook graph api 如何";“繁殖”;新页面中的墙相册,facebook-graph-api,facebook-wall,koala,Facebook Graph Api,Facebook Wall,Koala,我正在尝试将图片发布到客户页面。页面中可能有也可能没有“墙上照片”相册 在没有预先存在的“墙照”相册的情况下,我如何创建/请求创建墙照相册 我正在使用考拉,我可以创建相册,但不能使用type=“wall”创建相册 以下是我用来创建/查找相册的代码: def get_photo_album(facebook_id) # Looking for a pre-existing WALL PHOTO album p "============= Getting Wall Photos albu

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

在没有预先存在的“墙照”相册的情况下,我如何创建/请求创建墙照相册

我正在使用考拉,我可以创建相册,但不能使用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\u client.put\u对象参数中放置'type'=>'wall':根本不会发布图像
  • 创建一个名为“Wall Photos”的相册-相册会出现,但帖子看起来不像墙帖
需要明确的是:*最终目标是让这张专辑的所有帖子都有“大”预览-全列宽,而不是平铺的1“预览*


任何帮助都将不胜感激。

您尝试做的都是不可能的-墙上的照片相册是一个特殊的相册,它是从发布到feed的照片生成的,并且没有API可用于以这种方式发布照片-如果您发布到/Photos,它们将进入专门用于该应用程序的相册

然而,一切都没有失去。如果你愿意接受更新的功能,你俩都将能够实现在订阅源中拥有大照片的目标,同时为你的应用程序实现更大的病毒潜力。答案是开放图形操作。特别是

这一过程相对简单:

  • 为您的应用程序创建一个开放图形操作和对象(从该特定应用程序的开发者应用程序仪表板执行此操作),这可以是任何操作,取决于您的应用程序所做的操作,但是,例如,Instagram使用“take”作为其OG操作,使用“a photo”作为其OG对象。这意味着来自该应用程序的帖子看起来像“Matthew用Instagram拍摄了一张照片,并展示了下面的照片。你想使用哪种操作取决于你自己
  • 向应用程序用户请求
    publish\u操作
    权限(如果您尚未获得)
  • 对以下对象进行API调用:
  • https://graph.facebook.com/me/YOURAPPNAMESPACE:YOURACTION?
    YOUROBJECTTYPE=UrlYourOgObjectsLocated的位置&
    图像[0][url]=URLOFPHOTOYOUWANTOADD&
    图像[0][user_generated]=true

    您还需要使用该用户的访问令牌对该API调用进行签名,或者我相信,如果您为该用户执行了publish_操作,您可以对/USERID而不是/me进行上述调用,并使用您的应用程序的访问令牌,它将起作用

    如你所见,这将为你提供你想要的全尺寸照片,并通过开放图形操作创建它,如果你加入额外的功能,如OG操作链接、认证推荐等,将允许一整套额外的病毒性