Получение всех моих мероприятий через Facebook iOS SDK

В моем приложении iOS я получаю токен доступа, используя следующий код:

    [self.facebook authorize:[NSArray arrayWithObjects:@"user_events",
@"friends_events",  nil]];

Затем я запрашиваю свои события со следующим кодом:

[self.facebook requestWithGraphPath:@"me/events" andDelegate:friendsVC];

Но в ответ я получаю только события, к которым я имею RSVP'd. Я хотел бы получить все мои события, в том числе те, к которым у меня нет RSVP'd.

Любые идеи?

Ответы

Ответ 1

Вы можете получить список событий независимо от их статуса RSVP со следующим запросом FQL:

SELECT eid, name, venue, location, start_time FROM event WHERE eid IN (
  SELECT eid from event_member WHERE uid = me()
)

Это не возвращает статус RSVP для каждого события, а только детали событий. Вы можете использовать Batch Requests, чтобы получить как сведения о событиях, так и rsvp_status с тем же запросом.

https://graph.facebook.com/?method=post&batch=[
  {
    "name":"rsvp",
    "relative_url":"fql?q=SELECT+eid,rsvp_status+FROM+event_member+WHERE+uid=me()",
    "omit_response_on_success":false
  },
  {
    "relative_url":"?ids={result=rsvp:$.data.*.eid}"
  }
]

Смотрите event и event_member таблица документацию для получения подробной информации о других полях, которые вы, возможно, захотите получить.

Примечания:

Начиная с 5 июля для доступа к публичным событиям потребуется токен доступа.

Ответ 2

Запрос

/я/события

дает вам только те события, которые пользователь (возможно) планирует посетить. Ответ не включает события, к которым пользователь был приглашен (но не ответил), или отклонен.

Другие запросы могут быть полезны:

Вы можете проверить, был ли пользователь приглашен на такое событие:

/EVENT_ID/приглашен/USER_ID

Состояние RSVP может быть проверено событием:

/EVENT_ID/посещения

/EVENT_ID/возможно

/EVENT_ID/отклонено

/EVENT_ID/приглашен

где каждый запрос возвращает список пользователей с запрошенным статусом RSVP.

Ответ 3

Я думаю, вы можете получить события по запросу fql. Вам нужно попробовать это.

Также см. этот How-To: используйте API-интерфейс Graph для управления событиями.

Вам понадобится HTTP. Получите следующее из Graph API:

fql?q=SELECT uid,eid,rsvp_status FROM event_member WHERE uid = me()

Вы можете вернуть все статусы из этого вызова.

{
  "data": [
    {
      "uid": "723020003",
      "eid": "19935786340002",
      "rsvp_status": "not_replied"
    },
    {
      "uid": "723020003",
      "eid": "234524000290351",
      "rsvp_status": "attending"
    },
    {
      "uid": "723020003",
      "eid": "210091000081240",
      "rsvp_status": "declined"
    },
    {
      "uid": "723020003",
      "eid": "210091000341240",
      "rsvp_status": "unsure"
    }
  ]
}

Ответ 4

Это не полное решение, и это может не сработать, но посмотрите, можно ли получить доступ к фиду iCal для пользовательских событий Facebook. Я подписываюсь на мой канал iCal, и я заметил, что все события, даже новые, которые у меня еще есть для RSVP, включены в фид.

Что-то попробовать в любом случае!

Ответ 5

Используйте /me/events для получения событий, на которые пользователь ответил, и /me/events/not_replied для остальных.

Например (если вы создали сеанс):

[FBRequestConnection startWithGraphPath:@"/me/events/not_replied" completionHandler:^(FBRequestConnection *connection, id result, NSError *error)
{
    FBGraphObject* data = (FBGraphObject*)result;
    NSMutableArray* array = [data objectForKey:@"data"];

    //parse data etc..
}];

Подробнее см. https://developers.facebook.com/docs/graph-api/reference/v2.0/user/events/.