Мой сценарий довольно медленный, когда вы приглашаете пользователей на событие, потому что он должен проверить, приглашен ли пользователь на событие, иначе он даст ошибку facebook ouath.
Могу ли я сделать это быстрее?
foreach ( $_POST['friends'] as $ids ) { if ( $i < 199 ) { $iZ = $facebook->api("/".$event_id."/invited/".$ids, "GET"); if ( $iZ['data'][0]['rsvp_status']): $status = $iZ['data'][0]['rsvp_status']; else: $status=""; endif; if ( ($status != 'declined' && $status != 'attending' && $status != "unsure" && $status != "not_replied") || empty($status)) { $id.=$ids . ","; $i=$i+1; } } } $id = substr_replace($id ,"",-1); echo $facebook->api("/".$event_id . "/invited",'POST', array("users" => $id));
Как говорит Cbroe, используйте FQL, вот код:
SELECT uid,name FROM user WHERE uid IN (SELECT uid1 FROM friend WHERE uid2=me()) AND NOT (uid IN (SELECT uid FROM event_member where eid = 306212359507086))
Это даст вам список друзей, не приглашенных на это мероприятие.
Не забудьте изменить идентификатор события
Попробуйте на Graph Explorer
ура
Два возможных подхода:
использовать пакетные запросы для размещения приглашения для каждого идентификатора пользователя индивидуально (индивидуально, но все же с одним запросом) – если одно приглашение не работает, это не имеет значения, все еще будут сделаны следующие сообщения о приглашениях.
«Cross-sect» ваш список идентификаторов ваших друзей с таблицей event_members
FQL event_members
вначале – получите список всех членов событий, которые соответствуют вашим идентификаторам друзей (используя WHERE eid='event_id' AND uid IN(…,…)
), а затем «вычесть «Результат (люди, которые уже были приглашены на мероприятие) из вашего исходного списка id друга. (В PHP вы можете использовать для этого array_diff
.)