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

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

28 октября 2010, 00:02 (2640 дней назад, №8804)Facebook - виджет комментариев
Решил добавить в свой проект http://bcam.spb.ru возможность комментирования альбомов (страниц сайта). Наиболее удобным и гибким решением посчитал использование фейсбуковского виджета комментариев.

Добавляется всё довольно просто, но есть несколько неочевидных моментов, о которых я бы хотел рассказать.


Идентификатор объекта - что комментируем?

Когда вы добавляете виджет на страницу, то наверняка захотите, чтобы комментарии ассоциировались именно с этой страницей. Для этого там есть такая штука, называемая (в разных местах их документации :) как xid, unique id и еще кое-где ids.
Это строка (т.е. необязательно число) , которая может быть, к примеру, URL'ем вашей страницы. Но есть два момента: 1) обязательно сделайте ей urlencode 2) помните, что url нужно будет привести к единому виду. К примеру, http://bcam.spb.ru/uzbekistan/, http://bcam.spb.ru/uzbekistan/index.html, uzbekistan/index.html , uzbekistan/ и т.п. должны всегда преобразовываться в один и тот же xid="uzbekistan".

Настройка стилей

В документации у Facebook'a об этом нет ни слова (я уже даже не удивляюсь). Но хоть цвета как-то ведь надо привести в соответствие с сайтом! Так что, берём FireBug (меню CSS) или что-нибудь подобное, загружаем любую страницу с виджетом, и смотрим, какие классы за какие элементы виджета отвечают. Смысла их документировать особого нет, т.к. они у них имеют свойство меняться (например, пока я разбирался, они поменяли gray_box на uiBoxGray :)
Можете посмотреть мой CSS, хотя там много лишнего.

Так или иначе, создаём свой .css файлик, и указываем путь к нему в <fb:comments css="yourcss.css" ..>
И да, не забудьте, что css закэшируется, так что по факту вам придётся сделать что-то типа
...  css="yourcss.css?' . rand(0,9999) ...

Помимо цветов, через css можно также избавиться от кнопки Like , которая к комментариям принудительно прилагается: div.like {display:none;}

Странности

Чтобы вы не тратили время на удивление, сразу скажу:

1) Галочка "Publish Feed" ("Добавить комментарий к моему профилю на Facebook") установлена всегда - атрибут publish_feed="0" ни на что не влияет. Снять её можно только в браузере.

2) notify="true" не работает - т.е. никакие уведомления о комментариях никому присылаться не будут.

И то и другое на форумах обсуждают месяцами, так что расслабьтесь - может когда-нибудь починят (если fbml раньше не упразднят ;)

Итак, что у нас получилось?

Что-то типа следующего:

<script src="http://connect.facebook.net/ru_RU/all.js#appId=_id_приложения_&amp;xfbml=1"></script><fb:comments xid="_id_страницы_'" css="yourcss.css?' . rand(0,9999) . '" simple="0" notify="true" publish_feed="0" width="700"></fb:comments></div>

_id_приложения_ - это appid некоего приложения-заглушки, с которым будут ассоциироваться  все комментарии на вашем сайте (и не только - мало ли чего вы еще захотите).
Надо его создать, ввести URL сайта в Web Site / Site URL и посмотреть App ID созданного приложения. См. еще тут

Все опции для fb:comments можно найти здесь http://developers.facebook.com/docs/reference/fbml/comments

Если нужно поменять язык, вместо "ru_RU" пишите, например, "en_US".

Просмотр комментариев

Если у вас 2-3 странички, можно просто на них зайти и посмотреть, чего вам там накомментировали. Но если их сотни, такой вариант, конечно, не годится.

Facebook не предоставляет никакого интерфейса для просмотра всех комментариев.
Но зато у них очень обширный API, и при желании можно вытащить любую информацию, причём даже несколькими способами.
Будем использовать FQL. (на SQL он только похож - нельзя указывать в SELECT большей одной таблицы, и еще много чего нельзя):

require 'inc/facebookclass.php';// новый класс работает только с PHP5!

$facebook = new Facebook(array(
    'appId'  => '_appid_вашего_приложения_',
    'secret' => _secret_вашего_приложения_,
    'cookie' => true,
));

$since = 1;
$app_id = $facebook -> getAppId();

// Внутрь запроса нельзя вставлять переводы строк и другие спецсимволы! Иначе будете долго гадать, что же это за загадочное сообщение об ошибке

$result = $facebook->api(array(
    'method' => 'fql.multiquery',
    'queries' => '{"comments":"SELECT fromid, text, time, id, xid FROM comment WHERE xid IN (SELECT xid FROM comments_info WHERE app_id = ' . $app_id . ' AND updated_time > ' . $since . ') ORDER BY time desc",
    "users":"SELECT id, name, pic_square, url FROM profile WHERE id IN (SELECT fromid  FROM #comments)"}'
));

foreach ($result[0]["fql_result_set"] as $key => $value)
{
    $user =    getUserById($result[1]["fql_result_set"], $value["fromid"]);
    echo($key . ' [' . date("d/m/Y H:i:s",$value["time"]) . ']: <a href="http://bcam.spb.ru/' . $value["xid"] . '">' . 'http://bcam.spb.ru/' . $value["xid"] . '</a> ' . $value["text"] . ' ' . '<a href="' . $user["url"] . '">' . $user["name"] . '</a>' . '<br>');
}//foreach

// Сам знаю, что так не делают :)

function getUserById($raw_user,$id)
{
    foreach ( $raw_user as $k => $v)
        if ($v["id"] == $id) return $v;
}//getUserById


Необязательно использовать FQL. Просто это гибкий способ.
Можно использовать comments.get

Альтернативы?

С практической точки зрения одна - аналогичный виджет ВКонтакта
Он даже кое в чём лучше - можно администрировать все комментарии в одном месте, можно отвечать на комментарии (т.е. ветки образуются).
Основной недостаток - нет такого мощного API, как в Facebook - с доступом ко всем объектам.

Ну и можно, конечно, одновременно оба виджета использовать.

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

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

6743 дня назад, 02:124 августа 1999 Я догадывался (хотя и не знал) что для ZX Spectrum должны были написать что-то подобное Win95.. И вот - оказывается написали. Называется операционная система (или файловая оболочка, как называет ее автор) Doors. Графический интерфейс напоминает помесь Win95 с WorkBench'em. Многозадачности нет, воды нет, полезных ископаемых нет. Населена р.. черт, ...далее

Избранное

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

1764 дня назад, 00:5922 марта 2013 Прочёл тут книжку - iWoz ( ссылка ) , 2006 года. Это автобиография Стива Возняка. Похоже, что на русский её не переводили (в отличие от книг про Стива Джобса). В этой парочке, как известно, Возняк был инженером (собственно, и спроектировавшим Apple I и II), а Джобс - скорее предпринимателем. В книге есть довольно интересные ...далее

868 дней назад, 23:404 сентября 2015 Небольшое видео про CC'2015 ( версия без фоновой музыки здесь: ссылка )

1236 дней назад, 03:121 сентября 2014 Мой семинар на Chaos Constructions'2014 (слайды можно в виде PDF скачать здесь: ссылка ) и несколько интервью с разными людьми: Вячеслав Славинский (svo) о Vectrex: ссылка Вячеслав Славинский (svo) о 3D Imager для Vectrex: ссылка Вячеслав Славинский (svo) о световом пере для Vectrex: ссылка ...далее