오늘은 안드로이드에서 네이버의 날씨 데이터를 파싱하여 가져오는 간단 소스를 포스팅.
핵심 기능 - 날씨 데이터를 가져오는 2가지 방법 - Jsoup / URL방식 사용 (MainActivity.java 참고) - AsyncTask<p1Type, p2Type, ReturnType> 을 사용하여 네트워크 작업을 실시 - AsyncTask<String, String, String> result = weatherConnection.execute("",""); - AndroidManifest.xml에서 Internet-permission(권한)을 주어야한다. - <uses-permission android:name="android.permission.INTERNET" /> - activity_main.xml에서 화면 Background 변경 - @drawable/bg1 |
App 배경화면 설정
- 사용할 배경화면을 drawable 폴더에 이미지파일을 넣는다.
- 가운데에 안드로이드 화면에서 배경을 마우스로 클릭해주자. (PC화면)
- 오른쪽 Properties 항목에서 Background 속성을 찾은후 @drawable/"파일명" 을 입력하기.
*Textview는 날씨가 출력 될 부분으로 추가함.
파싱할 URL(날씨정보)
- 네이버 날씨정보 -> 지역별 날씨(서초구) -> URL복사
아래는 내가 가져올 날씨정보 URL
MainActivity.Java
onCreate 메소드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | protected void onCreate(Bundle savedInstanceState) { // 건들이지 말자 super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // <-- TextView textView = (TextView)findViewById(R.id.textView); WeatherConnection weatherConnection = new WeatherConnection(); AsyncTask<String, String, String> result = weatherConnection.execute("",""); System.out.println("RESULT"); try{ String msg = result.get(); System.out.println(msg); textView.setText(msg.toString()); }catch (Exception e){ } } | cs |
Jsoup을 사용한 데이터 파싱
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | // Jsoup을 이용한 날씨데이터 Pasing하기. String path = "http://weather.naver.com/rgn/townWetr.nhn?naverRgnCd=09650510"; Document document = Jsoup.connect(path).get(); Elements elements = document.select("em"); System.out.println(elements); Element targetElement = elements.get(2); String text = targetElement.text(); System.out.println(text); return text; | cs |
- 네이버 날씨 에서 온도 및 날씨상태 부분은 <em>태그로 감싸있으므로 em태그에서 온도 및 날씨상태를 추출한다
(참고 :
네이버 날씨에서 f12눌러 소스코드 확인할것)
URL을 사용한 데이터 Reading
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // URL접속하여 HTML 가져오기. URL url = new URL("http://weather.naver.com/rgn/townWetr.nhn?naverRgnCd=09650510"); System.out.println("Call target URL try...."); InputStream inputStream = url.openStream(); Scanner scanner = new Scanner(inputStream, "UTF-8"); while (true){ try{ System.out.println(scanner.nextLine()); }catch (Exception e){ e.printStackTrace(); break; } } | cs |
결과
▼ 모바일 화면
em태그 에서 추출한 현재 날씨온도 와 상태 를 System.out으로 확인