Итак, есть задача - необходимо со своего сайта максимально просто и быстро публиковать разные вещи на страницу сайта в Facebook. В моем случае это сайт цитат Socratify.Net.
Благо у Фейсбука замечательное API и все это сделать можно. Значит какая стоит задача? У сайта есть своя страничка в фейсбуке для социального продвижения и необходимо, находясь на страничке цитаты под админом (пример странички - цитаты Конфуция), одним нажатием кнопки запостить эту цитату на стену в читабельном виде.
Еще одно (и очень важное) условие - постить необходимо от имени страницы, а не от имени пользователя, админа странички. В этом и заключается вся сложность задачи.
Для начала необходимо подключить js-файл фейсбука:
//connect.facebook.net/{lang}/all.js#xfbml=1&appId={app_id}
lang - это локализация вашего сайта (к примеру, en) и app_id - id вашего приложения в facebook, это не id странички в соцсети, а именно приложения, в моем случае через него происходит авторизация на сайте через facebook.
Вся задача делается ajax-ом (без перезагрузки странички). Для публикации от имени странички необходимо получить access_token страницы. Делаем это на стороне сервера, но сначала нам необходимо получить access_token админа страницы фейсбука (тоесть вашего пользователя) и делается это перед отправки ajax-запроса на наш сервер javascript-ом.
Вот js-код (с использованием jQuery):
$("#post_to_facebook_button").click(function(){ var access_token = FB.getAccessToken(); if (!access_token) { FB.login(); access_token = FB.getAccessToken(); } $.ajax({ url: "/post-to-facebook-page-wall/348844", type: "POST", data: {access_token: access_token}, success: function(data){ // success handler } }); });
На стороне сервера мы уже имеем access_token админа страницы фейсбука и теперь сможем с его помощью получить access_token самой страницы (срок его жизни на момент написания статьи равен одному часу, поэтому получаем его при каждой публикации на стену). Я делаю это с помощью замечательной библиотеки requests (Python, сайт написан на Python/Flask):
url = "https://graph.facebook.com/%d" % FACEBOOK_PAGE_ID response = requests.get(url, params=dict( fields="access_token", method="GET", format="json", suppress_http_code=1, access_token=user_access_token, )) access_token = response.json()['access_token']
Имея access_token страницы постим цитату на стену страницы:
url = "https://graph.facebook.com/%d/feed" % FACEBOOK_PAGE_ID data = { 'message': ( u'When nature has work to be done, ' u'she creates a genius to do it.\n\n' u'© Ralph Waldo Emerson' ), 'access_token': access_token, } response = requests.post(url, data=data) if 'id' in response.json(): # posted ok else: print response.json() # error
Тут пример написан на Python, но я думаю его будет легко адаптировать и под PHP, и под Ruby, и под что угодно еще.
No comments:
Post a Comment