PHP İle Ekşi sözlük gündem başlıklarını getirme

PHP ile Ekşi Sözlük Gündem Başlıklarını Getirmek

By

Bu yazımızda Ekşi Sözlük’te gündem olan başlıkları PHP ile XMLi Json ya da HTML olarak getirmenizi sağlayan ufak bir scripti paylaşıyorum.

Neden Ekşi Sözlük?

Bilirsiniz ki; Ekşi sözlük, Türkiye’nin sanal alemdeki en büyük topluluklarından biri. Türk sosyal medyasının büyük bir kısmını Ekşi Sözlük oluşturuyor. Ekşi Sözlük’te trend olan bir başlığın, diğer sosyal platformlara hızla yayılması sıkça karşılaşılan bir durum, bazen tam terside olabiliyor. Genellikle absürd başlıklar görülse de, Türkiye’nin gündemindeki konuları kısmen Ekşi’deki başlıklardan anlayabilirsiniz. İşte bu yüzden Ekşi Sözlük.

Bu script ne işe yarayacak?

Tek başına bu script fazla işe yaramayacaktır. Fakat diğer sosyal platformlardaki trendleri ve Google Search trendlerini de toplayıp işleyebilirseniz; ülke gündemi hakkında çok önemli analitik bilgiler edinebilirsiniz. İlerleyen zamanlarda bununla ilgili birkaç yazı daha yazmaya çalışacağım.

Giriş

Öncelikle ekşibot scriptinin basit bir örnek olduğunu belirtmek isterim. Belki farklı yöntemler ile daha basit şekilde de yapılabilirdi. Ben bu yöntem ile yapmayı daha uygun gördüğüm için böyle yapıyorum. Fikir olması açısından paylaşıyorum.

Gündem bilgisini aldığımız URL: https://eksisozluk.com/basliklar/gundem Kodumuz bu sayfadaki başlıkları çekiyor.

Canlı deneme linki burada: https://hakanozalan.com/test/eksibot
Ekşi sözlük başlıklarını JSON olarak almak için: https://hakanozalan.com/test/eksibot/get.php?ne=json
Ekşi sözlük başlıklarını XML olarak almak için: https://hakanozalan.com/test/eksibot/get.php?ne=xml
(Scriptin indirme linki sayfanın en altında)
Bootstrap ile şekilli şukullu hale getirdim biraz:

Sözlükten garip bir gündem örneği 🙂

Fonksiyonlar

getir fonksiyonu: Veri getirmek için bu fonksiyonu kullanıyorum. (“Fatal error: Call to undefined function curl_init()” hatasını alıyorsanız çözümü için buraya tıklayınız)
sec fonksiyonu: preg_match_all yerine strpos ve substr fonksiyonlarını kullanarak başlıklar tablosunu getirmek için kullanıyorum.

function getir($url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_REFERER, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$result = curl_exec($ch);
$kod = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if (!$kod == 200){
exit("<b>Bozuldum.</b>");
}
curl_close($ch);
return $result;
}

function sec($i,$b,$s){
$bir = strpos($i,$b);
$iki = strpos($i,$s)-$bir;
return substr($i,$bir,$iki);
}

function yerlestir($str,$degis,$yeni){
return str_replace($degis,$yeni,$str);
}

xmlYazdir fonksiyonu: gundemList array’ini XML formatında yazdırmak için kullanıyorum.
htmlYazdir fonksiyonu: gundemList array’ini HTML formatında bootstrap uyumlu yazdırmak için kullanıyorum.

function xmlYazdir(){
date_default_timezone_set(‘Europe/Istanbul’);
@header("Content-type: text/xml");
$gundemList = $GLOBALS["gundemList"];
echo ‘<?xml version="1.0" encoding="UTF-8"?><root>’;
foreach($gundemList as $q){
echo ‘<gundem><baslik>’.htmlentities($q[‘baslik’]).'</baslik><entry>’.$q["entry"].'</entry><url>’.htmlentities($q["url"]).'</url></gundem>’;
}
echo "</root>";
}

function htmlYazdir(){
@header("Content-type: text/html");
$gundemList = $GLOBALS["gundemList"];
echo ‘<ul class="list-group">’;
foreach($gundemList as $q){
echo ‘<li class="list-group-item d-flex justify-content-between align-items-center"><a style="color:#313131" href="https://eksisozluk.com’.$q["url"].’" target="_blank" rel="noopener noreferrer">’.$q["baslik"].'</a><span class="badge badge-primary badge-pill">’.$q["entry"].'</span></li>’;
}
echo ‘</ul>’;
}

sonucYazdir fonksiyonu: URL’de belirlediğim aralıktaki tabloyu alıp Array’ın içerisine ekliyor. 3 sayfayı da toplamak gerektiği için fonksiyonu for döngüsü ile kullanıyorum.

function sonucYazdir($sayfa,$q){
if (!isset($sayfa)){
$sayfa = 1;
}
$site = "https://eksisozluk.com/basliklar/gundem?p=$sayfa";
$icerik = getir($site);
if ($icerik){
$bas = ‘<ul class="topic-list">’;
$son = ‘<div class="full-index-continue-link-container">’;
if($sayfa > 1){
$son = ‘</li></ul>

<div class="pager"’;
}
$sonuc = sec($icerik,$bas,$son);
if ($sayfa > 1){
$sonuc = yerlestir($sonuc,"</section>","")."</li></ul>";
}else{
$sonuc = yerlestir($sonuc,"</section>","");
}
$xml = simplexml_load_string($sonuc);
foreach($xml->li as $x){
$GLOBALS["gundemList"][$q] = array("baslik"=>htmlentities($x->a),"url"=>htmlentities($x->a["href"]),"entry"=>htmlentities($x->a->small));
$q++;
}
return $q;
}
}

İndirme Linki

Scripti indirmek için buraya tıklayınız.

Leave a Comment

Your email address will not be published.

You may also like