Sosyal Paylaşım Sayılarını PHP ile Çekmek
Sosyal paylaşım sitelerinin bir bir kapandığı bugün bu yazıyı yazmak ne kadar doğru, ne kadar ilgi çeker bilemiyorum. Ama olsun ben yine de paylaşacağım. Php ile içeriklerinizin sosyal paylaşım sitelerinde kaç kere paylaşıldığını/beğenildiğini çeken bir kod var aşağıda. Aslında bu kod daha fazla siteden kod çekebiliyordu ama sanırım zamanında ben bunu Facebook, Twitter ve Google Plus bilgilerini alabilecek şekilde sınırlandırmışım. Aracı bir site, kod kullanmadan direkt olarak sitelerin kendi sağladıkları API’ler yöntemiyle verileri getiriyor kod. Bu açıdan ek sitelerin yayın dururma, kısıtlamalarına takılmadan verinizi çekebiliyorsunuz.
Sosyal Paylaşım Sayılarını PHP ile çekmek
Aşağıdaki kod bir PHP class’ıdır. Bunu herhangi bir isimle kaydedip kullanabilirsiniz. Ben şimdilik sosyal_cek.php
olarak adlandırdığımız farz edeceğim. Kod gösterim alanında bulunan kodları alıp sizde bu isimle kaydedebilirsiniz.
Kod;
<?php
class SosyalPaylasimCek
{
private $url, $timeout;
function __construct($url, $timeout = 10)
{
$this->url = rawurlencode($url);
$this->timeout = $timeout;
}
function twitter_getir()
{
$json_string = $this->file_get_contents_curl('http://urls.api.twitter.com/1/urls/count.json?url=' . $this->url);
$json = json_decode($json_string, true);
return isset($json['count']) ? intval($json['count']) : 0;
}
function facebook_getir()
{
$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;
}
function googleplus_getir()
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://clients6.google.com/rpc");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, '[{"method":"pos.plusones.get","id":"p","params":{"nolog":true,"id":"' . rawurldecode($this->url) . '","source":"widget","userId":"@viewer","groupId":"@self"},"jsonrpc":"2.0","key":"p","apiVersion":"v1"}]');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
'Content-type: application/json'
));
$curl_results = curl_exec($curl);
curl_close($curl);
$json = json_decode($curl_results, true);
return isset($json[0]['result']['metadata']['globalCounts']['count']) ? intval($json[0]['result']['metadata']['globalCounts']['count']) : 0;
}
private
function file_get_contents_curl($url)
{
$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);
$cont = curl_exec($ch);
if (curl_error($ch))
{
die(curl_error($ch));
}
return $cont;
}
}
?>
Kodu buradan alıp kaydettiyseniz kullanımına geçebiliriz. Detayları kullanım alanında anlatacağım.
Kullanım;
Öncelikle bu kod bir class olduğu için dosyayı içeri aktarmalı ve sonrasında class tanımını yapmalıyız. Burada classın içine bulunan $url
değişkenini de atamalıyız. Aşağıdaki tanımda $scek
ile classı tanımlıyorum. Daha sonrasında class içindeki fonksiyonlarımızı kullanarak verileri getireceğiz. Fonksiyonlar aşağıdaki gibi işlem yaparlar;twitter_getir()
: Class tanımında verilen linkin Twitter içinde kaç kere paylaşıldığını gösterir.facebook_getir()
: Class tanımında verilen linkin Facebook içindeki paylaşım, beğeni ve yorum değerini gösterir.googleplus_getir()
: Class tanımında verilen linkin Google Plus içindeki paylaşım (+1) değerini gösterir.
<?php
include('sosyal_cek.php');
$scek=new SosyalPaylasimCek('http://wpadami.com'); //Website, sayfa linkiniz. http barındırmalıdır
echo "Twitter :".$scek->twitter_getir()." <br />"; //Twitter paylaşım sayısını getirir
echo "Facebook :".$scek->facebook_getir()." <br />"; //Facebook beğeni, paylaşım ve yorum sayısını getirir.
echo "Google Plus :".$scek->googleplus_getir()." <br />"; //Google Plusone (+1) sayısını getirir
?>
Umarım düzgün şekilde anlatabilmişimidir. Herhangi bir sıkıntı ya da sorunuz olursa lütfen iletiniz.
Selametle
Tşk ederim hocam. Yalnız bir sorum olacaktı;
Twitter ‘da paylaşım yerine beğeniyi çekmek için nasıl bir kod uygulamamız gerekir?
Selam Melih,
Twitterde beğeni değil de Favorileri demek istedin sanırım. Favoriler URL bazlı değildir, paylaştığın her içerik twittere ait bir Id ve linke sahip olur. WordPress oEmbed özelliğini kullanıp tweeti gösterebilirsin ya da twitter api ile bu işi çözersin. Yukarıda paylaştığım kodu değiştirmek pek bir işe yaramayacaktır.
Çok teşekkür ederim.
Yabancı kaynaklarda bulamadığım anlatımı sizin blogunuzda buldum.
Bir şey danışmak istiyorum.
Bu rakamları aynı zamanda veritabanına da yazmak istiyoruz diyelim.
çünkü her seferinde tekrar tekrar ekrana yazdırdığımızda aşırı bir yoğunluk olabilir. dolayısıyla veritabanını belirli aralıklarla güncellemek daha doğru olacaktır.
Aynı zamanda paylaşım sayısına göre de sıralama yapabiliriz bu şekilde.
Bunu nasıl yapabiliriz.
Örnek bir kod veya çalışma var mı?
Süleyman bey,
Belirli aralıklarla çalışacak cron ya da sayfa gösterimi anında sayıları post_id ile birlikte özel alana çekebilecek bir fonksiyon çıkartılabilir. Şu an için ben bununla ilgili çalışma yapmadım işlerimden dolayı. İleride yaparsam paylaşırım.