1

現在のユーザーのFacebookの友達が最初にリストされている状態で、アプリケーションからユーザーのリストを返すことができるようにしたいと思います。Graph APIをクエリして、アプリケーションを使用するユーザーの友達を返す方法があるようですが、自分のサイトで特定のアクションを実行したユーザーのリストを表示し、最初にリストされたFBの友達で並べ替えることができるようにしたいと思います。したがって、ユーザーのリストを表示しているときはいつでも、この並べ替えを行うことができます。

私が見たこの最も良い例はmeetup.comにあります。交流会に参加している人のリストを表示するときにこれを行います。次に例を示します。

Meetupが最初にFBの友達とユーザーリストを並べ替える方法の例

誰にとっても違いがあるかどうかはわかりませんが、これはRailsアプリであり、OmniAuthを使用してFacebook経由で認証を行っています。

4

2 に答える 2

2

フレンドステータス欄がないため、フレンドステータスでソートすることはできません。FQL はこれらの操作をサポートしていないため、 friendsテーブルを別のテーブルと結合または結合する複雑な SQL 操作を実行することはできません。あなたができる最善のことは、別のクエリを介して友人が誰であるかを特定することです...

SELECT uid FROM friend WHERE uid IN (...ALL USER IDs...)

そのクエリから返されるすべてのuidは、友達である人だけを含む完全なリストのサブセットになります。

追加情報:

ミートアップアプリは…

  1. 最初にローカル データベースにクエリを実行して、参加者のリストを生成します。(結果を呼び出しましょう [ participants] )
  2. 次に、Facebookの友達データベースに対してクエリを実行し、それらの [ participants] のうちどれが友達かを判断します。(結果を呼び出しましょう [ participating_friends] )

    SELECT uid FROM フレンド WHERE uid IN ([ participants])

  3. また、[ participating_friends] uid のリストをローカル データベースに保存します。1 つの列はユーザ​​ーの ID ( uid ) で、もう 1 つはその友人の UID ( friendid ) です。

  4. 最後に、友達の友達を特定するために、次のようなクエリでローカルの友達データベース (3 から) を照会します。

    SELECT friendid FROM local_friends WHERE uid IN ([ participating_friends])

更新: 振り返ってみると、Meetup は次のようにさらに広いネットをキャストしている可能性があります。

ミートアップアプリは…

  1. 最初にローカル データベースにクエリを実行して、参加者のリストを生成します。(結果を呼び出しましょう [ participants] )
  2. 次に、Facebookの友達データベースに対してクエリを実行し、それらの [ participants] のうちどれが友達かを判断します。(結果を呼び出しましょう [ participating_friends] )

    SELECT uid FROM フレンド WHERE uid IN ([ participants])

  3. アプリユーザーでもあるアプリユーザーのすべての友達を特定し、結果をローカルデータベースに保存し、uidと関連するfriendidを保存します。

    SELECT uid FROM user WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me()) AND is_app_user

  4. 最後に、friends of friendsを決定するために、新しいセットを計算します。

    [ participants_not_friends] = [ participants] - [ participating_friends]。

    次に、次のようなクエリを使用して、ローカルの友人データベース (3 から) にクエリを実行します。

    SELECT friendid FROM local_friends WHERE uid IN ([ participants_not_friends])

于 2012-08-01T22:37:31.330 に答える
0

はい、ユーザーごとに友達のリストを取得できます。これが私がそれを行う方法です。

登録時に、ユーザーが Facebook に登録すると、その ID がデータベースに保存されます。

認証されたユーザーがレコードの 1 つを表示すると、API を介して次の FQL クエリを発行します。

SELECT uid, name, pic_square, mutual_friend_count FROM user 
 WHERE uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
   AND is_app_user 
 ORDER BY mutual_friend_count DESC

これにより、現在のユーザーと友達であるアプリの他のユーザーが返されます。これは、アプリ ユーザーと各友達の間の共通の友達数によって並べ替えられます (親しい友達ほど共通の友達の数が多いと仮定します)。

このクエリの結果をデータベースに保存されている Facebook ID と比較することで、このリストをデータベース内の他のメトリクスと比較できます。

友達の友達を表示することは、よりトリッキーな提案です。このクエリを試す場合:

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

許可エラーがスローされます。Facebook では、友達の友達を取得することはできません。

アプリにとって重要な場合は、アプリ ユーザーがログインするたびに (または拡張アクセス トークンも要求した場合はスケジュールに従って)、アプリ ユーザーの最新のフレンド リストをそれぞれキャッシュし、このテーブルにクエリを実行して、ユーザーのすべての友達に共通する友達がいます。これがどの程度合法であるかを確認するには、TOS を詳しく調べる必要があります。

于 2012-08-17T20:46:06.160 に答える