Harmankaya Logo

Tusul API Örneği-PHP ile XML İşleme

ARA 15

Saat: 13:00:42 Gösterim: 1550

TUSUL LOGOYazıma başlamadan önce birkaç bilgi vermeyi uygun gördüm. Öncelikle API'nin ne olduğu hakkında birkaç kelam edelim. API , programcıların ihtiyaç duydukları verileri bir çatı altında toplayarak, program yazmada kolaylık sağlamaya yarayan bir sistemdir diyebiliriz. Örnek vermek gerekirse mevcut bir web uygulamasının API uygulaması ile bütün programcılar , o web sitesininin verilerini kullanarak kendilerine özgü servisleri yaratabilirler.

Mesela Google Map Api; sitelerinde bir şekilde harita ile yer bilgisi vermek isteyen çoğu webmasterin yardımına koşmuştur. Mesela elimde sabit bir IP var ve ziyaretçiye bulunduğu yeri haritada göstermek istiyorum. İşte bundan sonra yapmam gereken Google'ın bizim için oluşturduğu API ile programlamamızı yapmak. Mesela Google http://map.google.com/showgraph.php?ip=123.456.345.123 gibi bir adres ile 123.456.345.123 IP adresinin bulunduğu yeri haritada göstermemizi sağlıyor diyelim .( Tamamen sallama bir örnek Wink). Kolay olan şu: biz sitemize giren ziyaretçinin IP adresini bir şekilde alabiliyorsak artık haritada ziyaretçiye yerini göstermek çocuk oyuncağı.

Örneğimizi verirken çiçeği burnunda API uygulamasına sahip Tusul.Com'u kullanacağım. 

http://dev.tusul.com/ adresine girdiğimizde bize bazı bilgiler verilmiş API uygulamalarının nasıl olduğuna dair. Burayı dikkatlice okursak, çıkacak sonuç bellidir. Tusul; veritabanını tam olmasa da,  istediğin uygulamayı geliştirmemiz için açmış bulunmakta. Tek fark bize veritabanındaki bilgileri XML ya da JSON olarak vermesi. XML ve JSON bir veriyi göstermek için yazılmış özelleşmiş bir yazım tarzıdır. Biz birazdan yapacağımız basit uygulamada sıklıkla kullanılan XML yapısını kullanacağız.

Şimdi örnek olarak Tusuldan bir veriyi nasıl alacağımıza bakalım. http://api.tusul.com/haber?kategori=Teknoloji linkine girersek bize Teknoloji kategorisine ait son 10 verinin XML biçiminde dökümü gelecektir. 

API uygulamasının bulunduğu mevcut sayfası incelerseniz, bazı filtreleri de kullanabilirsiniz. Mesela http://api.tusul.com/haber?kullanici=erhanharm yazarak sadece bana ait son 10 yazısı XML e dökebiliriz. 

Madem elimizde bir XML dökümanımız oldu artık bu veritabanını herhangi bir program dili yardımıyla Parse( işlemek) edebiliriz. Biz örneğimizde yaygın olarak ve uygulaması kolay olan PHP yi kullanacağız.

Öncelikle PHP ile XML Parse etmeyle alaklı dökümanları kurcalamanızda fayda var. XML ile sıkça uğraşmadığım için açtım Manual'i ve bakmaya başladım. Görünen o ki XML'de PHP yi kullanarak istediğimiz taklayı atmak mümkün.

Öncelikle kodu verip sonra tek tek anlatmaya başlayacağım:

