Merhabalar, C# Eğitim Setime ekleyecek normal dersler bulmakta zorlandığım için C# Türkçe Sözlük Uygulaması gibi küçük küçük projeler yapmaya başladım. Hem Github profilimi zenginleştiriyorum hem de benzer projeler arayanlara belki faydam oluyordur. Bu dersimizde TDK‘nın sitesinden Türkçe kelimelerin anlamlarını aratıp çekeceğiz.
Proje Github’a yüklenmiş olacak.
C# Türkçe Sözlük Uygulaması – TDK Kelime Anlamları
Bu dersimizde TDK’nın sitesinden Türkçe kelimelerin anlamlarını alan proje yapacağız.
Projemize bir label, iki textbox, bir button ve bir webbrowser koyalım.
Öncelikle TDK’nın sitesini gizlemiş olduğumuz webbrowser’da açacağız. Sonra bu web browser üzerinde açılan sitede, sitede kelime araması yapılan input alanına, textbox’a yazdığımız kelimeyi yazdırıp, kod ile arama buttonuna tıklatacağız. Sonrasında alt kısımda çıkan tüm anlamları ve diğer yardımcı açıklamaları alarak multiline bir textbox’a temiz bir şekilde yazacağız.
Form_Load eventi
private async void Form1_Load(object sender, EventArgs e) { webBrowser1.ScriptErrorsSuppressed = true; string url = "https://sozluk.gov.tr/"; this.webBrowser1.Navigate(url); await PageLoad(1); }
Burada WebBrowser nesnesinin her zaman çıkardığı saçma bir script hata ekranının çıkmasını engelliyoruz. TDK’nın sitesine gidiyoruz ve 1 saniye sitenin yüklenmesini bekliyoruz.
async kısmına Dikkat!!! PageLoad metodu async bir metod olduğundan dolayı, bu metodu kullandığımız diğer metodlarda async olmak zorundadır.
PageLoad metodu
private async Task PageLoad(int TimeOut) // sayfayı bekletme { TaskCompletionSource<bool> PageLoaded = null; PageLoaded = new TaskCompletionSource<bool>(); int TimeElapsed = 0; webBrowser1.DocumentCompleted += (s, e) => { if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) return; if (PageLoaded.Task.IsCompleted) return; PageLoaded.SetResult(true); }; while (PageLoaded.Task.Status != TaskStatus.RanToCompletion) { await Task.Delay(10); TimeElapsed++; if (TimeElapsed >= TimeOut * 100) PageLoaded.TrySetResult(true); } }
Burada anlatabileceğim bir şey yok. Bu metod kodlarımızı, web browserda göstermek istediğimiz site yüklenene kadar bekletiyor. Yani Therad.Sleep yazmak yerine sitenin yüklenmesini bekliyoruz.
btn_ara_click eventi
private async void btn_ara_Click(object sender, EventArgs e) { webBrowser1.Document.GetElementById("tdk-srch-input").SetAttribute("value", txt_ara.Text); webBrowser1.Document.GetElementById("tdk-search-btn").InvokeMember("Click"); await PageLoad(2); // aramanın yüklenmesini bekliyoruz. HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(webBrowser1.DocumentText); HtmlElement html_maddeler = webBrowser1.Document.GetElementById("maddeler0"); try { textBox1.Text = (html_maddeler.InnerText).Replace(@"GÜNCEL TÜRKÇE SÖZLÜK", "").Replace("Birleşik Kelimeler", ""); } catch (NullReferenceException) { MessageBox.Show("TDK'da böyle bir kelime yer almamaktadır.", "Kelime Yok!", MessageBoxButtons.OK, MessageBoxIcon.Hand); } }
Wweb browser’a yüklenen sitedeki arama yerine, aramak istediğimiz kelimeyi yazdırıp arama butonuna tıklattık. Aramanın yüklenmesini 2 saniye bekledik. WebBrowser’da yüklenen sitenin arka planındaki tüm html kodları aldık.
Bizim istediğimiz verileri tutan div olan maddeler0 adlı div ve tüm içeriğini aldık. Try’ın amacı aradığımız kelime sonucunda bir arama cevap çıkmadı ise programın kırılması yerine bir hata mesajı vermesini istememizdir.
InnerText diyerek, elimizdeki maddeler0 id’li html diz parçasındaki tüm html ögeleri kaldırarak saf metinleri alıyoruz. Metinleri aldıktan sonra görünmesini istemediğimiz kısımları da Replace metodu ile temizliyoruz.
Hepsi bu kadar arkadaşlar. Sizlerde bu yöntemle C# türkçe ingilizce sözlük gibi diller arası çeviri sözlüğü gibi uygulamalar yapabilirsiniz. Ancak aşırı derecede fazla sorgulama yaptırmak ip’nizin banlanmasına neden olabilir.
C# Türkçe Sözlük Uygulaması – TDK Kelime Anlamları yazımda bu kadardı arkadaşlar. Diğer yazılarımızda görüşmek üzere…
C Sharp Eğitim Seti eğitimi sayfasına gitmek için tıklayınız. Derslerime özel olarak hazırladığım Github Projeme buradan ulaşabilirsiniz…
Bu dersin projesini bu github linkinden indirebilirsiniz.
NOT: İndirdiğiniz hali bu derste olan hali olmayabilir. Belki biraz daha iyileştirmek için işlemler yapabilirim.
469. yazı bitti.