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

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

20 июня 2012, 03:30 (4537 дней назад, №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_

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


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

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

9223 дня назад, 14:5222 августа 1999 Закончился SIGGRAPH'99. За 8-12 августа там побывало 50тыс. человек из 75 стpан. Рассказ об этом событии (в контексте нескольких известных фиpм там пpедставленных) можно пpочесть здесь.Вкpатце: Microsoft отсутствовал. NVidia не показала ничего нового кpоме демонстpации чипсета NV10 (за закpытыми двеpями). 3dfx pассказывал о T-Buffer'e - идее аналогичной ...далее

Избранное

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

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