GoogleWeatherAPIから天気情報を取得する #2

APIから現在の天気ときょうの予報のみ取得する

※ Http通信で接続するため、manifestファイルにpermissionを追加する。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
// 取得するデータ
String c_condition;
String c_temp_f ;
String c_temp_c ;
String c_humidity ;
String c_wind ;
String t_low_temp;
String t_high_temp ;
String t_condition ;

// リクエストURL
String requestUrl= "http://www.google.com/ig/api?hl=ja&weather=fukuoka";

URL url = new URL(requestUrl);
// Http通信で接続する
HttpURLConnection http = (HttpURLConnection)url.openConnection();

// XmlPullParser オブジェクトを生成
XmlPullParser xpp = Xml.newPullParser();
// 取得したデータをStreamから直接読み込む
BufferedInputStream inBuffer = new BufferedInputStream(http.getInputStream());
// 日本語エンコード
BufferedReader reader = new BufferedReader(new InputStreamReader(inBuffer, "Shift_JIS"));
xpp.setInput(reader);

for(int e = xpp.getEventType(); e != XmlPullParser.END_DOCUMENT; e = xpp.next() ){
	String tag = xpp.getName(); //タグ名
			
	if(xpp.getDepth() == 3){ //3階層目
		boolean loop_break = false;	
				
		if("forecast_information".equals(tag)){
			do{	//必要ないのでループを進める
				xpp.next();
							
			}while(xpp.getDepth() == 4);
		}					
		//現在の天気データ
		if("current_conditions".equals(tag)){
			do{
				xpp.next();
				tag = xpp.getName();
							
				if(xpp.getEventType() == XmlPullParser.START_TAG){
					if("condition".equals(tag)){
						c_condition = xpp.getAttributeValue(0);
					}else if("temp_f".equals(tag)){
						c_temp_f  = xpp.getAttributeValue(0);
					}else if("temp_c".equals(tag)){
						c_temp_c  = xpp.getAttributeValue(0);							
					}else if("humidity".equals(tag)){
						c_humidity  = xpp.getAttributeValue(0);							
					}else if("wind_condition".equals(tag)){
						c_wind  = xpp.getAttributeValue(0);							
					}
				}							
			}while(xpp.getDepth() == 4);						
		}					
		//本日の天気予報データ	
		if("forecast_conditions".equals(tag)){
			do{
				xpp.next();
				tag  xpp.getName();
							
				if(xpp.getEventType() == XmlPullParser.START_TAG){							
					if("low".equals(tag)){
						t_low_temp = xpp.getAttributeValue(0);
					}else if("high".equals(tag)){
						t_high_temp  = xpp.getAttributeValue(0);
					}else if("condition".equals(tag)){
						t_condition  = xpp.getAttributeValue(0);
									
						//予報は本日分だけ取得するのでループを抜ける
						loop_break = true;
					}
				}
			}while(xpp.getDepth() == 4);
		}
					
		if(loop_break) break;
	}
}
reader.close();// BufferedReader を閉じる
inBuffer.close();// BufferedInputStream を閉じる
http.disconnect();// HttpURLConnection切断
  
HttpURLConnection(API Level1-)
Ref.) Android Developers>HttpURLConnection

XmlPullParser(API Level1-)
Ref.) Android Developers>XmlPullParser

BufferedInputStream(API Level1-)
Ref.) Android Developers>BufferedInputStream

BufferedReader (API Level1-)
Ref.) Android Developers>BufferedReader