ASP.NET ile Google Api Kullanarak Hava Durumu Almak

Başlıktan da anlaşılacağı gibi Google Api yi kullanarak şehirlerin hava sıcaklığı, nem oranı, rüzgarın hızı gibi bilgileri alacağız. İstenilirse 5 günlük durum bilgisini de almamız mümkün fakat bu örnekte 1 günlük bilgiyi alacağız. İlk başta Meteoroloji müdürlüğünün yayınladığı bilgilerini kullanarak yapmak istedim fakat ne hikmetse sağlıklı çalışmıyor, muhtemelen bilginin çekildiğini anlayıp engelliyorlar. İlgilenenler için ilgili adres http://www.dmi.gov.tr/FTPDATA/analiz/sonSOA.xml burası. Buranın bir eksiği de görsellik için bir adres verilmemesi, bunun içinde ayrı bir mekanizmayla resimleri alıyordum, dünya kadar zaman harcamıştım ama elimde sadece koskoca bir hiç kaldı. İlgilenenlere kodları gönderebilirim.

Google Api ASP.NET C# Hava DurumuDönelim konumuza, nedenini bilmiyorum ama Google’ ya her konuda çok güveniyorum, dedim madem öyle Google’ nin hizmetini kullanayım. Klasik bir xml okuyucuyla (reader) bilgileri alıp istediklerimi aldım fakat ne göreyim gelen bilgiler İngilizce :| Tarayıcıdan adresi yazınca Türkçe kodlarla çekince İngilizce gelmesi hayra alamet değildi, neyse aradım taradım hl=tr parametresinin de eklenmesi gerektiğini anladım. Ama gelin görünki adres satırından bu bilgiyi gönderebilmek için & (ve (ampersand)) imininde olması gerekiyor. Bu imi direk XML adresi olarak veremiyorsunuz bunu zaten site haritası yaparken yıllar önce öğrenmiştik, yerine & ifadesini   yazıyorduk. Ama ne var ki bu şekilde istek   gönderdiğimde hiç bir değişiklik olmuyordu. Saatler geçiyor sinirden neyapacağımı nasıl bir izleyeceğimi bilmiyordum, kontrol çalışıyor fakat veriler İngilizce geliyordu, dedimki madem öyle Google Translate ile Türkçe’ ye çevireyim, hoop dedim yok daha neler altı üstü hava durumu gösterilecek. Şunu da söylemeliyim o kadar araştırmama rağmen hiç bir çözüme ulaşamadım en sonunda Google’ ya bile yazdım. Kulağı belki biraz sıkıntılı bir şekilde tuttum fakat saat gibi çalışıyor. Performans olarak da fena değil gibi. Şunu da belirtmek isterim, yazıyı bu kadar uzatmamda ki amaç zaman zaman ufak gibi görünenproblemler nedeniyle işlerin nasıl yoldan çıktığını göstermek.

