RSS Reader · 4 min read · Sep 13, 2025

Как настроить приложение для чтения RSS-лент Facebook для вашего блога - Страница 5

7 Автоматическое обновление RSS-ленты на профиле

Вы могли заметить, что RSS-лента на профиле обновляется только тогда, когда вы посещаете страницу приложения в Facebook. Это проблема, потому что люди проводят большую часть времени на странице профиля. Чтобы автоматически обновлять RSS-ленту на странице профиля, мы должны создать задание cron на нашем сервере, которое автоматически обновляет RSS-ленту на профилях Facebook.

Существует два способа обновления профилей: прямой и косвенный (см. http://wiki.developers.facebook.com/index.php/Changing_profile_content). Если ваш контент индивидуален для каждого пользователя, вы должны использовать прямой метод, но если он одинаков для всех пользователей, гораздо проще использовать косвенный способ. Поскольку наша RSS-лента одинакова для всех пользователей, мы используем косвенный способ, для которого нам нужен бесконечный ключ сессии для нашего приложения, чтобы задание cron могло входить в Facebook в любое время.

Чтобы узнать наш бесконечный ключ сессии, мы создаем скрипт get_infinite_key.php, как показано на http://wiki.developers.facebook.com/index.php/Infinite_session_howto:

vi /var/www/fb/htf_feed_reader/get_infinite_key.php

| require_frame(); $user = $facebook->require_login(); // Echo the "infinite session key" that everyone keeps talking about. echo $facebook->api_client->session_key; ?> |

Теперь выйдите из Facebook в вашем браузере и очистите все куки, или, что еще лучше, используйте другой браузер, в котором вы никогда не посещали Facebook (мой браузер по умолчанию - Firefox, поэтому я использую SeaMonkey для этого), и вызовите этот скрипт в вашем браузере (например, http://fb.howtoforge.com/fb/htf_feed_reader/get_infinite_key.php).

Вам будет предложено войти в Facebook. Пожалуйста, убедитесь, что вы отметили флажок “Сохранить мою информацию для входа, чтобы избежать повторного входа в Facebook для использования этого приложения”:

После этого должна появиться страница с вашим бесконечным ключом сессии приложения. Пожалуйста, запишите его где-нибудь:

Удалите get_infinite_key.php после этого:

rm -f /var/www/fb/htf_feed_reader/get_infinite_key.php

В скрипте задания cron, который я буду использовать здесь, я буду использовать функцию $facebook->api_client->fbml_refreshRefUrl(), чтобы вызвать URL, который предоставляет HTML/FBML для размещения на страницах профиля. Этот URL должен предоставлять только HTML/FBML код; наш скрипт index.php предоставляет HTML/FBML код (для страницы холста приложения в Facebook, используя строку echo $fbml;), но он также изменяет профили пользователей с помощью функции $facebook->api_client->profile_setFBML(), для которой нам понадобятся идентификаторы пользователей каждого пользователя, который установил наше приложение, если бы мы использовали его в нашем скрипте задания cron. У нас нет этих идентификаторов пользователей, потому что мы не отслеживаем их с помощью нашего приложения, и, как я уже говорил, мы хотим использовать косвенный метод для обновления профилей.

Поэтому я помещу код для парсинга RSS и отображения HTML/FBML в отдельный скрипт, rss.php, который я буду вызывать как в index.php, так и в нашем скрипте задания cron, cronjob.php. Кроме того, я создам файл конфигурации (conf.php) для нашего приложения, который содержит все настройки переменных и который включен во все другие скрипты.

Итак, давайте начнем:

vi /var/www/fb/htf_feed_reader/conf.php

| |

$feed - это URL нашей RSS-ленты, а $rss_url - это URL нашего (еще не созданного) файла rss.php. Пожалуйста, не путайте эти два.

Теперь, когда мы используем conf.php, наш новый appinclude.php выглядит так:

vi /var/www/fb/htf_feed_reader/appinclude.php

| require_login(); //catch the exception that gets thrown if the cookie has an invalid session_key in it try { if (!$facebook->api_client->users_isAppAdded()) { $facebook->redirect($facebook->get_add_url()); } } catch (Exception $ex) { //this will clear cookies for your application and redirect them to a login prompt $facebook->set_user(null, null); $facebook->redirect($appcallbackurl); } ?> |

index.php выглядит так:

vi /var/www/fb/htf_feed_reader/index.php

| api_client->profile_setFBML('', $user); $facebook->api_client->fbml_refreshRefUrl($rss_url); ?> |

rss.php выглядит так (я отключил кэш RSS для MagpieRSS здесь, но вы можете включить его, если хотите):

vi /var/www/fb/htf_feed_reader/rss.php

| Читатель RSS-лент HowtoForge

'; $fbml .= '
'.$rss->channel['title'].'
'; foreach ($rss->items as $item) { $fbml .= '

'; if($item['description']) $fbml .= $item['description']; $fbml .= '
'; } $fbml .= '
'; echo $fbml; ?> |

И наконец, cronjob.php выглядит так:

vi /var/www/fb/htf_feed_reader/cronjob.php

| api_client->session_key = $infinite_session_key; // Now you can update FBML pages, update your fb:ref tags, etc. $facebook->api_client->fbml_refreshRefUrl($rss_url); ?> |

Теперь вы можете напрямую вызвать cronjob.php в вашем браузере (например, http://fb.howtoforge.com/fb/htf_feed_reader/cronjob.php), чтобы проверить, обновляется ли ваша RSS-лента на вашем профиле Facebook (конечно, ваша RSS-лента должна отличаться от предыдущей…).

Если все работает как ожидалось, вы можете создать задание cron, которое вызывает cronjob.php каждые 30 минут (или так часто, как вам нравится):

crontab -e

| 0,30 * * * * /usr/bin/wget -O /dev/null http://fb.howtoforge.com/fb/htf_feed_reader/cronjob.php &> /dev/null |

С этого момента профили пользователей Facebook, установивших ваше приложение для чтения RSS, будут обновляться автоматически.

Share: X/Twitter LinkedIn

Get new posts in your inbox

No spam. Unsubscribe anytime.