NodeRed – İkinci Akışımızı Oluşturalım

Bu akışımızda Node-RED kullanarak internetten canlı veri çekeceğiz. Örnek olarak Türkiye Cumhuriyeti Merkez Bankasının XML biçiminde sunmuş olduğu döviz kurlarını kullanarak seçeceğimiz bir dövizin satış bilgisini debug panelinden görüntüleyeceğiz. Merkez bankası döviz kurları ile ilgili verileri aşağıdaki adresten sunmaktadır. Öncelikle bu sayfayı bir web tarayıcısı ile ziyaret ederek inceleyin.

https://www.tcmb.gov.tr/kurlar/today.xml

XML’in ne olduğu konusuna biraz açıklama getirmekte fayda var. Sayfayı tarayıcı ile ziyaret ettikten sonra Ctrl+U tuş bileşimine basarak XML kaynağını görebilirsiniz. HTML (HyperText Markup Language) ile çok benzer bir yapıya sahip olan XML (eXtensible Markum Language), verilerin paylaşılması sırasında ortak bir standart oluşturmak için verinin kullanıcı tarafından belirlenen etiketler ile sarmalanmasını yani işaretlenmesi sağlar. Örneğin, sayfa kaynağının içeriğinden de görebileceğiniz gibi; dövizlerin serbest piyasa satış kuru BanknoteSelling adlı etiket ile işaretlenmiştir. Fark edebileceğiniz gibi XML hiyerarşik tanımlamalara izin veren bir yapıdır. Örneğin tüm kur bilgileri Currency etiketi altında gruplandırılmışken, Currency grupları da Tarih_Date adlı etiket ile işaretlenen ana bloğun altında yer almaktadır.

Bu uygulamamızda belli zaman aralıkları ile dolar satış kurunu alıp debug panele yazdıracağız. İlerleyen uygulamalarda da görebileceğiniz gibi alınan kur bilgisini bir başka olayı tetiklemek için (örneğin kırmızı bir lamba yaktırmak, sesli uyarı verdirmek, e-posta veya anlık mesaj göndermek) kolaylıkla kullanabilirsiniz. Biz şu an sadece çevrim içi kaynaklardan XML veri listesinin nasıl çekileceğine ve bu listenin içinden istediğimiz verileri nasıl alabileceğimize odaklanacağız.

Çalışmaya başlamak için öncelikle aşağıdaki gibi bir akış şeması oluşturalım. Bu akış şemasını oluşturmak için paletten çalışma alanına inject, http request, xml ve debug node’larını sürükleyerek bırakın ve kablo bağlantılarını yapın.

Basit bir çevrim içi XML parselleyici ve debug panel ekranı

http request (HTTP isteği) node’u adından da anlaşılabileceği gibi bir web sunucudan basit bir HTTP isteği yaparak sunucunun cevabını msg.payload özelliği ile döndüren basit bir node’dur. Yukarıdaki akışa uygun olarak http request’ın sahip olması gereken özellikleri ayarlamak içi şu adımları gerçekleştirin.

  1. http request node’unun özellikler panelini açmak için fare ile çift tıklatın.
  2. Method özelliğini GET olarak ayarlayın.
  3. URL özelliğine http://www.tcmb.gov.tr/kurlar/today.xml adresini yazın.

http request node’u www.tcmb.gov.tr/kurlar/today.xml adresinden ilgili XML verisini getirecek ve payload özelliği ile ardından gelen xml node’una gönderecektir. xml node’u da temel olarak XML veri listesi içindeki etiketleri ve veriyi ayrıştırarak bir JavaScript dizisine dönüştürecektir. Akışı deploy ettikten sonra bu dizinin neye benzediğini debug panel’ini inceleyerek görebilirsiniz. Tüm XML verisi Tarih_Date anahtarından başlayacak şekilde Currency dizileri ile bir ağaç şeklinde ifade edilmiştir.

