goker

göker

cebeci

developer

edirne

goker.cebeci :: yaşam için hayata dair geliştirme çabaları :: Web Developer Olmak :: Anadolu Ajansı'ndan otomatik haber almak

Anadolu Ajansı'ndan otomatik haber almak

yazım: 18 Kasım 08 23:36 / güncelleme: 22 Aralık 08 18:27

Anadolu Ajansı haber paketi XML servisi ile otomatik haber almak.

    Anadolu Ajansı, web sayfaları için haber üyeliği sunuyor. XML web servisi ile haberleri otomatik olarak çekebildiğiniz güzel bir servis. Eksikleri yok değil.

    Zamanında EdirneLife projesi için il haber bülteni üyesi, otomatik güncellenen bir haber bölümü yapmıştım. Daha büyük bir haber portalı için tüm haberleri içeren bir versiyonunu yapmam gerekti.

    Aşılması zor olmayan ilk sıkıntı UTF-8 sorunu ikincisi ise XML dosyalarına düzensiz olarak verilen kategori numaraları oldu.

   Kurcalayarak birkaçını çözdüm:

   1 - Türkiye
   2 - Politika
   3 - Ekonomi
   4 - Spor
   5 - Çevre - Sağlık
   6 - Kültür - Sanat
   7 - Dünya
   9 - Gündem   

   AA'ya oturum açtıktan sonra aşağıdaki şekilde ilgili kategorinin içeriğine ulaşabiliyoruz.

http://www.aa.com.tr/haberxml.php?aasession=[SESSIONID]&katid=[KATEGORINUMARASI]

   PHP üzerinden AA'ya otomatik olarak oturum açan ve istenilen haberleri çekip UTF-8 olarak di kodunu değiştiren bir class hazırladım.  

<?
class AA {
   private static $user = '[AAKULLANICIADI]';
   private static $pass = '[AAPAROLA]';
   private static $URL = 'http://www.aa.com.tr/index.php?option=';
   private static $XML = 'http://www.aa.com.tr/haberxml.php?';
   private static $COOKIE = 'AA.cookie'; // cookie'nin kaydedileceği dosya
   public static function login(){
$SID = self::session();
self::get($SID,1); // Türkiye kategorisindeki haberleri çekiyoruz
self::logout($SID);
   }    
   public static function cookie(){
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEJAR, self::$COOKIE);
curl_setopt($ch, CURLOPT_URL, self::$URL.'login');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'username='.self::$user.'&passwd='.self::$pass);
curl_exec($ch);
curl_close($ch);
   }
   public static function session(){
self::cookie();
$s = file_get_contents(self::$COOKIE);
if(strstr($s, "aasession" )){
$session = explode ("\t", strstr( $s, "aasession" ));
return trim($session[1]);
} else return false;
   }
   public static function get($SID,$CID){
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, self::$XML.'aasession='.$SID.'&katid='.$CID);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$result = curl_exec($ch);
curl_close($ch);
if(str_word_count($result) > 10)
file_put_contents('AA'.$CID.'.xml',iconv("ISO-8859-9", "UTF-8", str_replace('encoding="iso-8859-9"','encoding="utf-8"',$result))); // aldığımız XML'i AA[KATEGORINUMARSI].xml şeklinde kaydediyoruz.
return $result;
   }
   public static function logout($SID){
$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEFILE, self::$COOKIE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, self::$URL.'logout');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'aasession='.$SID);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);   
curl_exec($ch);
curl_close($ch);
   }
}
?>

    XML dökümanın içeriği aşağıdaki şekilde oluyor.

<?xml version="1.0" encoding="utf-8" ?>
<haberler>
<toplamhaber>39</toplamhaber>
<haber>
<haberid>432781</haberid>
<il>ANKARA</il>
<tarih>2008-11-24</tarih>
<saat>17:23:00</saat>
<baslik>BAŞKENTTE ELEKTRİK KESİNTİSİ</baslik>
<icerik> (A.A) - Dağıtım şebekelerinde yıllık periyodik işletme, 
bakım, onarım ve tesis çalışmaları nedeniyle 27-28 Kasımda Ankara&#039;nın bazı 
yerlerinde elektrik kesintisi uygulanacak.</icerik>
</haber>
<haber>
<haberid>432749</haberid>
<il>ANKARA</il>
<tarih>2008-11-24</tarih>
<saat>17:10:00</saat>
<baslik>3G İHALESİNDE ŞARTNAME SATIN ALMA SÜRESİ SONA ERDİ</baslik>
<icerik> (A.A) - Üçüncü Nesil Mobil İletişim Sistemleri&#039;nin (3G) 
28 Kasımda gerçekleştirilecek ihalesine katılabilmek için şartname satın alma 
süresi sona erdi. Turkcell, Avea ve Vodafone şartname aldı.</icerik>
</haber>
</haberler>

   Her haberin unique olarak gelen bir haberid'si var. DB'ye kayıt ederken bu id ile dublicare content'in önüne geçiyoruz.

   Benim yazdığım sistemde  cron 15 dakika arayla yeni haberleri çekip sisteme kaydediyor. Zaten UTF-8 olarak sakladığım dosyaları simpleXML  ile parse edip DB'ye aktarmak gayet basit bir süreç.


anadolu ajansı, aa, xml, haber, php
anahtar kelimeler: anadolu ajansı aa xml haber php

Yorumlar

Sitede yer alan yorumlar, kullanıcıların kendi görüşleridir. Kullanıcı yorumlarından goker.cebeci sorumlu tutulamaz.

Yorum yazmak için üye girişi yapın.

loader

Web Developer Olmak

Web Developer'ın bitmeyen geliştirme çabaları.

Konular

fPlayer (1) Web Developer Olmak (25) Bilgisayar Dertleri (4) Genel (3) az LAf ÇOK iŞ (3) beN'im gözümden (1)
ubuntu server php5 powered mysql database mootools 1.2 w3c xhtml 1.1 w3c css
Sitedeki içerikler bilgi amaçlı olup, kullanımından doğacak sorunlardan göker.cebeci sorumlu tutulamaz.