1

顧客のページに写真を投稿しようとしています。ページに「Wall Photos」アルバムがある場合とない場合があります。

既存の「ウォール フォト」アルバムがないシナリオでは、ウォール フォト アルバムの作成/作成を要求するにはどうすればよいですか?

Koala を使用しており、アルバムを作成できますが、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

次のようないくつかのバリエーションを試しました。

  • 'type' => 'wall' を @graph_client.put_object パラメーターに入れる: 画像をまったく投稿しない
  • 「Wall Photos」という名前のアルバムを作成します - アルバムは表示されますが、投稿がウォール投稿のようには見えません。

明確にするために: *最終的な目標は、このアルバムへのすべての投稿に「大きな」プレビューを表示することです。1 インチのタイル表示ではなく、列幅いっぱいに表示します。 *

どんな助けでも大歓迎です。

4

1 に答える 1

0

あなたがやろうとしていることは不可能です - Wall Photos アルバムは、フィードに投稿された写真から生成される特別なアルバムであり、そのように写真を投稿するための API はありません - /photos に投稿する場合アプリ専用のアルバムに入ります。

しかし、すべてが失われるわけではありません。新しい機能を喜んで採用する場合は、フィードに大きな写真を含めるという目標を達成すると同時に、アプリのバイラルの可能性を高めることができます。その答えは Open Graph アクションです。具体的には、Open Graph でユーザーが作成した写真

このプロセスは比較的単純です。

  1. アプリの Open Graph アクションとオブジェクトを作成します (特定のアプリの開発者アプリ ダッシュボードからこれを行います)。これは、アプリの機能に応じて何でもかまいませんが、たとえば、Instagram は OG アクションとして「took」を使用し、 OGオブジェクトとしての「写真」。これは、そのアプリからの投稿が「マシューが 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 がある場合は、/me の代わりに /USERID に対して上記の呼び出しを行い、アプリのアクセス トークンを使用して、それが動作します。

ドキュメントからわかるように、これにより目的のフル サイズの写真が得られ、Open Graph アクションによって作成されるため、OG アクション リンク、認証された参照などの追加機能を組み込むと、さらにバイラルなホスト全体が可能になります。等

于 2012-07-24T19:10:27.937 に答える