Merhaba Arkadaşlar,
Geçenlerde bir müşterimizin internet sitesine Karayolları Genel Müdürlüğü Yol Durumu Bülteni’nin eklenmesi talebi geldi. Tabi bu konuda herhangi bir servis olmadığı için (yada var ben bilmiyorum) bülten sayfasından bot yazarak çekmek gerekti. Bende gerekli bot’u yazarak sayfaya ekledim. Belki birilerine lazım olur diye buraya da ekliyorum.
Öncelikle projemizde kullanacağımız HtmlAgilityPack’i Nuget Console üzerinden Install-Package HtmlAgilityPack yazarak projemize ekliyoruz. Sonra sayfaya bir GridView ekleyelim.
<asp:GridView ID="GridView" runat="server" AutoGenerateColumns="False" Width="1000" > <Columns> <asp:BoundField DataField="CONTENT" HeaderText="Yol Durumu" ItemStyle-Width="1000" /> </Columns> </asp:GridView>
Son olarak aşağıdaki kod yardımı ile GridView’ı dolduruyoruz.
WebRequest request = HttpWebRequest.Create("http://www.kgm.gov.tr/Sayfalar/KGM/SiteTr/YolDanisma/GunlukYolDurumuBulteni.aspx"); WebResponse response = request.GetResponse(); StreamReader reader = new StreamReader(response.GetResponseStream()); string codes = reader.ReadToEnd(); int startIndex = codes.IndexOf("<table class=\"table table-bordered\" cellspacing=\"5\" cellpadding=\"5\" rules=\"rows\" border=\"1\">") + 58; int endIndex = codes.Substring(startIndex).IndexOf("</table>"); string resultCodes = codes.Substring(startIndex, endIndex); HtmlAgilityPack.HtmlDocument htmlDocument = new HtmlAgilityPack.HtmlDocument(); htmlDocument.LoadHtml(resultCodes); DataTable resultTable = new DataTable(); resultTable.Columns.Add("CONTENT", typeof(string)); HtmlNodeCollection contents = htmlDocument.DocumentNode.SelectNodes("//tr"); bool firstRecordControl = false; foreach (var content in contents) { if (firstRecordControl != false) { string result = content.InnerText.Replace("\r\n\t\t\t\t\t\t\t", "").Replace("\r\n\t\t\t\t\t\t", ""); resultTable.Rows.Add(result); } firstRecordControl = true; } GridView.DataSource = resultTable; GridView.DataBind();
Kod kısmından biraz bahsetmek gerekirse öncelikle ilgili sayfayı çekiyoruz. Sonra bizim için önemli kısım table nesnesinin içi olduğu için bu kısmı ayrıştırıyoruz. Burada önemli olan nokta sayfaya bakarken f12 yaptığımızda gördüğümüz kodlar ile sayfayı çektiğimizde gelen kodların aynı olmaması. Eğer ayrıştırırken \ işaretini koymazsanız doğru şekilde ayrışmaz. Burada koda Breakpoint koyup gelen veriyi Notepad++ ‘a yapıştırıp incelemek en güzel çözüm. Daha sonra biraz önce eklediğimiz HtmlAgilityPack kullanıp oluşturduğumuz DataTable’ı dolduruyoruz. Tabi yine kod içinde gelen “\r\n\t\t\t\t\t\t\t” gibi kısımları replace etmemiz gerekiyor.
Merhaba Arkadaşlar, Sizinle Türkiye'de faaliyet gösteren bankalar ve ödeme kuruluşlarının kartlarının güncel BIN numaraları listesini…
Bu yazımda size Asp.Net üzerinden bir api'ye nasıl dizi (Array List) veri gönderebileceğinizden bahsetmek istiyorum.…
Merhaba Arkadaşlar, Bu yazımda size Postman üzerinden bir diziyi (Array List) nasıl post olarak göndereceğinizden…
Merhaba Arkadaşlar, Google Sheet üzerinden hazırladığınız bir uygulamanızı nasıl belirli saatlerde çalışmasını sağlayabileceğinizi paylaşmak istiyorum.…
Merhaba Arkadaşlar, Google Sheet hepimizin kullandığı bir uygulama. Sizlerle Sheet üzerinden nasıl Mysql veritabanına bağlanıp…
Merhaba Arkadaşlar, İnternet sayfalarında aşağıdaki şekilde kolayca Whatsapp mesaj linki ekleyebilirsiniz.