Başlangıç

Asp.NET İle BOT Yapımı (Sadece Belli Etiketler Arası Çekme, Haber Bot Yapımı)

Yorum bırakın


Asp.NET İle BOT Yapımı (Sadece Belli Etiketler Arası Çekme) örneğin bir haber sayfasından öne çıkan haberleri almak istiyorsunuz. Bunun için bir önceki konuda anlatılanlara ek olarak bazı string fonksiyonlardada yararlanarak bir haber botu yapabiliriz.

Bunun için sayfaya bir adet buton, 1 adet text kutusu, 1 adet label nesnesi yerleştirdim.

  • haberbotyapimi.aspx sayfasındaki nesnelerin kodları;

<asp:TextBox runat=”server” id=”txtAdres”></asp:TextBox>

<asp:Button ID=”btnVeriCek” runat=”server” Text=”Veri Çek”
onclick=”btnVeriCek_Click” />
<br />
<asp:Label ID=”lblGelenVeri” runat=”server”></asp:Label>

bothabercek

  • haberbotyapimi.aspx.cs sayfamızda uygun namespaceleri eklemeyi unutmayın;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.Globalization;
using System.IO;
using System.Text;

// daha sonra butona tıkladığınızda oluşan btnVeriCek_Click olayındaki kodlar şöyle olacak.

