cURL Dersleri

Php ile Yerel Haber Botu Hazırlama

Neredeyse geleneksel bir hal alan php ile hazırlamış olduğum botları Beşiktaş’ın galibiyetlerine adamıştım. Bu hazırladığım botu Galatasaray ile yapılan derbi için hazırlamıştım ama galibiyet sergileyemeyince paylaşmamıştım. O maçın sinirini yeni atmış olmalıyım ki bu botu paylaşmaya karar verdim.

Şimdi botumuzun bazı özellikleri var onları belirtmek istiyorum öncelikle. Bot haberler.com sitesini Rss kaynağından bilgileri çekmektedir. Böylece son haberleri almış oluyoruz. Bu bot son eklenen haberleri almaktadır. Haber siteniz var site böyle son haberleri çeken botları kullanarak sitenizi daha güncel tutabilirsiniz.

Bot, 81 ildeki yerel haberleri çekmektedir. Böylelikle yerel haber sitesi olanların işine çok yarayacaktır. Botu çalıştırdığınızda önce sizden bir il seçmenizi isteyecek sonrasında ise haberleri yayınlayacaktır. Sadece göstermek için ben bu şekilde hazırladım ama siz kendinize göre ayarlayabilirsiniz. Kodlamayı olabildiğince basit tuttuğumdan dolayı düzenlenmesi çok kolaydır.

İlk önce geleneksel olan cURL ile oluşturduğumuz siteye bağlantımızı sağlayacak olan fonksiyonumuzu yazalım.

Function Baglan($link){
  $ch  = curl_init();
  curl_setopt($ch,CURLOPT_URL,$link);
  curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
  curl_setopt($ch,CURLOPT_REFERER,"http://www.yandex.com.tr");
  $Curl = curl_exec($ch);
  curl_close($ch);
return $Curl;
}

Bağlantı işlemini yukarıdaki gibi yaptıktan sonra şimdi kategorilerimizi de sitenin bir bölümünden çekelim. Aslında bunu manuel olarak el yordamı ile de yazabiliriz ama üşendiğim için siteden çekme kararı aldım.

$Kategori = Baglan("http://haberler.com/webmasters/?sayfa=yerelhaber");
preg_match_all('@<option value="(.*?)" >(.*?)</option>@si',$Kategori,$Adi);
echo '
 
<form action="" method="post">
     <select name="kategoriler" id="">';
for($k=0; $k <=80; $k++){
     echo '<option value="'.Seo($Adi[1][$k]).'">'.$Adi[1][$k].'</option>';
}
echo'</select>';
echo'<button type="submit">Verileri Çek</button>';
echo'</form>
 
 
';
 
 
Yukarıdaki gibi kategorileri çekmiş oluyoruz. Sonrasında ise bir form oluşturup sayfa içi post yapmasını istiyoruz. Dikkat ederseniz bir de özel fonksiyon oluşturdum bu gelen ile ait değerin seo olarak yani Türkçe karakterlerin ve diğer karakterlerin düzenlenmesini belirttiğin fonksiyon var. Bu fonksiyonda şu şekilde olacak;
 
function Seo($str){
$str=str_replace("Ş","S",$str);
$str=str_replace("ş","s",$str);
$str=str_replace("Ş","s",$str);
$str=str_replace("Ç","C",$str);
$str=str_replace("ç","c",$str);
$str=str_replace("Ö","O",$str);
$str=str_replace("ö","o",$str);
$str=str_replace("Ğ","G",$str);
$str=str_replace("ğ","g",$str);
$str=str_replace("Ü","U",$str);
$str=str_replace("ü","u",$str);
$str=str_replace("ı","i",$str);
$str=str_replace("İ","i",$str);
$str=preg_replace("/[^A-Za-z0-9\s]/"," ",$str);
$str=str_replace(" ","-",trim($str));
$str=preg_replace('/([-]+)/','-',$str);
$str=strtolower($str);
return $str;
}

Yukarıdaki kodu bağlan fonksiyonunun üstüne yazabilirsiniz. Böylece verilerimiz tam anlamıyla çalışır durumda olacaktır.

Bu adımı da geçtikten sonra post işlemi gerçekleştiğinde şunları yap diyebileceğimiz if koşulumuzda post’u tanımlıyoruz. Buda şu şekilde olacak;

if($_POST){
 // Kodlar burada olacak
}

Yukarıdaki işlemleri kategorileri çektikten sonra yazıyoruz. Şimdi yazacağımız bütün kodları açıklama satırının bulunduğu alana yazacağız.

$KategoriAdi = $_POST["kategoriler"];
$Site = Baglan("http://rss.haberler.com/rsskonu.asp?konu=$KategoriAdi");
preg_match_all('@<link>(.*?)</link>@si',$Site,$Link); // Rss Son haber linklerini aldık.
for($a=2; $a <= 21; $a++){ // 2 - 21
  $Haberbaglan = Baglan($Link[1][$a]);
  preg_match_all('@
 
<h1 itemprop="headline" id="haber_baslik">(.*?)</h1>
 
 
@si',$Haberbaglan,$HaberBaslik);
  preg_match_all('@
 
<h2 itemprop="description" (.*?)">(.*?)</h2>
 
 
@si',$Haberbaglan,$HaberKisa);
  preg_match_all('@<span id ="habermetin" class="haber_metni" itemprop="articleBody">(.*?)</span>@si',$Haberbaglan,$HaberMakale);
      
  echo '
 
<h2>'.$HaberBaslik[1][0].'</h2>
 
 
';
  echo '
 
<h4>'.$HaberKisa[2][0].'</h4>
 
 
';
  echo ''.trim(strip_tags($HaberMakale[1][0],"<b></b>
 
<u></u>")).'';
  echo "
 
<hr>
 
 
";
}

Evet .. Şimdi Rss kod kaynağına bağlandık ve oradan bilgileri aldık. Yeni adresi alıp oradan da makale içine girip bilgileri aldık. Böylece son haberleri çeken bir bot hazırlamış olduk. Gelen haberdeki html taglarından kurtulmak için ise strip_tags kullandık. İzin vereceğimiz html kodlarını da bir tırnak işareti içinde belirttik. Siz istediğiniz html kodlarına izin vermek için o alanı düzenleyebilirsiniz. Örneğin ul li yapısı gibi.

Not: Haber siteleri haberleri ajanslardan aldığı için haberler telif ile korunmaktadır. Buradaki botta yer alan bot ise sadece eğitim için hazırlanmıştır. Sitenizde kullanacağınız zaman makale verileri çekilirken sonuna haberler.com sitesini kaynak olacak göstermeniz gerekmektedir. Hatta bunu kullanırken haber vermenizi de öneririm

İlgili Makaleler

Bir cevap yazın

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