Как заставить работать Fb.Events.subscribe и не выстрелить себе в ногу

Недавно помогая брату, мне пришлось выяснять способы, с помощью которых можно получать количество отметок в передовых социальных сетях, таких как. Google+, Twitter и Facebook. Сайт, над которым работал брат был рассчитан не на славянскую аудиторию, поэтому Вконтакте выпала из контекста.

Собственно получить сами отметки труда не составило. Все сводилось к запросу адреса и парсингу ответа. Трудности начались, когда мы принялись отлавливать событие лайков, твиттв и +1.


С отлавливанием события нужно было справляться средствами подключаемых с социалок библиотек, потому как событие onclick на iframe не вешается

Из всех требуемых сетей самым простым и логичным оказался твиттер:

(function($) {
	$(document).ready(function()
	{

	    twttr.events.bind('tweet', function(event) {
	        refresh_votes();
	    });
	});
})(jQuery);

Просто событие. Просто callback. Подключаешь — работает.

С google+ оказалось посложнее и менее элегантно. Пришлось прописать атрибут callback и добавить вызываемую функцию в глобальную область видимости.

<g:plusone callback="refresh_votes" size="medium"  href="<?=$href?>"></g:plusone>

С facebook все обстояло на первый взгляд несложно.

(function($) {
	$(document).ready(function()
	{
		FB.Event.subscribe('edge.create',function(response) {
			refresh_votes();
		});

		FB.Event.subscribe('edge.remove',function(response) {
			refresh_votes();
		});
	});
})(jQuery);

Документация понятная, код очевидный. Но не завелся.

Мы обошли код из примера вокруг да около, поэкспериментировали с параметрами. Перечитали несколько тем на stackoverflow, позадалбывали google-поиск.

Всюду говорились одни и те же очевидные вещи. У спрашивающих все работало, у нас нет.

Мы потратили несколько безуспешных часов, тестировали в разных браузерах. Лайк ставится, но событие не срабатывает.
Наконец была найдена и к счастью детально прочитана эта тема на stackoverflow.

Разгадка была близко, но мы подставились из-за лени. Like plugin в изначальной теме был вставлен iframe’ом. Мы попробовали сгенерировать fbml-код, и поленились вставить атрибут data-href. Вставленный таким образом плагин отображался и работал, но не генерировал событий edge.create и edge.remove. С атрибутом все заработало.

Надеюсь пост поможет сэкономить кому-то драгоценное время.

Не попадайтесь.

Полезно(11)Бесполезно(2)

4 Responses to “ Как заставить работать Fb.Events.subscribe и не выстрелить себе в ногу ”

  1. бля, 5 утра, наконец-то - думал я! вот оно - ответ моей проблемы. успех и на русскоязычном ресурсе. но как всегда только наши могут написать, что мы чего-то там поменяли, все заработало, а рабочий пример не показать. заебись, че!

    Полезно(1)Бесполезно(0)
    • Городецкий

      Городецкий

      Я не понимаю ваш гнев, Mike. И вообще если честно отвечать на комментарий, ничинающийся с "бля" не было никакого желания. Вы же не начинаете разговор, заходя к незнакомому человеку домой с мата?

      Что касается решения проблемы, то у нас тривиально была синтаксическая ошибка в коде, который по-хорошему счету нужно было просто скопировать из Facebook-генератора. Рабочий пример приводить здесь не имеет смысла, т.к. Facebook вправе в любой момент изменить код кнопок.

      Полезно(0)Бесполезно(0)
      • Дерзко, согласен. Просто пять утра и я устал. Я просто за двое суток уже задрался пробовать и до сих пор не работает или я тупой. Что тоже не отриацию =) А по теме было бы просто интересно видеть рабочий и нерабочий варианты. Даже, если код и поменялся. Решение проблему могут быть схожими.

        Полезно(0)Бесполезно(0)
        • Городецкий

          Городецкий

          Я вас понимаю. Код я поискал, но не уверен, что я нашел именно те изменения, о которых писал. Из проекта этот код уже давно удален, и остался только в бекапах.

          Если я все верно нашел, то сначала виджет подключался так:

          <iframe src="http://www.facebook.com/plugins/like.php?href=<?php echo urlencode( get_permalink( $post->ID ) ); ?>&amp;layout=button_count&amp;show_faces=false&amp;&amp;action=like&amp;colorscheme=light" scrolling="no" frameborder="0" height="20" width="109"></iframe>

          А потом этот код был заменен на следующий:

          <div data-href="<?php echo urlencode(get_permalink( $post->ID )); ?>" class="fb-like" data-send="false" data-layout="button_count" data-height="20" data-width="109" data-show-faces="false"></div>
          Полезно(0)Бесполезно(0)
Комментарии закрыты.