Ваш вопрос немного сложен для понимания; но насколько я понимаю, у вас возникла проблема с поиском дней рождения ваших друзей на конкретную дату.
Я бы предложил рассмотреть эту проблему по-другому. Похоже, вы делаете один FQL-запрос для каждой даты в календаре. Я думаю, что было бы лучше загрузить всех друзей пользователей, просмотреть каждого из них и экстраполировать дату. Согласно документации Facebook , формат даты дня рождения зависит от локали пользователя, поэтому вы не сможете надежно запрашивать это поле.
Альтернатива: ( отредактировано , чтобы быть более полным. Почти полностью копировать и вставлять сейчас. )
<?php
$facebook = new Facebook(array(
'appId' => FB_APP_ID, //put your FB APP ID here
'secret' => FB_APP_SECRET, //put your FB APP SECRET KEY here
'cookie' => true
));
$session = $facebook->getSession();
if ($session)
{
//check to see if we have friends_birthday permission
$perms = $facebook->api('/me/permissions');
}
//we do this to see if the user is logged & installed
if (empty($session) || empty($perms['friends_birthday']))
{
//get url to oauth endpoint for install/login
$loginUrl = $facebook->getLoginUrl(array(
//put the URL to this page, relative to the FB canvas
//(apps.facebook.com) here vvv
'next' => 'http://apps.facebook.com/path_to_your_app/index.php',
'req_perms' => 'friends_birthday'
));
//use javascript to redirect. the oauth endpoint cant be loaded in an
//iframe, so we have to bust out of the iframe and load it in the browser
//and tell the oauth endpoint to come back to the fb canvas location
echo "<script>window.top.location='{$loginUrl}';</script>";
exit;
}
$user = $session['uid']; //load the user id from the session array
$cur_month_birthdays = array();
$cur_month = 4; //april
try {
$fql1 = "SELECT uid, pic_big, pic,pic_small, name, birthday FROM user "
. "WHERE uid IN ( "
. "SELECT uid2 FROM friend WHERE uid1 = {$user} "
. ")";
$friends = $facebook->api(array(
'method' => 'fql.query',
'query' => $fql1
));
//make sure i have some friends...
if (!empty($friends))
{
foreach ($friends as $friend)
{
//if this friend doesn't have their bday specified, skip them.
if (empty($friend['birthday']))
{
continue;
}
//get unix time for the users' birthday
$birthday_ts = strtotime($friend['birthday']);
//if this friends birthday is this month...
if (date('m', $birthday_ts) == $cur_month)
{
//generate a month-day string for the birthdate
$birthday_str = date('m-d', $birthday_ts);
//initialize the array of friends with birthdays on this date
if (empty($cur_month_birthdays[ $birthday_str ]))
{
$cur_month_birthdays[ $birthday_str ] = array();
}
$cur_month_birthdays[ $birthday_str ] []= $friend;
}
}
}
}
catch (Exception $e)
{
//error with facebook
error_log($e);
}
//output list of days in this month with friends that have birthdays
print_r($cur_month_birthdays);
Приведенный выше код извлекает всех друзей ваших пользователей, просматривает каждого из них и находит тех, у кого день рождения в текущем месяце (определенном как $cur_month
). Затем вы можете просмотреть и построить свой календарь, и каждый день вы проверяете массив $cur_month_birthdays
, чтобы увидеть, есть ли у друзей день рождения в текущий день, и отображаете их соответствующим образом.
Надеюсь, это поможет!
** edit **
Это мой вывод для приведенного выше сценария. Я отредактировал его, чтобы сделать его более тщательным (включая инициализацию FB PHP SDK и выборку пользовательской сессии. Я предполагал, что у вас есть минимум этого кода на месте. Теперь, когда вы можно увидеть структуру массива - вы сможете легко понять, как интегрировать в свой календарь.
Array
(
[04-04] => Array
(
[0] => Array
(
[uid] => 123123
[pic_big] => url-to-pic
[pic] => url-to-pic
[pic_small] => url-to-pic
[name] => Thomas W
[birthday] => April 4, 1985
)
)
[04-19] => Array
(
[0] => Array
(
[uid] => 123123
[pic_big] => url-to-pic
[pic] => url-to-pic
[pic_small] => url-to-pic
[name] => Joel S
[birthday] => April 19
)
)
[04-29] => Array
(
[0] => Array
(
[uid] => 123123
[pic_big] => url-to-pic
[pic] => url-to-pic
[pic_small] => url-to-pic
[name] => Ashley F
[birthday] => April 29, 1983
)
[1] => Array
(
[uid] => 123123
[pic_big] => url-to-pic
[pic] => url-to-pic
[pic_small] => url-to-pic
[name] => Megan S
[birthday] => April 29, 1989
)
)
)