C# ile Image Crawler Uygulaması

Daha önce yazdığımız C# ile WebCrawler Uygulamasına ek olarak, bu sefer, sayfadaki resimleri bulup, ekranda gösteren bir uygulama yazacağız.

Uygulamamız, bir web sayfasına bağlacak, sayfadaki img taglarının src değerlerini bir diziye dolduracak ve bu diziyi ekranda gösterecek. Dizi’den bir satır seçildiğinde, ilgili resmi ekrana getirecek.

Hemen aşağıdaki ekran görüntüsünü oluşturarak uygulamayı yazmaya başlayalım;

Bir web sayfasındaki resimleri bulmak için, List<string> tipinde değer döndüren ResimleriBul() isimli fonksiyon yazacağız. Bu fonksiyon adres bilgisini parametre olarak alacak, sayfadaki her img tagının src özelliğini bir listeye ekleyecek. Geriye bu liste’yi döndürecek.

private List<string> ResimleriBul(string adres) { List<string> arrReturn = new List<string>();

WebRequest wr = WebRequest.Create(txtAdres.Text);
WebResponse ws = wr.GetResponse();
StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8);
string response = sr.ReadToEnd();
sr.Close();
ws.Close();

string imageHtmlCode = "&lt;img";
string imageSrcCode = "src=\"";

int index = response.IndexOf(imageHtmlCode);
while (index != -1)
{
    response = response.Substring(index);

    int tagSonu = response.IndexOf('&gt;');
    int baslangic = response.IndexOf(imageSrcCode) + imageSrcCode.Length;
    int bitis = response.IndexOf('"', baslangic + 1);

    if (bitis &gt; baslangic &amp;&amp; baslangic &lt; tagSonu)
        arrReturn.Add(response.Substring(baslangic, bitis - baslangic));

    if (imageHtmlCode.Length &lt; response.Length)
        index = response.IndexOf(imageHtmlCode, imageHtmlCode.Length);
    else
        index = -1;
}

return arrReturn; }</pre>

ResimleriBul butonunun Click olayında, ResimleriBul() fonksiyonunun döndürdüğü her öğe, ListBox kontrolüne dolduracak.

private void btnResimleriBul_Click(object sender, EventArgs e)
{
    lbResimListe.Items.Clear();

    foreach (string image in ResimleriBul(txtAdres.Text))
        lbResimListe.Items.Add(image);
}

Son olarak, ListBox’ın seçili elemanı her değiştiğinde, PictureBox’ta seçili resim gösterilecek.

private void lbResimListe_SelectedIndexChanged(object sender, EventArgs e)
{
    pbResim.Load(lbResimListe.SelectedItem.ToString());
}


![](/assets/uploads/2009/12/ImageCrawler_2.png "ImageCrawler_2")

Uygulamanın kaynak kodlarını buradan indirebilirsiniz.

C# ile Dizi Karıştırma

Bu yazımda, bir dizi’nin C# ile nasıl karıştırılacağı (shuffle edileceği) ile ilgili bir örnek yapacağım.

Aşağıdaki formu oluşturarak, hemen programlamaya başlayalım.

İlk ihtiyacımız olan şey, tabiiki bir Liste. Rastgele kelimelerden oluşan karışık bir liste oluşturmak için, aşağıdaki RastgeleKelimeUret fonksiyonunu yazalım.

const string Harfler = “1234567890abcdefghijklmnopqrstuvwxyz”; Random r = new Random();

public string RastgeleKelimeUret() { char[] arrReturn = new char[15];

Parallel.For(0, 15, iLoop =&gt; {
    arrReturn[iLoop] = Harfler[r.Next(0, Harfler.Length - 1)];
});

return new string(arrReturn); }</pre>

Form’umuzun Load olayında, Parallel For yeteneklerinden faydalanarak, 15 harften oluşan 100 adet rastgele kelime üretiyoruz ve OrjinalListe isimli Generic Collection‘a dolduruyoruz.

private void MainForm_Load(object sender, EventArgs e)
{
    Parallel.For(0, 100, iLoop => {
        OrjinalListe.Add(RastgeleKelimeUret());
    });

    lbOrjinalListe.BeginUpdate();

    for (int iLoop = 0; iLoop < OrjinalListe.Count; iLoop++)
        lbOrjinalListe.Items.Add(OrjinalListe[iLoop]);

    lbOrjinalListe.EndUpdate();
}

Karıştır butonunun Click olayında ise; OrjinalListe collection’ının ListeKaristir() fonksiyonunu kullanıyoruz.

private void btnKaristir_Click(object sender, EventArgs e)
{
    lbKaristirilmisListe.BeginUpdate();

    lbKaristirilmisListe.Items.Clear();

    List<string> KaristirilmisListe = OrjinalListe.ListeKaristir();

    for (int iLoop = 0; iLoop < KaristirilmisListe.Count; iLoop++)
        lbKaristirilmisListe.Items.Add(KaristirilmisListe[iLoop]);

    lbKaristirilmisListe.EndUpdate();
}

Generic dizilerde ListeKaristir() isminde bir fonksiyon bulunmaz. Nereden geliyor bu fonksiyon?

public static class ExtensionManager
{
    private static Random r = new Random();

    public static List<T> ListeKaristir<T>(this List<T> Liste)
    {
        List<T> tmpList = Liste.GetRange(0, Liste.Count);
        List<T> arrReturn = new List<T>();

        while (tmpList.Count > 0)
        {
            int rastgele = r.Next(0, tmpList.Count);
            arrReturn.Add(tmpList[rastgele]);
            tmpList.RemoveAt(rastgele);
        }

        return arrReturn;
    }
}


