Как стать автором
Обновить

Интеграция web приложений с соц сетями или «проставляем лайки»

Время на прочтение3 мин
Количество просмотров16K
Что требовалось: добавить кнопки facebook'а и twitter'а на большинство
разделов приложения.
Что было: одностраничное приложение без статичных адресов.

Итак, нам нужно будет сделать 3 действия:
  • добавить поддержку «хэшбэнг» адресов;
  • сделать статичные страницы для facebook'овского «робота»;
  • собственно, расставить кнопки.



#! адреса


Нам нужно привязать адрес страницы и желательно заголовок к разделам приложения.
Я для этого использую jquery.address и свои
костыли с регулярными выражениями. Тут всё просто и сильно зависит от
приложения, поэтому детально рассказывать смысла нет.

Статичные страницы


Так как все кнопки социальных сетей не любят адреса с «хешем», нам
придётся сделать специальные страницы без «#!». При заходе робот
facebook'а будет забирать с них информацию, а человек — перенаправляться на страницу с «#!».

Для этого нам понадобится шаблон вида:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
"http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:og="http://ogp.me/ns#"
      xmlns:fb="http://www.facebook.com/2008/fbml">
<head>
    <title></title>
    <meta property="og:title" content="" />
    <meta property="og:description" content="" />
    <meta property="og:image" content="" />
    <meta property="og:type" content="" />
    <meta property="og:site_name" content="" />
    <meta property="fb:app_id" content="" />
    <meta property="fb:admins" content="" />
    <link rel="image_src" href="" />
</head>
<body onload="document.location = 'http://' +
document.location.host + '/#!' + document.location.pathname">
    <img src='' />
</body>
</html>

Все поля обязательны к заполнению.
В fb:app_id — id приложения в facebook.
В fb:admins — id пользователей/админов приложения через запятую.
В og:image, image_src и img записываем абсолютный адрес изображения,
включая домен.
После нескольких тестов стало понятно, что изображение для
предпросмотра должно быть продублировано. Иначе возможна ситуация,
когда запостится без превьюшки.
Содержимое остальных полей понятно из их названий.

Расставляем кнопки


В этой части вылезут первые проблемы: на страницу нельзя добавлять
несколько кнопок facebook'а. Но это очень легко решается на js:

function addLike(holder, url) {
    try {
        $(holder).html('<fb:like href="'+ url + '" ></fb:like>');
        FB.XFBML.parse();
    } catch(err) {}
}

В try/catch обёрнуто, так как ie начинает ругаться на кроссдоменные
запросы. С try/catch — игнорирует.
Код кнопки можно поставить любой, главное — дёрнуть потом FB.XFBML.parse().

Twitter недалеко ушёл от facebook'а. В нём динамическое добавление
кнопок не работает. Это тоже легко решается:

function addTwitter(holder, url, title) {
    try {
        $(holder).html('<a href="https://twitter.com/share"
class="twitter-share-button" data-url="' + url + '" data-text="' +
title + '">Tweet</a>');
        $.getScript("http://platform.twitter.com/widgets.js");
    } catch(err) {}
}

try/catch используется по аналогичной с facebook'ком причине.

Теперь осталось натравить на эти функции адрес без «#!» и всё заработает.
Теги:
Хабы:
Всего голосов 14: ↑8 и ↓6+2
Комментарии2

Публикации

Истории

Работа

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань