Проверка статуса event-rsvp и отображение отключенной/включенной кнопки RSVP

Я все еще немного не уверен, как найти это в документации, но я хотел бы проверить, есть ли у вошедшего в систему пользователя RSVP на fb-событие или нет, и показать «Я посещаю» кнопка в зависимости от этого... Я уже подключил кнопку входа в систему и соответствующие разрешения (user_events и rsvp_event), просто не знаю, как это сделать с помощью JS SDK.


person Steven    schedule 05.09.2011    source источник


Ответы (3)


Вы можете запросить таблицу event_member FQL, например:

FB.api(
    {
        method: 'fql.query',
        query: 'select rsvp_status from event_member where eid = "EVENT_ID" and uid=me()'
    }, function(response) {
        alert(response[0].rsvp_status);
    }
);

Вернет (предупредит) что-то вроде: declined

person ifaour    schedule 05.09.2011
comment
Это не сработало, я получаю сообщение об ошибке Uncaught TypeError: Cannot read property 'rsvp_status' of undefined. Вставлен ваш точный код, за исключением того, что я заменил EVENT_ID фактическим идентификатором события... - person Steven; 06.09.2011
comment
Примечание: этот код устарел и не будет работать с Graph API версии 2.0 или выше — вместо этого он выдаст следующее сообщение об ошибке: REST API is deprecated for versions v2.1 and higher - person Ozzy; 12.08.2014

Для этого можно использовать Graph API. Есть два сценария, которые могут представлять интерес: (1) для события вы хотите перечислить, посещает ли пользователь, и (2) для пользователя вы хотите перечислить событие, которое он посещает. Вам необходимо разрешение user_events для обоих сценариев.

Для (1): HTTP GET /EVENT_ID/посещение. Это вернет массив объектов с {id, name, rsvp_status} полями. Найдите интересующий вас идентификатор пользователя, и, если он ответил на приглашение, в поле rsvp_status будет указано, присутствует ли он.

Для (2): HTTP GET/USER_ID/события. Это вернет все события для пользователя с несколькими полями, а также с {id, name, rsvp_status} полями, как указано выше. На этот раз найдите интересующий вас идентификатор события, а затем поле rsvp_status сообщит вам, посещает ли текущий пользователь, не посещает, возможно, посещает или не ответил на приглашение (т. е. rsvp_status равно unsure).

person Dhiren Patel    schedule 06.09.2011
comment
Действительно ли в этом случае рекомендуется использовать Graph API вместо FQL? Это означает, что извлечение ВСЕХ данных с помощью Graph API более эффективно, чем извлечение одной записи с помощью FQL!! - person ifaour; 06.09.2011
comment
Истинный. Все зависит от того, чего вы пытаетесь достичь. Вы можете быть более конкретными с FQL, но Graph API прост и согласован, если вы имеете дело с несколькими событиями или несколькими пользователями. - person Dhiren Patel; 06.09.2011
comment
Имеет смысл, но для этого конкретного случая я думаю FQL лучше (и более эффективен), пока Facebook не введет некую конечную точку в Graph, например: /EVENT_ID/attending/USER_ID или даже лучше /USER_ID/events/EVENT_ID я прав? :-) - person ifaour; 06.09.2011
comment
Я не могу говорить определенно, так как не знаю всего объема того, что вы пытаетесь сделать, но ваш подход кажется мне разумным. - person Dhiren Patel; 08.09.2011

На самом деле, есть более простой способ сделать все это. Проблема с запросом FQL заключается в том, что после отправки RSVP для отображения статуса возникает задержка примерно 15-30 секунд. Но это работает в графическом API без разбиения на страницы. Попробуйте запрос GET в такой форме:

/[идентификатор события]/invited?user=[user_id]&access_token=[access_token]

Он вернет структуру данных с rsvp_status, если пользователь вообще ответил на приглашение, в том числе для публичных мероприятий, на которые этот пользователь технически не был «приглашен». Если структура данных пуста, значит, они вообще не ответили на приглашение.

person David Uzumeri    schedule 26.10.2012