Default.aspx

    <style type="text/css">
    body{
        font-family:Arial;
        font-size:13px;
    }
    .hava{
        padding:5px;
        border:1px solid #e7e7e7;
        border-right-width:2px;
        border-bottom-width:2px;
        width:250px;
    }
    .sehir{
        font-size:11px;
        background-color:#ffba00;
    }

    .ikon img{
       float:left;
       margin:5px;
    }

    .derece{
        color:#ffba00;
        font-size:15px;
        display:inline-block;
        margin-top:2px;
        font-weight:bold;
    }
    .nem,.ruzgar{display:block;font-size:9px;}
    </style>
 <div class="hava">
        <img src="http://www.google.com.tr/intl/tr/logos/Logo_50wht.gif" alt="Google" />
        <br />
         <asp:DropDownList runat="server" ID="ddlSehirler" CssClass="sehir">
            <asp:ListItem>ADANA</asp:ListItem>
            <asp:ListItem>ADIYAMAN</asp:ListItem>
            <asp:ListItem>AFYONKARAHİSAR</asp:ListItem>
            <asp:ListItem>AĞRI</asp:ListItem>
            <asp:ListItem>AKSARAY</asp:ListItem>
            <asp:ListItem>AMASYA</asp:ListItem>
            <asp:ListItem>ANKARA</asp:ListItem>
            <asp:ListItem>ANTALYA</asp:ListItem>
            <asp:ListItem>ARDAHAN</asp:ListItem>
            <asp:ListItem>ARTVİN</asp:ListItem>
            <asp:ListItem>AYDIN</asp:ListItem>
            <asp:ListItem>BALIKESİR</asp:ListItem>
            <asp:ListItem>BARTIN</asp:ListItem>
            <asp:ListItem>BATMAN</asp:ListItem>
            <asp:ListItem>BAYBURT</asp:ListItem>
            <asp:ListItem>BİLECİK</asp:ListItem>
            <asp:ListItem>BİNGÖL</asp:ListItem>
            <asp:ListItem>BİTLİS</asp:ListItem>
            <asp:ListItem>BOLU</asp:ListItem>
            <asp:ListItem>BURDUR</asp:ListItem>
            <asp:ListItem>BURSA</asp:ListItem>
            <asp:ListItem>ÇANAKKALE</asp:ListItem>
            <asp:ListItem>ÇANKIRI</asp:ListItem>
            <asp:ListItem>ÇORUM</asp:ListItem>
            <asp:ListItem>DENİZLİ</asp:ListItem>
            <asp:ListItem>DİYARBAKIR</asp:ListItem>
            <asp:ListItem>DÜZCE</asp:ListItem>
            <asp:ListItem>EDİRNE</asp:ListItem>
            <asp:ListItem>ELAZIĞ</asp:ListItem>
            <asp:ListItem>ERZİNCAN</asp:ListItem>
            <asp:ListItem>ERZURUM</asp:ListItem>
            <asp:ListItem>ESKİŞEHİR</asp:ListItem>
            <asp:ListItem>GAZİANTEP</asp:ListItem>
            <asp:ListItem>GİRESUN</asp:ListItem>
            <asp:ListItem>GÜMÜŞHANE</asp:ListItem>
            <asp:ListItem>HAKKARİ</asp:ListItem>
            <asp:ListItem>HATAY</asp:ListItem>
            <asp:ListItem>IĞDIR</asp:ListItem>
            <asp:ListItem>ISPARTA</asp:ListItem>
            <asp:ListItem>İSTANBUL</asp:ListItem>
            <asp:ListItem>İZMİR</asp:ListItem>
            <asp:ListItem>KAHRAMANMARAŞ</asp:ListItem>
            <asp:ListItem>KARABÜK</asp:ListItem>
            <asp:ListItem>KARAMAN</asp:ListItem>
            <asp:ListItem>KARS</asp:ListItem>
            <asp:ListItem>KASTAMONU</asp:ListItem>
            <asp:ListItem>KAYSERİ</asp:ListItem>
            <asp:ListItem>KIRIKKALE</asp:ListItem>
            <asp:ListItem>KIRKLARELİ</asp:ListItem>
            <asp:ListItem>KIRŞEHİR</asp:ListItem>
            <asp:ListItem>KİLİS</asp:ListItem>
            <asp:ListItem>KOCAELİ</asp:ListItem>
            <asp:ListItem>KONYA</asp:ListItem>
            <asp:ListItem>KÜTAHYA</asp:ListItem>
            <asp:ListItem>MALATYA</asp:ListItem>
            <asp:ListItem>MANİSA</asp:ListItem>
            <asp:ListItem>MARDİN</asp:ListItem>
            <asp:ListItem>MERSİN</asp:ListItem>
            <asp:ListItem>MUĞLA</asp:ListItem>
            <asp:ListItem>MUŞ</asp:ListItem>
            <asp:ListItem>NEVŞEHİR</asp:ListItem>
            <asp:ListItem>NİĞDE</asp:ListItem>
            <asp:ListItem>ORDU</asp:ListItem>
            <asp:ListItem>OSMANİYE</asp:ListItem>
            <asp:ListItem>RİZE</asp:ListItem>
            <asp:ListItem>SAKARYA</asp:ListItem>
            <asp:ListItem>SAMSUN</asp:ListItem>
            <asp:ListItem>SİİRT</asp:ListItem>
            <asp:ListItem>SİNOP</asp:ListItem>
            <asp:ListItem>SİVAS</asp:ListItem>
            <asp:ListItem>ŞANLIURFA</asp:ListItem>
            <asp:ListItem>ŞIRNAK</asp:ListItem>
            <asp:ListItem>TEKİRDAĞ</asp:ListItem>
            <asp:ListItem>TOKAT</asp:ListItem>
            <asp:ListItem>TRABZON</asp:ListItem>
            <asp:ListItem>TUNCELİ</asp:ListItem>
            <asp:ListItem>UŞAK</asp:ListItem>
            <asp:ListItem>VAN</asp:ListItem>
            <asp:ListItem>YALOVA</asp:ListItem>
            <asp:ListItem>YOZGAT</asp:ListItem>
            <asp:ListItem>ZONGULDAK</asp:ListItem>
        </asp:DropDownList><br />
        <span runat="server" ID="spnIkon" class="ikon"></span>
        <span runat="server" ID="spnDerece" class="derece"></span>
        <span runat="server" ID="spnDurum" class="durum"></span>
        <span runat="server" ID="spnNem" class="nem"></span>
        <span runat="server" ID="spnRuzgar" class="ruzgar"></span>
    </div>

