Makale Özeti

XML teknolojisinin bilgi paylaşımında kullanıldığı günümüzde bazen sürekli güncellenen bilgileri html sitelerden almamız gerekebiliyor. Bu makalemde sizlere MatchCollection sınıfını ve RegularExpressions kullanarak bir html sayfadan nasıl istediğimiz verileri çekeceğimizi anlatacağım.

Makale

Günümüzde sürekli güncellenen verileri almamız ve diğer insanlarla paylaşmamız için XML teknolojisi kullanılmakta. Fakat hala XML kullanmayan siteler var ve bazen bunlardan veri almamız gerekebiliyor. Örneğin Kandilli rasathanesi son dakika deprem etkinliklerini sadece HTML olarak veriyor. Bu sayfadan veri almak için MatchCollection sınıfını ve RegularExpressions kullanmamız gerekiyor. Öncelikle değerleri çekeceğimiz HTML koduna bakalım.


<tr>
<td headers="time"><a href="20050903093046.html">03.09.2005 09:30:46</a></td>
<td headers="lat" align="right">38.365K</td>
<td headers="lon" align="right">26.823D</td>
<td headers="depth" align="right">22.3</td>
<td headers="mag" align="center">3.1</td>
<td headers="comment" align="left"><a href="20050903093046.html">İZMİR KÖRFEZİ (EGE DENİZİ)</a></td>
</tr>
<tr>
<td headers="time"><a href="20050903084813.html">03.09.2005 08:48:13</a></td>
<td headers="lat" align="right">40.908K</td>
<td headers="lon" align="right">31.610D</td>
<td headers="depth" align="right">19.1</td>
<td headers="mag" align="center">3.1</td>
<td headers="comment" align="left"><a href="20050903084813.html">YIĞILCA (DÜZCE)</a></td>
</tr>

 

Öncelikle HTML datamızı alalım. Datamızı alamak için WebClient sınıfının DownloadData metodunu kullanacağız. Öncelikle yeni bir WebClient tanımlıyalım ve verdiğimiz urlden datamızı alalım.


   WebClient webClient = new WebClient();

   byte[] response = webClient.DownloadData(http://www.koeri.boun.edu.tr/sismo/map/tr/index.html);

 

RegularExpressions kullanarak aradığımız değerleri bulalım. Bunun için aradığımız değere uygun bir regex  yazmamız lazım. Bunu nasıl yazacğımız ile ilgili ayrıntılı bilgiye http://www.regular-expressions.info/ sitesinden ulaşabilirsiniz. Aradığımız değere uygun regexi yazdıktan sonra datayı yüklediğimiz response değişkeninde MatchCollection sınıfını kullanarak eşleşmeleri bulalım.


   string regex = "<td headers=\"comment\" align=\"left\"><a href=\"?(?<NONEED>[^\">]*)\">(?<YER>[^<]*)";
  
   MatchCollection matches = Regex.Matches(Encoding.Default.GetString(response), regex);

 

Bulduğumuz değerleri foreach döngüsü kullanarak bir seriye atalım ve Response.Write ile de yazdıralım. Tabiki sayfadaki bütün verileri almaya gerek yok. İlk 5 değeri almamız yeterli olacaktır. Bunun için aldığımız değerleri saydıralım ve 5 olunca break ile döngüden çıkalım.


   string[] yar = new string[5];
  

   if(matches.Count > 0)
   {

          foreach(Match match in matches)
         { 
                  string YER = HttpUtility.HtmlDecode(match.Groups["YER"].Value);

                  yar[k] = YER;

                  Response.Write(yar[k]);
                                      
                   k++;

                   if (k==5)
                  {
                          break;
                  }
          } 
   }
 
    else
   {   
    Response.Write("Geçici bir süre için bağlantıda sorun var");
   }

 

Yukarıda kısaca dışarıdan erişeceğimiz bir datadan nasıl istediğimiz verileri alabileceğimizi gördük. Bu datanın illa html olması gerekmez bir txt dosyasıda olabilirdi. XML teknolojisinin olduğu günümüzde bu kodlara ne gerek var desenizde özellikle eskiden yapılmış sitelerde bu yöntem gerekli hale geliyor.