Как получить значение цифр с кнопок социальных сетей?
В данной заметке я расскажу как получить цифры с кнопок 6 популярных социальных сетей: Вконтакте, Facebook, Twitter, Google+, Мой мир (Mail.ru) и Одноклассники. Всё ниже написанное действительно на август 2013 года. Под катом приведен пример кода на PHP для получения данных в виде цифры.
Допустим у вас есть URL-странички, для которой вы хотите получить количество «лайков» в соц. сетях.
Для примера будем использовать URL: http://amvnews.ru/index.php?go=Files&in=view&id=3248
Так же вам понадобится закодированное значение Encoded URL:
http%3A%2F%2Famvnews.ru%2Findex.php%3Fgo%3DFiles%26in%3Dview%26id%3D3248 — в PHP для его получения используется функция
urlencode($url);
Список URL по которым можно получить лайки для заданных соцсетей
1) Вконтакте (vk.com)
URL: http://vk.com/share.php?act=count&index=1&url=[Encoded URL]
Пример: http://vk.com/share.php?act=count&index=1&url=http%3A%2F%2Famvnews.ru%2Findex.php%3Fgo%3DFiles%26in%3Dview%26id%3D3248
Требуемое значение: второй параметр у функции VK.Share.count(1, [нужная циферка]);
2) Facebook
URL: http://graph.facebook.com/?ids=[Encoded URL]
Пример: http://graph.facebook.com/?ids=http%3A%2F%2Famvnews.ru%2Findex.php%3Fgo%3DFiles%26in%3Dview%26id%3D3248
Требуемое значение: цифра напротив «shares»
3) Twitter
URL: http://urls.api.twitter.com/1/urls/count.json?url=[Encoded URL]
Пример: http://urls.api.twitter.com/1/urls/count.json?url=http%3A%2F%2Famvnews.ru%2Findex.php%3Fgo%3DFiles%26in%3Dview%26id%3D3248
Требуемое значение: цифра напротив «count»
4) Google+
URL: https://plusone.google.com/_/+1/fastbutton?url=[Encoded URL]
Пример: https://plusone.google.com/_/+1/fastbutton?url=http%3A%2F%2Famvnews.ru%2Findex.php%3Fgo%3DFiles%26in%3Dview%26id%3D3248
Требуемое значение: у Google все немного сложнее, так как у него нет готово API для получения цифры. Значение ищите в области кода
<script type="text/javascript">window.__SSR = {c: [нужная циферка] ,a:'bubble' .
5) Мой мир (Mail.ru)
URL: http://connect.mail.ru/share_count?func=mrc__shareInit&url_list=[Encoded URL]
Пример: http://connect.mail.ru/share_count?func=mrc__shareInit&url_list=http%3A%2F%2Famvnews.ru%2Findex.php%3Fgo%3DFiles%26in%3Dview%26id%3D3248
Требуемое значение: цифра напротив «shares»
6) Одноклассники
URL: http://www.odnoklassniki.ru/dk?st.cmd=extOneClickLike&uid=odklocs0&ref=[Encoded URL]
Пример: http://www.odnoklassniki.ru/dk?st.cmd=extOneClickLike&uid=odklocs0&ref=http%3A%2F%2Famvnews.ru%2Findex.php%3Fgo%3DFiles%26in%3Dview%26id%3D3248
Требуемое значение: второй параметр функции ODKL.updateCountOC('odklocs0','[нужная циферка]','0','0');
PHP-функции для получения нужных цифр из соц. сетей:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
function get_outter_data ($url, $ref_url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_REFERER, $ref_url); curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/6.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11"); curl_setopt($ch, CURLOPT_TIMEOUT, 120); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $result = curl_exec($ch); return $result; } // Функция Вконтакте function get_vkontakte_raiting ($url) { $new_url = "http://vk.com/share.php?act=count&index=1&url=".urlencode($url); $siteres = get_outter_data($new_url, "http://vk.com/"); if (preg_match('/^VK.Share.count\(1, (\d+)\);$/i', $siteres, $matches)) { return intval($matches[1]); } return 0; } // Функция Facebook function get_facebook_raiting ($url) { $new_url = "http://graph.facebook.com/?ids=".urlencode($url); $siteres = get_outter_data($new_url, "http://facebook.ru/"); $fb = json_decode($siteres, true); $shares = $fb[$url]['shares']; if (!$shares) { return 0; } return intval($shares); } // Функция Twitter function get_twitter_raiting ($url) { $new_url = "http://urls.api.twitter.com/1/urls/count.json?url=".urlencode($url); $siteres = get_outter_data($new_url, "http://twitter.com/"); $tw = json_decode($siteres, true); $shares = $tw['count']; if (!$shares) { return 0; } return intval($shares); } // Функция Google+ function get_google_raiting ($url) { $new_url = "https://plusone.google.com/_/+1/fastbutton?url=".urlencode($url); $siteres = get_outter_data($new_url, "http://google.com/"); if (preg_match("/window\.__SSR = \{c: (\d+\.\d+) \,/ims", $siteres, $matches)) { return intval($matches[1]); } return 0; } // Функция Mail.ru function get_moimir_raiting ($url) { $new_url = "http://connect.mail.ru/share_count?func=mrc__shareInit&url_list=".urlencode($url); $siteres = get_outter_data($new_url, "http://mail.ru/"); $mm = json_decode($siteres, true); $shares = $mm[$url]['shares']; if (!$shares) { return 0; } return intval($shares); } // Функция Одноклассники function get_odnokl_raiting ($url) { $new_url = "http://www.odnoklassniki.ru/dk?st.cmd=extOneClickLike&uid=odklocs0&ref=".urlencode($url); $siteres = get_outter_data($new_url, "http://odnoklassniki.ru/"); if (preg_match("/ODKL\.updateCountOC\(\'odklocs0\',\'(\d+)\'/i", $siteres, $matches)) { return intval($matches[1]); } return 0; } |
Замечание: Запрос удаленного URL через CURL для удобства я вынес в отдельную функцию.