Сергей Макаров | 11.07.2012

Голосование на сайтах с помощью социальных сетей

При создании сайта Я люблю ННГУ, одним из требований заказчика было проведение конкурса красоты с голосованием через социальные сети. Под анкетой каждого конкурсанта, были расположены кнопки социальных сетей (facebook, vkontakte, twitter), при нажатии на любую из которых у данного конкурсанта увеличивалось общее число голосов. Преимущество такого вида голосования очевидны — отсутствие возможности накрутить голоса сменой ip-адреса или очисткой coockies, размещение выбора проголосовавшего на его страницах в социальных сетях, что ведет к увеличению посещаемости сайта и более активному голосованию. Недостатки конечно тоже есть. Накрутить голоса все-таки можно, используя ботов или покупку голосов, хотя это довольно просто отследить.

Итак для подсчета голосов необходимо размещение кнопок социальных сетей (код для wordpress, т.к. сайт сделан на нем):

 <div class=&amp;quot;b_voices&amp;quot;>
  <span>всего голосов:</span><br />
  <b class=&amp;quot;voices-<?php the_ID(); ?>&amp;quot;></b>
 </div>

 <div>
  <?php 
    $pageURL = get_permalink ();
    echo &amp;#039;<iframe src=&amp;quot;http://www.facebook.com/plugins/like.php?href=&amp;#039;.$pageURL.&amp;#039;&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=110&amp;amp;show_faces=true&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font&amp;amp;height=21&amp;quot; scrolling=&amp;quot;no&amp;quot; frameborder=&amp;quot;0&amp;quot; style=&amp;quot;border:none; overflow:hidden; width:140px; height:21px;&amp;quot; allowTransparency=&amp;quot;true&amp;quot;></iframe>&amp;#039;;
  ?>
 </div>

 <div><a href=&amp;quot;http://twitter.com/share&amp;quot; class=&amp;quot;twitter-share-button&amp;quot; data-count=&amp;quot;horizontal&amp;quot;>Tweet</a><script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;http://platform.twitter.com/widgets.js&amp;quot;></script></div>

 <div id=&amp;quot;vk_like-<?php the_ID(); ?>&amp;quot;></div>
  <script type=&amp;quot;text/javascript&amp;quot;>
    VK.Widgets.Like(&amp;quot;vk_like-<?php the_ID(); ?>&amp;quot;, {type: &amp;quot;button&amp;quot;}, <?php the_ID(); ?> );
  </script>
 <script type=&amp;quot;text/javascript&amp;quot;>
	sum(&amp;#039;<?php the_permalink(); ?>&amp;#039;,&amp;#039;<?php the_ID(); ?>&amp;#039;)
 </script> 

sum — javascript-функция подсчета голосов:

  function sum($url, $id){
    var counter = 0;	
	
	/* facebook */
	$.getJSON(&amp;#039;http://api.facebook.com/restserver.php?method=links.getStats&amp;amp;amp;urls=&amp;#039; + $url + &amp;#039;&amp;amp;amp;callback=?&amp;amp;amp;format=json&amp;#039;, function(data) {
    	counter = counter + data[0].like_count;
		$(&amp;#039;.voices-&amp;#039;+$id).html(counter); 
	});
	
	/* vkontakte */
	$.getJSON(&amp;#039;https://api.vkontakte.ru/method/likes.getList?type=sitepage&amp;amp;amp;owner_id=2409412&amp;amp;amp;item_id=&amp;#039;  + $id + &amp;#039;&amp;amp;amp;format=json&amp;amp;amp;callback=?&amp;#039;, function(data){
	  counter = counter + data.response.count;
	  $(&amp;#039;.voices-&amp;#039;+$id).html(counter);
	});

	/* twitter */
	$.getJSON(&amp;#039;http://urls.api.twitter.com/1/urls/count.json?url=&amp;#039; + $url + &amp;#039;&amp;amp;amp;callback=?&amp;#039;, function(data2) {
	 counter = counter + data2.count;
	 $(&amp;#039;.voices-&amp;#039;+$id).html(counter);
    });<br />};

Не забывайте подключить функции активации кнопок социальных сетей:

	<!-- G+ -->
	<script type=&quot;text/javascript&quot; src=&quot;https://apis.google.com/js/plusone.js&quot;></script>
	
	<!-- FB -->
	<script type=&quot;text/javascript&quot; src=&quot;http://userapi.com/js/api/openapi.js?34&quot;></script>
	
	<!-- VK -->
	<script type=&quot;text/javascript&quot;>
	  VK.init({apiId: идентификатор сайта, onlyWidgets: true});
	</script>