R İle Sitemap (XML) Çözümlemesi

R programlama dilini kullanarak hem XML-RPC hem de REST-API aracılığı ile WordPress web sitemizde bulunan postlarımızı listelemiştik.

AA

Web yayını için WordPress dışında, farklı bir içerik yönetim sistemi (CMS Content Management System) kullanılıyor olabilir. Bu durumda izlenebilecek birkaç yol var.

  • İçerik sisteminin sunduğu API olanaklarına göz atmak,
  • Veritabanına erişmek,
  • İçerik yönetim sistemi üzerinden içerikleri export etmek,
  • sitemap.xml içeriğini çözümlemek (parse)

Evet, yazının başlığında da belirtildiği üzere sitemap.xml hemen hemen her içerik yönetim sistemi tarafından kolaylıkla oluşturulabilmekte. Elbette içeriğin sahip olduğu benzersiz bir tanım (url aslında benzersiz olarak nitelendirilebilir ancak değiştirilebiliyor olması bir sorun taşıyabilir) ve içeriğin oluşturulma tarihi (header içerisinden okunabilir ya da lastmod kullanılabilir ancak bu yine tam olarak ihtiyacımız olan tarih olmayacaktır) olmadan ilerlememiz gerekecektir.

Tüm bu bilgiler ışığında bu yazıda R aracılığıyla XML içeriklerini nasıl okuyabileceğimizden bahsedeceğim. Elbette temel olarak sitemap.xml dosyasını alacağım. Çünkü, farklı içerik formatlarında farklı çözümler kullanmamız gerekecek. Elbette buna dair de bir ön bilgi vereceğim.

Sitemap vs Websitesi

R İle XML Dökümanlarını Okumak

R programlama dilini kullanarak XML formatlı dökümanları kolaylıkla okuyabiliriz. Bu amaçla kullanabileceğimiz en temel ve gelişmiş paketimiz XML1. Bu paket aracılığıyla XML ve HTML dokümanları oluşturabilir ve bilgisayarımızda bulunan veya bir URL üzerinden var olan dökümanların içeriğini okuyabiliriz2.

Şimdilik okuma işlemine göz atalım.

xmlXIncludes ve getXIncludes ile doğrudan XML dökümanlarını çekebilirsiniz. Ancak, doğrulama ve dosya formatı ile ilgili sorunlar yaşanması oldukça muhtemel. Bu nedenle httr3 paketini kullanarak bir GET isteği oluşturmak (request) ve bir dizi kontrol (status, content-type, authorization vb.) gerçekleştirmek daha doğru bir ilerleme biçimi olacaktır.

url <- "https://domain.com/sitemap.xml"
request <- GET(url)

İsteğimizi yaptık ve cevabı (response) tanımladığımız request değişkenine aktardık. Artık xmlParse ile XML/HTML tree karşılığı R structure oluşturabiliriz. Bunu da xmlDocument adlı değişkenimize aktaralım.

xmlDocument <- xmlParse(request, encoding = "UTF-8")
# class(xmlDocument) == c("XMLInternalDocument", "XMLAbstractDocument")

Aslında en temel işlemimiz bu kadar. Çünkü xmlToDataFrame ve xmlToList ile xmlDocument içeriğini list veya data frame olarak dönüştürebilmekteyiz.

url_df <- xmlToDataFrame(xmlDocument)
# ya da
urls_list <- xmlToList(xmlDocument)

Evet, artık oluşturduğumuz liste ve/veya data frame üzerinden uygun biçimlerde ilgili bilgilere (loc, lastmod, changefreq, priority) ulaşabiliriz. Sonraki adımda xmlRoot, xmlChildren ve xmlValue ile de node listelemek ve node içeriklerine erişmek gibi işlemler yapabilirsiniz.

Ancak XML işlemlerini farklı paketler aracılığıyla da özelleştirilmiş şekilde gerçekleştirebiliriz. xml24, XML paketi üzerine kurulu XML2R5 bu paketlerden bazıları.

Son olarak xsitemap6 paketinden bahsetmek istiyorum. Tamamen sitemap.xml içeriklerinin çözümlenmesi temelinde işlem gerçekleştiren paket standart ve katalog yapılarına göre ayrıca sonuç üretmekte. Alan adı ya da doğrudan xml yolunu fonksiyon içerisinde belirtmeniz yeterli.

xsitemapGet("https://www.alanadi.com")

Ek olarak, benim kendi ihtiyaçlarım çerçevesinde kullandığım fonksiyona da r-sitemap-parse git reposu üzerinden (SHA: ac2c7d33) ulaşabilirsiniz.