Default.aspx.cs

try
        {
            string strGelenIl = Request.QueryString["Il"];
            if (string.IsNullOrEmpty(strGelenIl))
            {
                strGelenIl = "TRABZON";
            }
            WebClient webClient = new WebClient();
            string strKaynak = webClient.DownloadString("http://www.google.com/ig/api?weather=" + strGelenIl + "&hl=tr");
            TextReader trOkuyucu = new StringReader(strKaynak);
            webClient.Dispose();

            ddlSehirler.Attributes.Add("onchange", "location.href='?Il='+this.value+''");
            ddlSehirler.SelectedValue = strGelenIl;

            XmlTextReader rdr = new XmlTextReader(trOkuyucu);
            XmlDocument myxml = new XmlDocument();
            myxml.Load(rdr);
            XmlNodeList xnlHedef = myxml.SelectNodes("xml_api_reply/weather/current_conditions");

            string strDerece = xnlHedef.Item(0).SelectSingleNode("temp_c").Attributes["data"].InnerText;
            string strDurum = xnlHedef.Item(0).SelectSingleNode("condition").Attributes["data"].InnerText;
            string strNem = xnlHedef.Item(0).SelectSingleNode("humidity").Attributes["data"].InnerText;
            string strIkon = "<img src="\" alt="\&quot;&quot;" />";
            string strRuzgar = xnlHedef.Item(0).SelectSingleNode("wind_condition").Attributes["data"].InnerText;
            spnIkon.InnerHtml = strIkon;
            spnDurum.InnerText = strDurum;
            spnDerece.InnerText = strDerece + " °C";
            spnNem.InnerText = strNem;
            spnRuzgar.InnerText = strRuzgar;

            trOkuyucu.Dispose();
            rdr.Close();
            rdr = null;
            myxml = null;
            xnlHedef = null;
        }
        catch (Exception)
        {

        }

