Android ile Hava Durumu Bilgilerini Almak


İnternet ortamında bir çok servisten JSON formatında bilgiler almak mümkün. Bu yazımızda JSON formatında Hava Durumu bilgilerini alıp ekrana yansıtacağız.

[wpdm_file id=16]

Hava Durumu bilgilerini Meteoroloji Genel Müdürlüğünün web sayfasından alacağız. Sayfaları biraz incelediğimde hava durumu bilgilerini JSON formatında verdiklerine rastlamadım. Yazdığım bir PHP sayfası hava durumu bilgisini meteorolojiden alıp  JSON formatına dönüştürüyor.

Hava Durumu bilgilerini Meteoroloji Genel Müdürlüğünden alan php kodunda mgm.gov.tr’deki yeni duruma göre düzenlemelere gitmek gerekmektedir. Düzenleme yapılacaktır. Bunun farkında olarak devam edebilirsiniz.

PHP sayfasının adresi :
http://androidevreni.com/api/android/havadurumu.php?merkez=Ankara“.
Test için ankara yerine başka illler yazabilirsiniz.

Android projemizde HTTP GET ve JSON işlemlerini yapmak için Android Asynchronous Http Client  kütüphanesini kullanacağız. Kütüphaneyi sayfasından Download butonuna basarak indirin.

