1

特定の友達がタグ付けされている写真をプルしようとしています。そこで、user_photosfriends_photos権限を持つアクセストークンを作成しました。

  1. クエリを実行して、タグ付けされた写真を取得できます。

    SELECT object_id FROM photo_tag WHERE subject=me()

  2. me()またはuser_idを使用して自分自身を参照できます。

    SELECT object_id FROM photo_tag WHERE subject=1102318

しかし、友達がタグ付けされている写真を要求すると、空のセットが表示されます。

SELECT object_id FROM photo_tag WHERE subject=1102054

-> []

奇妙なことに、次の(大規模な)クエリを使用して、すべて photo_tags友達を引っ張ることができます。

SELECT object_id FROM photo_tag WHERE subject IN
    (SELECT uid2 FROM friend WHERE uid1=me()) 

-> Works(!)、最初の1400程度を返します。したがって、権限の問題ではないようです。

前の表から選択した1人のユーザーの写真も取得できます

SELECT object_id FROM photo_tag WHERE subject IN
    (SELECT uid2 FROM friend WHERE uid1=me() LIMIT 1)

->も機能します

しかし、テーブルのインデックス作成は失敗します

SELECT object_id FROM photo_tag WHERE subject IN
    (SELECT uid2 FROM friend WHERE uid1=me() LIMIT 1 OFFSET 3)

-> []

他の誰かが以前にこのような行動を見たことがあるかどうか疑問に思いました。バグレポートを提出しました。何か聞こえたら報告します。

4

1 に答える 1

2

Facebookが公然と教えてくれないのは、他のFacebookユーザーが使用するアプリで利用できるようにするデータの種類をユーザーが決定できるということです(「他のユーザーが使用するアプリ」セクションを確認してください)。したがって、あなたの例のユーザー1102054が、他の人が使用するアプリによる自分の写真へのアクセスを禁止することにした場合、次のようなクエリ

SELECT object_id FROM photo_tag WHERE subject=1102054

失敗します。

ただし、例のユーザー1102054と、アプリが写真にアクセスすることを許可する他の誰かが特定の画像でタグ付けされている場合でも、次のようにしてクエリを介してその画像にアクセスできます。

SELECT pid FROM photo_tag WHERE subject=1102054
             AND pid in (SELECT pid FROM photo_tag WHERE subject=<other user id here>)

ただし、注意してください。上記の2つのユーザーIDをそのまま切り替えると、空のデータセットが返されます。

SELECT pid FROM photo_tag WHERE subject=<other user id here>
             AND pid in (SELECT pid FROM photo_tag WHERE subject=1102054)
于 2013-01-11T08:47:16.680 に答える