Обратите внимание, что новости можно получать по RSS.
X
-

Информационные технологии, LiveJournal cr_it - архив

20 июня 2012, 03:30 (4568 дней назад, №8822)Как вытащить из Facebook'a собственный timeline
Давно хотел разобраться с экспортом новостной ленты (timeline) из Facebook'a на собственный сайт. Во-первых, у них очень неплохо сделано автоматическое анонсирование публикуемых ссылок - картинка создаётся, кусок текста качественно (по сравнению с G+ или VK) выбирается. Во-вторых, всё что есть в таймлайне (и на личной странице и на других) доступно через API.

Схема действий следующая:

Логинимся в Facebook собой, создаём на новое приложение. Никаких сложностей нет, главное чтобы оно создалось и вы смогли записать его appId и App Secret.

Данные из фейсбука получаем через Graph API - там можно получить много чего, нас интересует конкретно таймлайн, так что запрос будет выглядеть как "/yourname/feed", где yourname  - ваше имя или название страницы (например, "vasyapupkin" или "chaosconstructions").

Всё было бы совсем элементарно, если бы не авторизация. Документация фейсбука известна своей понятностью, полнотой и частыми обновлениями, так что я лучше опишу всё своими словами :)

Авторизация потребуется в любом случае, кроме самых простейших, вида: https://graph.facebook.com/vasyapupkin (получаете только общие сведения о пользователе).

Чтобы получить feed, необходим access token. Они бывают разные. Токены приложений (состоят из комбинации appid и secret) вам не помогут. Нужен токен пользователя, которые бывают как минимум двух типов - короткоживущие и долгоживущие. Первые живут 2 часа, так что это не вариант (теоретически можно продлевать, но если пропустите - всё :). Вторые живут 60 дней - они-то нам и нужны.

Сразу скажу - нет способа получить "вечный токен". Раньше был (т.н. offline access), но недавно они решили, что это слишком жирно для разработчиков - пусть народ посуетится. Разработчики забегали, как тараканы на сковородке, т.к. пропала возможность для серверных частей стабильно получать по крону данные из фейсбука. В итоге, после изучения вопроса наиболее вменяемый вариант - получить 60 дневный токен и периодически его продлевать. Получаем его вводя в браузере url:

https://graph.facebook.com/oauth/authorize?type=user_agent&client_id=AppId&redirect_uri=http://www.yoursite.ru&scope=export_stream

(scope - это права, которые вам нужны. export_stream как раз для таймлайна, www.yoursite.ru - ваш сайт)

В ответ вам вылезет попап, где вы должны согласиться с предоставлением доступа к приложению.

После подтверждения попап закроется и произойдет редирект на:

http://www.yoursite.ru/#access_token=1A2DTFRmUFbUBAICTKOYdZCHbzpUKAZAtOJZA2QAXekjBAlSDMr7OaGuPAFxEnJBY2KDtRzQlyEATnBoZAbhjt9BOwjA24q2NptLkGVwGJgZDZD&expires_in=5142784&code=AQBcqzyrrYjDkMWJC83Igeg8owO4LHwscbtF8GSFGMq63XC0thKam0cyjsH20ea_dZC45IpH1xdG2179CpXBGfDBbTlX8Xm0smEfUCU15tkV5fx5_UkFSfR4T2sJZ2kTy-oACdTmjZxe97OHtVza5aAEk61rECdpSSgr1x5NJdxCVXX99bO71xnq68S5WhCZD13

Это и будет ваш токен. Его вы прописываете в код, который будет запускаться для выборки данных из фейсбука:

...

require 'facebook.php'; // лежит здесь: https://github.com/facebook/facebook-php-sdk

$facebook = new Facebook(array(
  'appId'  => '123457576954321',
  'secret' => 'abcdef0d45da5a52f08abfd90fedccba',
));

$access_token = '1A2DTFRmUFbUBAICTKOYdZCHbzpUKAZ5tOJZA2QAXekjBAlSDMr7OaGuPAFxEnJBY2KDtRzQlyEATnBoZAbhjt9BOwjA24q2NptLkGVwGJgZD13';

$facebook->setAccessToken($access_token);

$data = $facebook->api('/vasyapupkin/feed');  // yourname - ваше имя или название страницы (из url)

echo('<pre>');
print_r($data);  // возвращается json с данными ленты, формат довольно очевидный
echo('</pre>');
...

Что делать через 60 дней? Это хороший вопрос.

На stackoverflow топиков на эту тему бесконечность - пример.

Насколько я понял, продлить автоматически его никак нельзя. Только вручную, как описано выше. Если узнаете другой способ, поделитесь.

Экспериментировать можно также в Facebook API Explorer (учтите, что кнопка Get Access Token даёт двухчасовой токен)

UPDATE:

Где-то ближе к концу 2012 года Facebook в очередной раз изменил правила игры (в документации это не отражено - и правда, зачем? :)

Смысл в том, что теперь там, где выше я пишу "это и будет ваш токен" - он теперь внезапно не 60 дневный, а обычный 2 часовой. На Stackoverflow народ придумывает всякие версии как с этим жить (легко гуглится по недокументированной setExtendedAccessToken), сходу можно предложить простой ручной вариант. Берется двухчасовой токен и подсовывается в следующий url:

https://graph.facebook.com/oauth/access_token?client_id=AppId&client_secret=AppSecret&grant_type=fb_exchange_token&%20fb_exchange_token=_2_hours_token_

В ответ получаем строчку с уже долгоживущим токеном вида:

access_token=_60_days_token_&expires=_expire_time_

Радуемся (не очень долго, я прогнозирую :)


Опубликовано: Пётр Соболев

Случайная заметка

9434 дня назад, 00:0023 февраля 1999 (Михаил Лихачев, 23 февраля 1999) Эта история не претендует на абсолютную историческую точность, так как была воспроизведена по памяти относительно событий пятилетней давности. Кроме того, так она выглядела с моей точки зрения и, вероятно, я мог упустить из виду какие-то важные моменты ее развития, ...далее

Избранное

2788 дней назад, 01:575 мая 2017 Часть 1: От четырёх до восьми Я люблю читать воспоминания людей, заставших первые шаги вычислительной техники в их стране. В них всегда есть какая-то романтика, причём какого она рода — сильно зависит от того, с каких компьютеров люди начали. Обычно это определяется обстоятельствами — местом работы, учёбы, а иногда и вовсе — ...далее

2300 дней назад, 20:305 сентября 2018 "Finally, we come to the instruction we've all been waiting for – SEX!" / из статьи про микропроцессор CDP1802 / В начале 1970-х в США были весьма популярны простые электронные игры типа Pong (в СССР их аналоги появились в продаже через 5-10 лет). Как правило, такие игры не имели микропроцессора и памяти в современном понимании этих слов, а строились на жёсткой ...далее