protected void btnVeriCek_Click(object sender, EventArgs e)
{
string adresal = “http:// + txtAdres.Text;
WebResponse GelenCevap;
WebRequest adresistegi = HttpWebRequest.Create(adresal);
GelenCevap = adresistegi.GetResponse();
//CultureInfo tr = new CultureInfo(“tr-TR”);//dil ayarı yapmak için kapattığım bu iki satırda kullanılabilir. ama ben aşağıdaki gibi kullandım
//StreamReader SayfaKaynakBilgisi = new StreamReader(GelenCevap.GetResponseStream(), Encoding.GetEncoding(tr.TextInfo.ANSICodePage));
StreamReader SayfaKaynakBilgisi = new StreamReader(GelenCevap.GetResponseStream(), Encoding.GetEncoding(“utf-8”));//dil problemi olmaması için sayfaların kaynak kodundan kullandığı sistemi öğrenin ve yazın (Encoding.GetEncoding(“ISO-8859-1”) )kaynak kodu alma
string kaynakbilgiyial = SayfaKaynakBilgisi.ReadToEnd();
int HaberBaslangic = kaynakbilgiyial.IndexOf(“<td class=\”ana_haber_adi\”>”)-137;//Başlangıç noktası kaynak sayfamdaki kodlarda belirleyici etiket sayısı azdı onun için haberlerin bulunduğu belirleyici noktadan <table> etiketine kadar geri gidip tablo başına ulaşmaya çalıştım. burası alınacak sayfanın kaynak kodlarına göre değişir.
int HaberBitis = kaynakbilgiyial.Substring(HaberBaslangic).IndexOf(“SON HABER YORUMLARI”)-125;//yukarıdaki açıklama burası içinde geçerli. burada yukara belirlenen başlangıç noktsından itibaren nereye kadar alınacağı  belrleniyor. burası alınacak sayfanın kaynak kodlarına göre değişir.
string IstenenBolum =kaynakbilgiyial.Substring(HaberBaslangic, HaberBitis);
IstenenBolum = IstenenBolum.Replace(“src=\””, “src=\”http://www.turkegitimsen.org.tr/);//sayfada yollar kısa yazılmıştı bende resimleri göstersin diye tüm yolları uzun olarak değiştirdi. burası alınacak sayfanın kaynak kodlarına göre değişir.
lblGelenVeri.Text = IstenenBolum;
}

Ben denedim güzel bir uygulama oldu. Yukarıdaki örnek dil ayarları ve etiket aralığı kısmı alınacak kaynak sayfa  ya göre bakılarak değiştirilmeli ve dil ayarları da sayfaya göre ayarlanmalıdır.

Asp.NET İle BOT Yapımı (Sayfa Başlığını Çekme)

Yorum bırakın


Sayfada iki etiket arasını çekebilirsiniz. Önce basit olan <title> etiketleri arasını çekelim. Sayfaya 2 adet textbox, 1 tane de button yerleştirelim.

  • Oluşan vericekme1.aspx sayfasının kodları;

<br />
Adres:Http://<asp:TextBox ID=”txtAdresBilgisi” runat=”server” Height=”16px”
Width=”289px”></asp:TextBox>
<br />
Başlık Bilgisi:<asp:TextBox ID=”txtGelenVeri” runat=”server” Height=”21px”
Width=”448px”></asp:TextBox>
<br />
<asp:Button ID=”btnVeriCek” runat=”server” onclick=”btnVeriCek_Click”
Text=”Veri ÇEK” />
botbaslikcek

  • vericekme1.aspx.cs sayfasının kod bölümünde bazı namespaceler mutlaka eklenmeli;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Net;
using System.Globalization;
using System.IO;
using System.Text;// bu namespacelerden eksik olanları ekleyin.

// daha sonra butona tıkladığınızda oluşan btnVeriCek_Click olayındaki kodlar şöyle olacak.

protected void btnVeriCek_Click(object sender, EventArgs e)
{
string adresal = “http:// + txtAdresBilgisi.Text;// adres bilgisinde http:// olmadığını düşüdük varsa silerek yazın ve ya kontrol kodları ekleyin
WebResponse GelenCevap;
WebRequest adresistegi = HttpWebRequest.Create(adresal);
GelenCevap = adresistegi.GetResponse();
StreamReader SayfaKaynakBilgisi = new StreamReader(GelenCevap.GetResponseStream(), Encoding.GetEncoding(“utf-8”));//dil problemi olmaması için sayfaların kaynak kodundan kullandığı sistemi öğrenin ve yazın Encoding.GetEncoding(“ISO-8859-1”) kaynak kodu alma
string kaynakbilgiyial = SayfaKaynakBilgisi.ReadToEnd();
int titlebaslangic = kaynakbilgiyial.IndexOf(“<title>”) + 7;//Kaynak kod içinden başlık kısmını arama
int titlebitis = kaynakbilgiyial.Substring(titlebaslangic).IndexOf(“</title>”);
txtGelenVeri.Text = kaynakbilgiyial.Substring(titlebaslangic, titlebitis);// iki etiket arasında kalan kısmı text kutusunda yazdırdık.
}

Sonuç olarak BOT işleminde kullanacağınız sayfaya göre alınan etiket bilgisini istediğiniz gibi değiştirerek ve ya geliştirerek değişik işlemler yapılabilir.

Asp.Net C# Razor Wiev Engine ile Bot yapımı. (Sayfadaki Etiketleri Çekme)-7

5 Yorum


İstenen web sayfasından istenen etiket ve ya linkleri çekme kodları için Lütfen önce Aşağıdaki Konu Anlatımlarını Okuyunuz.

ASP.NET MVC NEDİR? -1

Asp.Net MVC 3 Visual Studio 2010 ile MVC projesi oluşturmayı ve Asp.Net MVC 3’ün nasıl çalıştığını anlama-2

Asp.Net MVC 3 Razor View Engine Kullanımı -3

Asp.Net MVC 3’te ViewBag Kavramı -4

ASP.NET MVC VIEWBAG, VIEWDATA, TEMPDATA -5

Asp.Net MVC 3 ViewBag ve ViewData Arasındaki Fark -6

Bu konudaki diğer makale ve örneklerde görüldüğü gibi oluşturduğunuz proje Razor Wiew Engine olacak.

  • Proje oluştuktan sonra HomeController.cs dosyasının içeriği;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Net;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;

namespace Mvcuygulama4.Controllers
{
public class HomeController : Controller
{
public ActionResult Index()
{
ViewBag.Message = “Hoşgeldiniz ASP.NET MVC!”;
ViewData[“datas”] = ss();
return View();
}
List<string> dataList = new List<string>();
private List<string> ss()
{
string Site = “http://istenenadresiyaz.com/&#8221;;
WebClient client = new WebClient();
Stream data = client.OpenRead(Site);
StreamReader reader = new StreamReader(data, Encoding.GetEncoding(“utf-8”)); //tüm site içeriğini indirdik ve bir dosya sınıfına attık
string datas = reader.ReadToEnd();

string pattern3 = “<a.*?href=.*?>(.*?(<img.*?>).*?)</a>”; //aradığımız etiketler.
MatchCollection mathcollection = System.Text.RegularExpressions.Regex.Matches(datas, pattern3);//site kaynak kodları ile aradığımız etiketlerin string olarak karşılaştırma
foreach (Match match in mathcollection)
{
if (match.Value.ToString().Contains(“<img”))
dataList.Add(match.Value);
}
return dataList;
}

public ActionResult About()
{
return View();
}
}
}

  • Index.cshtml sayfasının içeriği;

@{
ViewBag.Title = “Home Page”;
}

<h2>@ViewBag.Message</h2>
<h2>Index</h2>
@{
List<string> datas = (List<string>)ViewData[“datas”];
foreach(string s in datas.ToList())
{
<hr />
<label>@s.ToString()</label>
}
}
<p>
To learn more about ASP.NET MVC visit <a href=”http://asp.net/mvc&#8221; title=”ASP.NET MVC Website”>http://asp.net/mvc</a&gt;.
</p>

Bana Silverlight Anlat

meslek lisesi ders notları

Eren ÇOLAK

Yazılım Mühendisi Olmak Yolunda İlerliyor...