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.
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.
XML dökümanın içeriği aşağıdaki şekilde oluyor.
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ç.
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'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'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ç.