$Veri = array();
$kaynak = file_get_contents("http://api.tusul.com/haber?kategori=Teknoloji");
$temp = split("
",$kaynak);
for ($i=1;$i<=count($temp);$i++){
if(trim($temp[$i])==''){
continue;
}
preg_match('\<baslik>(.*)<\/baslik>\i'
, $temp[$i], $title);
preg_match('\<aciklama>
(.*)<\/aciklama>/i', $temp[$i], $link);

array_push($Veri,array($title[1],$link[1]));
echo "<b>".$title[1]."</b>";
echo "<br>" ;
echo $link[1];
echo "<br><br>" ;
}

 

Öncelikle $Veri adında bir dizi oluşturuyoruz. $Kaynak olarak, işleyeceğimiz yani bilgilerini kullancağımız adresi yazıyoruz. Ben örnekte Tusul.Com'un Teknoloji kategorisindeki son 10 mesajı kullanmak istiyorum. Adresi kafanıza göre değiştirebilirsiniz. 

Sonra preg_match fonksiyonunu ile <baslik> </baslik> ve <aciklama></aciklama> tagları arasındaki bilgileri seçiyoruz ve bunları sırayla For'un döndüğü sayı kadar ekrana basıyoruz. 

Burada Veri(item) sayımız 10 olduğu için en fazla 10 veri ekrana basabiliyoruz. İsterseniz başta oluşturduğumuz Array(dizi) nin içine de bu 10 veriyi sırayla ekleyerek (array_push) sonra bildiğimiz dizi işlemleriyle daha farklı uygulamalar yapabilirsiniz.

Fonksiyonlara ait bilgiler:

Preg_Match()

Array_Push()

File_get_contents()
 

Örnek olarak sitenizde, yukarıda yapılan örnek ile,  herhangi bir kategoride Tusul'a yazılmış yazıları sitenizin bir yerinde gösterebilirsiniz. 

Başlangıç için ideal bir örnek bundan sonraki yazıda da PHP5 ile gelen XML fonksiyonlarıyla birşeyler anlatacağım.Wink

Yaptığımız uygulamanın çıktısına http://projects.harmankaya.org/api-xml-parsing/parse.php adresinden bakabilirsiniz. Örneğin kaynak kodlarını da  http://projects.harmankaya.org/api-xml-parsing/xml-parse.rar adresinden indirebilirsiniz.

Son olarak Tusul, UTF-8 karakter kodlaması kullandığı için yaptığınız uygulamada UTF-8 karakter kodlamasını seçmeyi unutmayın. 

Kolay gelsin.Innocent

Detaylı BilgiArkadaşına GönderYazıcıya Aktar


İM'le

Yorumlar( 7 )

Yorum Gönder

#1 gönderenGönderen: Vehbi gönderme zamanıZaman: 22:39:45/

Erhan harika bir yazı olmuş. Gerçekten çok teşekkürler. Yeni başlayan bir Tusul'cu rahatlıkla, "elini koda bile sürmeden" bir program (ufak da olsa) yazabilir. Zaten bu, yazının kalitesini anlatmaya yeter de artar.

Sonraki yazınıda merakla bekliyoruz

Kolay gelsin


#2 gönderenGönderen: Erhan gönderme zamanıZaman: 00:54:33/

Ben teşekkür ederim. Sadece sitesine birkaç küçük detay eklemek isteyenler için basitçe bir anlatım yapmaya çalıştım.

Aklımda şu anda bir uygulama gelmiyor ama bi ara RSS Ticker benzeri Tusuldaki yazıları bir Ajax uygulamasıyla çeken bir betik yapabiliriz


#3 gönderenGönderen: Fatih gönderme zamanıZaman: 09:24:51/2008-01-18

Teşekkür ederim,güzel bir yazı olmuş


#4 gönderenGönderen: Erhan gönderme zamanıZaman: 16:34:04/2008-01-26

Bir arkadaşımız mail adresime bir soru sormuş.
"bu sonuçları nasıl veritabanına ekleriz"

Cevabım :

"Şimdi kodlara biraz göz atarsak FOR döngüsü sırasında içerik birer birer yazdırıldığı esnada mesela

| id | field1 | field2 | field3 |

şeklinde bir tablonuz olsun.

preg_match('\<baslik>(.*)<\/baslik>\i', $temp[$i], $title);
preg_match('\<aciklama>(.*)<\/aciklama>/i', $temp[$i], $link);

Bu kodlardan hemen sonra

$ekle = "INSERT INTO `veritabani` ( `id` , `field1`, `field2` )
VALUES (
'' , '.$title[1].','$link[1]')";
mysql_query($ekle);

yaparsan veritabanına da ekleyebilirsin. FOR döngüsü her bir dönüşünde yaptığı i (inci) sorguya ait yazıyı ekler."


#5 gönderenGönderen: Hakan YURDUSEVEN gönderme zamanıZaman: 12:00:26/2008-03-31

Öncelikle çok teşekkür ediyorum bu yazın için. BEnim bi sorum olacak. Ben bi xml serverden veri almak istiyorum bu şekilde YAlnız bu xml servis dataset döndürüyor. Bunu nasıl parse edecem. Yardımcı olursanız sevinirim.İyi günler


#6 gönderenGönderen: Erhan gönderme zamanıZaman: 22:15:54/2008-03-31

Hakan bey;

Dosya yapısı için bir örnek verirseniz beraber incelemiş oluruz.

İyi günler


#7 gönderenGönderen: Hakan YURDUSEVEN gönderme zamanıZaman: 13:52:01/2008-04-01

örnek şöle

<?xml version="1.0" encoding="utf-8" ?>
- <DataSet xmlns="http://tempuri.org/WebServiceDeneme/Service1">
- <xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
- <xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:Locale="tr-TR">
- <xs:complexType>
- <xs:choice maxOccurs="unbounded">
- <xs:element name="Table">
- <xs:complexType>
- <xs:sequence>
<xs:element name="ADI" type="xs:string" minOccurs="0" />
<xs:element name="SOYADI" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:choice>
</xs:complexType>
</xs:element>
</xs:schema>
- <diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
- <NewDataSet xmlns="">
- <Table diffgr:id="Table1" msdata:rowOrder="0">
<ADI>Ali</ADI>
<SOYADI>AK</SOYADI>
</Table>
- <Table diffgr:id="Table2" msdata:rowOrder="1">
<ADI>Ahmet</ADI>
<SOYADI>YALCIN</SOYADI>
</Table>
</NewDataSet>
</diffgr:diffgram>
</DataSet>


Blog Kategori

Son YAZILAR

sON YORUMLAR

Sponsor Reklamlar


Blogging Blogs - BlogCatalog Blog Directory
Personal blogs
Listed in LS Blogs the Blog Directory and Blog Search Engine
Bloggapedia, Blog Directory - Find It!
Blog Directory - photarium
Firefox 2

Hukuk Bürosu
Egenin Kalbi