İlgili dosyaları buradan indirebilirsiniz. Bir yazının daha sonuna geldik, kalın sağlıcakla.

  • http://www.netdinamik.net sinan

    Kullanacam bunu teşekkürler.

  • http://www.yusufkaraoglan.com yusuf karaoğlan

    kardeşim güzel anlatmışsın çok saool

  • Mehmet Ali

    Eeee. şimdi ben bunu kullanırım, hemde kaynak manyak göstermeden. :)

    Elinize Sağlık gerçekten ilaç gibi geldi, meteorolojiden çekmekten bin kat daha iyi ve sağlam.

    Sen çok Yaşa Yüce Google :)

  • Mehmet Ali

    Yeniden Merhaba,

    Uygulama gerçekten güzel hoş ama global.assx ile urlrewriter kullanılmış bir sitede, detay sayfaları, .com/67-konu_basligi.html gibi gözüküyor, bu detay sayfasında şehir seçimi yapıldığında .com/67-konu_basligi.html?Il=Sehir şeklinde bir url üretiyor ve haliyle sorun oluyor nasıl aşabiliriz acaba ?

  • http://a apoStyLEE

    Merhaba, bu durumda bir problem olmaması lazım. Normalde ilgili parametreyi o şekilde de alabilirsiniz. Demek ki rewrite ile ilgili bir problem oluyor. Aklıma çözüm olarak ajax kullanmak geldi. Bu işi ajax ile halledebilirsiniz.

  • sinan

    dosyalar ve örnekler silinmiş.dosyaları tekrar yüklermisiniz.

    • apoStyLEE

      İndirme adresini düzenledim, şimdi indirebilirsiniz.

  • arıkan

    Şu Türkçe karakterlerle ilgili google dan bir cevap gelmedimi daha bende php de yapdım böyle bir uygulama ,verilerin ingilizce gelmesini çözemedim.

  • İbrahim

    Teşekkürler, gayet açıklayıcı olmuş :)

  • http://Websitesi ömer

    çok güzel bir çalışma teşekkürler güzel ve açıklayıcı yazmışsın eline yüreğine sağlık kardeşim.

  • http://-- hasan

    peki bu ikonları değiştirme şansımız varmı?

  • apoStyLEE

    Tabiki var, kendi ikonlarınızı bir klasöre atıp if lerle birlikte gelen ikonları kendi ikonlarınıza yönlendirebilirsiniz.

    örneğin;

    string strGelenIkon = xnlHedef.Item(0).SelectSingleNode(“icon”).Attributes[“data”].InnerText;
    string strLocalIkon = “”;

    if (strGelenIkon.Contains(“mostly_cloudy.gif”))
    {
    strLocalIkon = “havabulutlu.png”;
    }
    else if (strGelenIkon.Contains(“cloudy.gif”))
    {
    strLocalIkon = “havakapali.png”;
    }
    else if (true) // tüm ikonlar için bunu devam ettirebilirsiniz..
    {

    }

    string strIkon = “\""“;

    • Ramazan

      kendim resim ekleme işini beceremedim yardımcı olurmusunuz yeni öğreniyorum asp yi.
      bu dosyaların yanına images klasörü açtımve içine png uzantılı olarak resimleri kaydettim strLocalikondan nasıl gösterecem

      string strDerece = xnlHedef.Item(0).SelectSingleNode(“temp_c”).Attributes[“data”].InnerText;
      string strDurum = xnlHedef.Item(0).SelectSingleNode(“condition”).Attributes[“data”].InnerText;
      string strNem = xnlHedef.Item(0).SelectSingleNode(“humidity”).Attributes[“data”].InnerText;
      string strGelenIkon = xnlHedef.Item(0).SelectSingleNode(“icon”).Attributes[“data”].InnerText;
      string strRuzgar = xnlHedef.Item(0).SelectSingleNode(“wind_condition”).Attributes[“data”].InnerText;
      string strLocalIkon = “~/images/weather” + “.png”;
      if (strGelenIkon.Contains(“mostly_cloudy.gif”))
      {
      strLocalIkon = “36.png”;
      }
      else if (strGelenIkon.Contains(“cloudy.gif”))
      {
      strLocalIkon = “havakapali.png”;
      }

      else if (true) // tüm ikonlar için bunu devam ettirebilirsiniz..
      {
      }
      string strGelenIkon = “”;
      spnGelenIkon.InnerHtml = strGelenIkon;
      spnDurum.InnerText = strDurum;
      spnDerece.InnerText = strDerece + ” °C”;
      spnNem.InnerText = strNem;
      spnRuzgar.InnerText = strRuzgar;

      trOkuyucu.Dispose();
      rdr.Close();
      rdr = null;
      myxml = null;
      xnlHedef = null;

  • kamil

    Kardeş çok teşekkürler mükemmel oldu.

  • Reese

    Thanks Bud U id made a huge help outta here . I appreciate Google Appl They solved so much stuff 4 us 2 get the .uck outta troubles .

  • http://www.erenlermezar.com Biber

    Elinize sağlık.

  • ali yüceer

    Çok teşekkür ederim elinize sağlık bizim için çok faydalı oldu Sizlere bir sorum olacak Burada Anında hava Durumunu çekiyoruz Yarının Hava durumunu çekmesi için ne yapmamız gerekir acaba ? Şimdiden Teşekkürler .

  • Emre

    Kardeşim ben aynı programın c# wpf halini yazıorum ve

    http://www.google.com/ig/api?weather=?Ankara&hl=tr

    bu şekilde ben herhangi bir veri alamıyorum eger bu konu hakkında bir bilgin varsa yardımcı olursan çok sevinirim

  • Baris Sacikara

    Evet bazen hiç bir veri alınmıyor sanırsam google ile alakalı

  • merve

    kod nedense çalışmıyor artık

  • Baris Sacikara

    Google Api calışmıyor kodda bi sorun yok bu sefer google amca ya apiyi kurcaladı yada taşıdı