UPDATE - April '15:
Если вы хотите получить счет, который доступен в кнопке Like, вы должны использовать поле engagement
в объекте og_object
, например:
https://graph.facebook.com/v2.2/?id=http://www.MY-LINK.com&fields=og_object{engagement}&access_token=
Результат:
{
"og_object": {
"engagement": {
"count": 93,
"social_sentence": "93 people like this."
},
"id": "801998203216179"
},
"id": "http://techcrunch.com/2015/04/06/they-should-have-announced-at-420/"
}
Возможно, с помощью Graph API просто используйте:
http://graph.facebook.com/?id=YOUR_URL
что-то вроде:
http://graph.facebook.com/?id=http://www.google.com
Вернул бы:
{
"id": "http://www.google.com",
"shares": 1163912
}
UPDATE: в то время как выше ответит, как получить счет share . Это число не совпадает с тем, которое вы видите на кнопке Like , так как это число является суммой:
Таким образом, получение номера Like Like возможно с помощью Graph API через конечную точку fql
(таблица link_stat
):
https://graph.facebook.com/fql?q=SELECT url, normalized_url, share_count, like_count, comment_count, total_count,commentsbox_count, comments_fbid, click_count FROM link_stat WHERE url='http://www.google.com'
total_count
- номер, который отображается в кнопке Like.
По моему опыту, все не так просто. Встроенный PHP SOAP клиент не работал с SOAP-сервером на базе .NET, который нам пришлось использовать. Он жаловался на неправильное определение схемы. Несмотря на то, что клиент .NET работал с этим сервером просто отлично. Кстати, позвольте мне заявить, что функциональная совместимость SOAP - это миф.
Следующим шагом был NuSOAP. Это работало довольно долго. Кстати, ради Бога, не забудьте кэшировать WSDL! Но даже с WSDL кэшированием пользователи жаловались, что эта чертова штука медленная.
Тогда мы решили пойти голыми HTTP, собирая запросы и читая ответы с помощью SimpleXMLElemnt
, вот так:
$request_info = array();
$full_response = @http_post_data(
'http://example.com/OTA_WS.asmx',
$REQUEST_BODY,
array(
'headers' => array(
'Content-Type' => 'text/xml; charset=UTF-8',
'SOAPAction' => 'HotelAvail',
),
'timeout' => 60,
),
$request_info
);
$response_xml = new SimpleXMLElement(strstr($full_response, '<?xml'));
foreach ($response_xml->xpath('//@HotelName') as $HotelName) {
echo strval($HotelName) . "\n";
}
Обратите внимание, что в PHP 5.2 вам понадобится pecl_http, так как (неожиданно!) HTTP-клиент встроен не будет.
Переход на "голый" HTTP заработал нам более 30% в SOAP-запросах. И с этого момента мы перенаправляем все жалобы на производительность ребятам на сервере.
В конце концов, я бы рекомендовал этот последний подход, а не из-за производительности. Я думаю, что в общем, в динамическом языке, таком как PHP, нет никаких преимуществ от всего этого WSDL/типа управления. Вам не нужна причудливая библиотека для чтения и записи XML, со всеми этими шлейфами генерации и динамическими прокси. Ваш язык уже динамический, и SimpleXMLElement
работает просто отлично, и очень прост в использовании. Кроме того, у вас будет меньше кода , что всегда хорошо.
Вы могли бы хотеть посмотреть здесь и здесь .
Немного примера кода из первой ссылки:
<?php
// include the SOAP classes
require_once('nusoap.php');
// define parameter array (ISBN number)
$param = array('isbn'=>'0385503954');
// define path to server application
$serverpath ='http://services.xmethods.net:80/soap/servlet/rpcrouter';
//define method namespace
$namespace="urn:xmethods-BNPriceCheck";
// create client object
$client = new soapclient($serverpath);
// make the call
$price = $client->call('getPrice',$param,$namespace);
// if a fault occurred, output error info
if (isset($fault)) {
print "Error: ". $fault;
}
else if ($price == -1) {
print "The book is not in the database.";
} else {
// otherwise output the result
print "The price of book number ". $param[isbn] ." is $". $price;
}
// kill object
unset($client);
?>