Projemizi Oluşturalım

  1.  Yeni bir proje oluşturun File ⇒ New ⇒ Android Project
  2. İndirdiğiniz android-async-http-*.jar dosyasını libs altına kopyalayın.
  3. activity_main.xml dosyasını açın. Aşağıdaki arayüz kod parçasını dosyanın içerisine yapıştırın. Arayüzümüzde illerin listesini yerleştireceğimiz bir ListView var.

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        tools:context=".MainActivity" >
    
        <ListView
            android:id="@+id/listview"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />
    
    </RelativeLayout>
  4. MainActivity.java dosyasını açın, içerisine aşağıdaki kodları yapıştırın.

    public class MainActivity extends Activity {
    
    ProgressDialog pDialog;
    byte[] inenDosya;
    ListView listView;
    final AsyncHttpClient client = new AsyncHttpClient();
    final RequestParams params = new RequestParams();
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	super.onCreate(savedInstanceState);
    	setContentView(R.layout.activity_main);
    
    	listView = (ListView) findViewById(R.id.listview);
    
    	pDialog = new ProgressDialog(this);
    	pDialog.setIndeterminate(false);
    	pDialog.setCancelable(true);
    
    	String[] iller = { "Adana", "Adiyaman", "Afyonkarahisar", "Agri",
    			"Amasya", "Ankara", "Antalya", "Artvin", "Aydin", "Balikesir",
    			"Bilecik", "Bingol", "Bitlis", "Bolu", "Burdur", "Bursa",
    			"Çanakkale", "Çankiri", "Çorum", "Denizli", "Diyarbakir",
    			"Edirne", "Elazig", "Erzincan", "Erzurum", "Eskisehir",
    			"Gaziantep", "Giresun", "Gumushane", "Hakkari", "Hatay",
    			"Isparta", "Mersin", "İstanbul", "İzmir", "Kars", "Kastamonu",
    			"Kayseri", "Kirklareli", "Kirsehir", "Kocaeli", "Konya",
    			"Kutahya", "Malatya", "Manisa", "Kahramanmaras", "Mardin",
    			"Mugla", "Mus", "Nevsehir", "Nigde", "Ordu", "Rize", "Sakarya",
    			"Samsun", "Siirt", "Sinop", "Sivas", "Tekirdag", "Tokat",
    			"Trabzon", "Tunceli", "Sanliurfa", "Usak", "Van", "Yozgat",
    			"Zonguldak", "Aksaray", "Bayburt", "Karaman", "Kirikkale",
    			"Batman", "sirnak", "Bartin", "Ardahan", "Igdir", "Yalova",
    			"Karabuk", "Kilis", "Osmaniye", "Duzce" };
    
    	final ArrayList<String> list = new ArrayList<String>();
    	for (int i = 0; i < iller.length; ++i) {
    		list.add(iller[i]);
    	}
    
    	final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
    			android.R.layout.simple_list_item_1, list);
    	listView.setAdapter(adapter);
    
    	listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
    	@Override
    	public void onItemClick(AdapterView<?> parent, final View view,
    			int position, long id) {
    		final String item = (String) parent.getItemAtPosition(position);
    		params.put("merkez", item.toString());
    
    		pDialog.setMessage("Bilgi alınıyor lütfen bekleyin...");
    		pDialog.show();
    
    		client.get(
    				"http://androidevreni.com/api/android/havadurumu.php",
    				params, new JsonHttpResponseHandler() {
    				@Override
    				public void onSuccess(JSONObject jsonData) {
    
    				JSONObject firstEvent = null;
    
    				String data = null;
    				try {
    					pDialog.dismiss();
    
    					mesajGoster("İl :" + item.toString()
    							+ "nZaman :"
    							+ jsonData.getString("zaman")
    							+ "nSıcaklık: "
    							+ jsonData.getString("sicaklik")
    							+ "nNem: "
    							+ jsonData.getString("nem")
    							+ "nRüzgar: "
    							+ jsonData.getString("ruzgar")
    							+ "nBasınç: "
    							+ jsonData.getString("basinc"));
    
    				} catch (JSONException e) {
    					e.printStackTrace();
    				}
    				}
    
    				@Override
    				public void onFailure(int statusCode, Throwable e,
    						JSONObject errorResponse) {
    					super.onFailure(statusCode, e, errorResponse);
    					pDialog.dismiss();
    					mesajGoster("Karşıdan sonuç alınamadı, nbir hata oluştu, nlütfen tekrar deneyin");
    				}
    				});
    	}
    	});
    }
    
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    	getMenuInflater().inflate(R.menu.main, menu);
    	return true;
    }
    
    public void mesajGoster(String mesaj) {
    	Toast.makeText(getApplicationContext(), mesaj, Toast.LENGTH_LONG)
    			.show();
    }
    }
  5. İnternete ulaşabilmek için gerekli izni AndroidManifest.xml dosyasında tanımlayın.

    <uses-permission android:name="android.permission.INTERNET"/>
  6. Hava Durumu bilgisini alan ve JSON şeklinde veren havadurumu.php adlı dosyanın içeriği.
    <?php
        $iller = array("Adana", "Adiyaman", "Afyonkarahisar", "Agri",
                "Amasya", "Ankara", "Antalya", "Artvin", "Aydin", "Balikesir",
                "Bilecik", "Bingol", "Bitlis", "Bolu", "Burdur", "Bursa",
                "Çanakkale", "Çankiri", "Çorum", "Denizli", "Diyarbakir",
                "Edirne", "Elazig", "Erzincan", "Erzurum", "Eskisehir",
                "Gaziantep", "Giresun", "Gumushane", "Hakkari", "Hatay",
                "Isparta", "Mersin", "İstanbul", "İzmir", "Kars", "Kastamonu",
                "Kayseri", "Kirklareli", "Kirsehir", "Kocaeli", "Konya",
                "Kutahya", "Malatya", "Manisa", "Kahramanmaras", "Mardin",
                "Mugla", "Mus", "Nevsehir", "Nigde", "Ordu", "Rize", "Sakarya",
                "Samsun", "Siirt", "Sinop", "Sivas", "Tekirdag", "Tokat",
                "Trabzon", "Tunceli", "Sanliurfa", "Usak", "Van", "Yozgat",
                "Zonguldak", "Aksaray", "Bayburt", "Karaman", "Kirikkale",
                "Batman", "sirnak", "Bartin", "Ardahan", "Igdir", "Yalova",
                "Karabuk", "Kilis", "Osmaniye", "Duzce");
    
    if (!in_array($_GET['merkez'], $iller)) {
        exit;
    }
    
    header('Content-type: application/json');
    $html = httpGet("http://www.mgm.gov.tr/tahmin/il-ve-ilceler.aspx?m=".strtoupper( str_replace("i", "I", $_GET['merkez']) ));
    $doc = new DomDocument ();
    
    $bilgiler = array();
    $bilgiler2 = array();
    
    	if (@$doc->loadHTML ( $html )) {
    		$table = $doc->getElementsByTagName ( 'table' );
    		foreach ( $table as $item ) {
    			$innerHTML = "";
    			$children = $item->childNodes;
    		    foreach ($children as $child) {
    		        $innerHTML .= $child->ownerDocument->saveXML( $child );
    		        $sonTD = $child->childNodes;
    		    }
    		    foreach ($sonTD as $td) {
    		        $bilgiler[] = $td->nodeValue;
    		    }
    		}
    }
    
    $bilgiler2['zaman'] = $bilgiler[0];
    $bilgiler2['sicaklik'] = $bilgiler[2];
    $bilgiler2['nem'] = $bilgiler[4];
    $bilgiler2['ruzgar'] = $bilgiler[6];
    $bilgiler2['basinc'] = $bilgiler[8];
    
    echo json_encode($bilgiler2);
    
    function get_inner_html( $node ) {
        $innerHTML= '';
        $children = $node->childNodes;
        foreach ($children as $child) {
            $innerHTML .= $child->ownerDocument->saveXML( $child );
        }
        return $innerHTML;
    }
    
    function getRandomUserAgent()
    {
        $userAgents=array(
            "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6",
            "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)",
            "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)",
            "Opera/9.20 (Windows NT 6.0; U; en)",
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.50",
            "Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.02 [en]",
            "Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; fr; rv:1.7) Gecko/20040624 Firefox/0.9",
            "Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en) AppleWebKit/48 (like Gecko) Safari/48"       
        );
        $random = rand(0,count($userAgents)-1);
    
        return $userAgents[$random];
    }
    
    function httpGet($url)
    {
        $ch = curl_init(); 
    
        curl_setopt($ch,CURLOPT_URL,$url);
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
        curl_setopt($ch,CURLOPT_USERAGENT,getRandomUserAgent());
        curl_setopt($ch,CURLOPT_FOLLOWLOCATION,TRUE);
        curl_setopt($ch,CURLOPT_MAXREDIRS,2);
    
        $output=curl_exec($ch);
    
        curl_close($ch);
        return $output;
    }

     