*ExtensionManager* isimli **static class**'ın içerisine yazdığım *ListeKaristir<T>* fonksiyonundan geliyor. İlk parametreye eklediğim *this* anahtar kelimesine dikkat edelim. Bu sayede, *List<T>* yapısında olan tüm nesnelerde *ListeKaristir()* fonksiyonunun çalışmasını sağlamış olduk.

![](/assets/uploads/2009/12/ShuffleList_2.png "ShuffleList_2")

Uygulamanın kaynak kodlarını buradan indirebilirsiniz.

C# ile Google Url Kısaltma Servisini Kullanmak

Adres kısaltma servisleri ile uzun internet linklerini kısaltmak mümkündür. İnternette birçok adres kısaltma servisi şu anda hizmet vermektedir. Birkaç tanesine örnek olarak;

Tabii Google’da boş durmadı ve hemen kolları sıvayarak adres kısaltma servisi http://goo.gl duyurdu.

Bu yazımda, C# ile bu servisi nasıl kullanabileceğimizi anlatacağım.

Öncelikle ekranımızı aşağıdaki resimdeki gibi tasarlayalım;

Uygulamanın anahtar parçası, Kısalt butonunun Click olayında gerçekleşiyor. Google Url Shortener servisini kullanmak için http://ggl-shortener.appspot.com adresine url parametresi ile kısaltılmak istenen adres geçilmeli.

Biz bunu şöyle gerçekleştireceğiz;

WebRequest wr = WebRequest.Create(string.Format(“http://ggl-shortener.appspot.com/?url={0}”, txtAdres.Text)); WebResponse ws = wr.GetResponse(); StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8); string response = sr.ReadToEnd(); sr.Close(); ws.Close();</pre> Dönen JSON sonucu, çok kısa ve basit olduğu için basit bir Temizle fonksiyonuna sokacağız,

private string Temizle(string Metin, string Temizlenecek)
{
string oReturn = Metin;

foreach (char c in Temizlenecek)
    oReturn = oReturn.Replace(c.ToString(), string.Empty);

return oReturn.Replace("short_url:", "").Trim();
}

Böylece, Kısalt butonunun Click olayına şu satırları da ekleyebiliriz;

lblAdres.Text = txtAdres.Text;
lblKisaAdres.Text = Temizle(response, "{ }\\,;\"");

Artık tek yapmamız gereken, uygulamayı çalıştırmak ve bir adres girip, *Kısalt* butonuna tıklamak;

![](/assets/uploads/2009/12/GoogleUrlShortener_2.png "GoogleUrlShortener_2")

Uygulamanın kaynak kodlarını buradan indirebilirsiniz.

Kısa Sınav - 10

ASP.Net ile web uygulaması geliştiriyorsunuz.

web.config dosyası içerisine, ConnectionString’lerinizi yazdınız.

Güvenlik endişelerinden dolayı, web.config dosyanızın ConnectionStrings alanını şifrelemek istiyorsunuz.

Konfigürasyon dosyasını şifrelemek için hangi .Net tool’unu kullanmalısınız?

  • caspol.exe
  • installutil.exe
  • aspnet_compiler.exe
  • aspnet_regiis.exe Sorunun doğru cevabı için; Doğru cevap : aspnet_regiis.exe

aspnet_regiis tool’u konfigürasyon dosyasında (web.config) belli alanları şifrelemek/çözmek için gerekli parametreleri içerir

aspnet_compiler tool’u ASP.NET web uygulamalarını compile etmek için kullanılır

installutil tool’u Windows’a Servis kurmak/kaldırmak için kullanılır

caspol tool’u (Code Access Security Policy) User-Machine-Enterprise Güvenlik Kurallarını güncellemek için kullanılır

C# ile Web Sayfasından Sözlük Oluşturma

Bir web sayfasının (Bir programcının dünyası, Karalamalar, Fatih DurğutNTVMSNBC, Wikipedia gibi..) içeriğini okuduktan sonra, Html taglarından ayıklayıp bir sözlük oluşturabiliriz.

Bu yazımda, C# ve Regex kullanarak böyle bir uygulamayı nasıl yazabileceğimizi anlatacağım.

Yukarıdaki resimdeki formu oluşturduysanız, Button‘un Click olayını yazmaya başlayalım;

WebRequest wr = WebRequest.Create(txtAdres.Text); WebResponse ws = wr.GetResponse(); StreamReader sr = new StreamReader(ws.GetResponseStream(), Encoding.UTF8); string response = sr.ReadToEnd(); sr.Close(); ws.Close();

List<string> arrSozluk = new List<string>(); Regex r = new Regex(“<(.|\n)?>”); foreach (string satir in r.Replace(response, “”).Split(“ \t\r\n({[]}),.;:-+/?<>&%’#@="\_“.ToCharArray(), StringSplitOptions.RemoveEmptyEntries)) if (!arrSozluk.Contains(satir.Trim())) arrSozluk.Add(satir.Trim());

StringBuilder sb = new StringBuilder(); foreach (string satir in arrSozluk) sb.AppendLine(satir);

txtSozluk.Text = sb.ToString();

Regex nesnesi ile Html taglarını, response‘tan siliyoruz. Daha sonra, kelimeleri bölmek için Split fonksiyonunu kullanıyoruz.

Generic List sınıfından bir nesneye her bir kelimeyi ekliyoruz.

Son olarakta, Generic List içerisindeki kelimeleri TextBox aracılığı ile ekrana yazdırıyoruz.

Uygulamanın kaynak kodlarına buradan erişebilirsiniz.

Engin Polat hakkında

Senior Software Engineer, @Microsoft

Ada ve Ege'nin babası ;)

Kategoriler

İstatistik

Makale Adedi: 484

Creative Commons Lisansı