"Enter"a basıp içeriğe geçin

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

Bu yazımızda Ekşi sözlükte gündem olan başlıkları PHP ile nasıl getirebileceğimizi gösteren 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ükte 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. Bu yüzden Ekşi sözlük.

Ekşibot 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.
Canlı deneme linki burada: https://hakans.science/test/eksibot (1-2 ay içerisinde kaldırabilirim)
Ekşi sözlük başlıklarını JSON olarak almak için: https://hakans.science/test/eksibot/get.php?ne=json
Ekşi sözlük başlıklarını XML olarak almak için: https://hakans.science/test/eksibot/get.php?ne=xml
(Scriptin indirme linki sayfanın en altında)
Bootstrap ile şekilli şukullu hale getirdim biraz:

ekşibot
Enteresan bir gündem örneği

Gündem bilgisini aldığımız URL: https://eksisozluk.com/basliklar/gundem

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">'.$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

İndirmek için tıklayınız.

İlk Yorum Sizden Gelsin

    Bir cevap yazın

    E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir