Получить список друзей, которые выполнили пользовательское действие над пользовательским объектом в open graph 2


Я хотел бы сделать что-то вроде facepile, используя graph api с открытыми действиями graph 2 : из пользовательского объекта и пользовательского объекта, дайте мне друзей (с помощью моего приложения facebook), которые сделали это действие на этом объекте.

Проблема в том, что с помощью FQL я не могу запрашивать пользовательские объекты и действия. Используя graph API, я не могу найти способ пересечь список моих друзей с объектом, который меня интересует.

Лучшее, что я мог сделать, это использовать пакетный режим из графа API:

batch=[
  // First we get the list of friends that are using my facebook application
  { "method": "GET", "relative_url": "fql?q=SELECT+uid+FROM+user+WHERE+uid+IN+(SELECT+uid1+FROM+friend+WHERE+uid2=me())+AND+is_app_user=1+LIMIT+0,49", "name": "friends"},
  // Then query each friend to get the list of objects that went through my namespace:testaction
  { "method": "GET", "relative_url": "{result=friends:$.data.0.uid}/namespace:testaction" },
  { "method": "GET", "relative_url": "{result=friends:$.data.1.uid}/namespace:testaction" },
  ...
  { "method": "GET", "relative_url": "{result=friends:$.data.49.uid}/namespace:testaction" }
]

Это довольно неэффективно и не полностью решает мою проблему, так как:

  • мне все еще приходится фильтровать результаты, чтобы получить только тот, который соответствует объект, который я хочу
  • Если в namespace есть большое количество объектов: testaction, я должен пройти подкачку, делая больше запросов (я стараюсь минимизировать количество запросов)

Видите ли вы лучший способ сделать это ?

3 22

3 ответа:

Теперь это можно сделать с помощью одного запроса API Graph:

GET https://graph.facebook.com/me/friends?limit=50&fields=name,namespace:testaction.limit(100)

Смотритерасширение поля иобновления графического API .

Это, вероятно, не совсем то, что вы ищете, но учитывая тот факт, что facebook (AFAIK) не предоставляет (и, вероятно, никогда не предоставит) возможность сделать это. Я думаю, что вы должны просто хранить информацию самостоятельно, а затем запрашивать данные из своей собственной базы данных. Это будет похоже на то, что вы делаете в своем вопросе, но вы можете оптимизировать его, так как это ваша база данных.

Я уверен, что вы уже думали об этом, но кто-то должен был сказать это.

Если ответ, который дал дерикито, недостаточен, вам следует изучить возможность включения вашего приложения в белый список Facebook (он же стать партнером), чтобы получить доступ к частному API Graph, где эта функциональность может существовать, но недоступна для "обычных" приложений, которые застряли с использованием публичного API Graph.