Projenin çalışır halinden görüntüler.

İyi çalışmalar.

Şunlar da ilginizi çekebilir

3 yorum

  • ugurcan
    26 Mayıs 2015 at 19:41

    beyfendi bu hava durumu uygulamsına gps ekleyip bulundugumuz yerin hava durumunu alabilme sansımız var mı ben bilgisayara programcılıgı okuyorum bi yardımcı olabilirsek iyi çalışmlar

  • cefede
    21 Nisan 2016 at 11:13

    Hangi yazılım programıyla yapılılıyor bu?

  • Nurettin
    23 Mayıs 2016 at 16:42

    @Override
    public void onSuccess(JSONObject jsonData) {

    JSONObject firstEvent = null;

    String data = null;
    try {
    pDialog.dismiss();

    mesajGoster(“İl :” + item.toString()
    + “nZaman :”
    + jsonData.getString(“zaman”)
    + “nSıcaklık: ”
    + jsonData.getString(“sicaklik”)
    + “nNem: ”
    + jsonData.getString(“nem”)
    + “nRüzgar: ”
    + jsonData.getString(“ruzgar”)
    + “nBasınç: ”
    + jsonData.getString(“basinc”));

    } catch (JSONException e) {
    e.printStackTrace();
    }
    }

    @Override burda hata veriyo
    public void onFailure(int statusCode, Throwable e,
    JSONObject errorResponse) {
    super.onFailure(statusCode, e, errorResponse); burda hata veriyo
    pDialog.dismiss();
    mesajGoster(“Karşıdan sonuç alınamadı, bir hata oluştu, lütfen tekrar deneyin”);
    }

LEAVE A COMMENT