Неточные данные об общем количестве данных из Transient API Cache

Привет, у меня есть мультисайт wp, где я использую API Transients для кеширования подсчета общего количества в социальных сетях. Я использую ответ, размещенный здесь: Кэширование пользовательских социальных сетей в WordPress

Все работает, однако это не дает мне точного подсчета доли для всех постов. У некоторых есть правильное количество, другие просто показывают то, что кажется случайным числом. Например, пост, имеющий 65 лайков в Facebook, показывает только 1, когда добавлен временный код. Когда я удаляю переходный процесс, он показывает точное количество акций для всех из них. Есть идеи, что может вызвать это?

Вот мой код, добавленный в functions.php:

class shareCount {
private $url,$timeout;
function __construct($url,$timeout=10) {
$this->url=rawurlencode($url);
$this->timeout=$timeout;
}function get_fb() {
$json_string = $this->file_get_contents_curl('http://api.facebook.com/restserver.php?method=links.getStats&format=json&urls='.$this->url );
$json = json_decode($json_string, true);
return isset($json[0]['total_count'])?intval($json[0]['total_count']):0;
}private function file_get_contents_curl($url){
// Create unique transient key
$transientKey = 'sc_' + md5($url);

// Check cache
$cache = get_site_transient($transientKey);

if($cache) {
return $cache;
}

else {

$ch=curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
$count = curl_exec($ch);
if(curl_error($ch))
{
die(curl_error($ch));
}

// Cache results for 1 hour
set_site_transient($transientKey, $count, 60 * 60);
return $count;

}

}}

2

Решение

Я использовал этот фрагмент, и он сделал работу для API ShareCount

function aesop_share_count(){

$post_id = get_the_ID();

//$url = 'http://nickhaskins.co'; // this one used for testing to return a working result

$url = get_permalink();

$apiurl = sprintf('http://api.sharedcount.com/?url=%s',$url);

$transientKey = 'AesopShareCounts'. (int) $post_id;

$cached = get_transient($transientKey);

if (false !== $cached) {
return $cached;
}

$fetch = wp_remote_get($apiurl, array('sslverify'=>false));
$remote = wp_remote_retrieve_body($fetch);

if( !is_wp_error( $remote ) ) {
$count = json_decode( $remote,true);
}

$twitter     = $count['Twitter'];
$fb_like    = $count['Facebook']['like_count'];

$total = $fb_like + $twitter;
$out = sprintf('%s',$total);

set_transient($transientKey, $out, 600);

return $out;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]