Dilerseniz son aşamaya geçelim ve ağaç içerisindeki birçok döviz cinsinden ihtiyacımız olanı nasıl elde edebileceğimize bakalım. Bu ağaç içerisinden ihtiyacımız olan verinin bulunduğu düğümü bulmak için her satırın solundaki kulakçığa tıklatarak genişletin. Almak istediğiniz değeri içeren düğümü bulduktan sonra, ilgili satırın sağında yer alan Copy path düğmesine tıklatın. Düğmenin resmini aşağıda görebilirsiniz.


Debug panelin copy path işlevi

Düğmeye tıklattığınızda, bu düğümün içeriğindeki veriye her zaman ulaşabilmenizi sağlayan bir patika (path) elde edilir ve panoya kopyalanır. Bu patika, ilgili verinin dizi hiyerarşisi içinde nerede olduğunu tutan bir nevi adrestir. Örneğin doların serbest piyasa alış kuruna (BanknoteBuying) ait elemanın Copy path düğmesine tıklatırsanız aşağıdaki dizi patikası panoya kopyalanır.

Bu patika bizi ilgilendiğimiz verinin XML listesi içindeki Tarih_Date etiketi altında yuvalanmış 0. Currency bloğunun BanknoteBuying adlı etiketine ulaştırır. Bu da liste içinde ilk sırada verilmiş ilk döviz türü olan doların alış kurudur. Artık ilgilendiğimiz verinin patikasını bildiğimize göre XML listesi içindeki kur bilgisini okuyabiliriz. Patikayı kullanarak okumak için function node’undan yararlanacağız. Bunun için öncelikle xml node ile debug node arasına aşağıdaki gibi bir function node’u yerleştirin.


XML listesi içinden patikası bilinen verinin okunması

Function node’u sayesinde xml node’dan function node’a gelen mesaji (msg) işleyeceğiz yani değiştireceğiz. Yapacağımız işlem msg.payload özelliğine patikasını bulduğumuz elemandaki değeri koymak olacak. Bunu yapan kod aşağıdaki function node’un properties panelinde gözüküyor.


Function node’un mesajı işleyen JavaScript kodu

Yukarıdaki kod ile yapılan işlem function node’a ulaşan msg nesnesinin payload özelliği altında depolanmış payload.Tarih_Date.Currency[0].BanknoteBuying[0] dizi elemanını, msg nesnesinin payload özelliğinin yeni değeri olarak belirlemektir. Yeni değer de return msg; ifadesi ile ardından gelen debug node’a gönderilmiştir. Akışı deploy edip Inject node’un solundaki kutucuğa tıklattığınızda, güncel dolar satış kurunu debug panelinde görebilirsiniz. Dilerseniz inject node’un interval özelliğini kullanarak verinin belirli zaman aralıklarıyla çekilmesini de sağlayabilirsiniz.

Bu uygulamada web ortamından bir verinin canlı olarak nasıl çekilebileceğine örnek verdik. Dilerseniz html node’u ve css/jquery seçim özelliğini kullanarak istediğiniz bir web içeriğini Node-RED içinde işleyebilir, ilerleyen uygulamalarda anlatıldığı üzere grafikler ile görselleştirip elektronik otomasyon sistemlerine uygulayabilirsiniz. internetten canlı veri çekme konusu oldukça popülerdir ve bu konuda yapılabilecek uygulamalar neredeyse sınırsızdır. Deprem verisi, hava durumu, borsa, haber vb.

İPUCU: Node’ları Çalışma Alanına Eklemek

Node’ları çalışma alanına eklemek için soldaki palet çubuğu kullanılır. Palet çubuğunu kullanmak yerine, control tuşunu basılı tutarken fare ile çalışma alanına tıkladığınızda bir node listesi açılır. Bu listeyi kullanarak mevcut node’lar arasında arama gerçekleştirerek hızlıca ekleyebilirsiniz.

Yazar: Özgür Koca

Yazar - Tankado.com

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.