오픈API를 사용할 일이 생겨서 처음 시도해봤다..! 처음에 조금 헤맸지만 무사히 해결!
나는 공공 데이터 포털을 이용했다. (www.data.go.kr/index.do)
건축물 대장과, 기상관측시간자료가 필요했기 때문이다~
1. 공공 데이터 포털(www.data.go.kr/index.do)에 들어가서 필요한 공공데이터 활용 신청한다~
그러면 다음 사진과 같이 뜬다~
각각 Click해보면 서비스정보 - 일반 인증키(UTF-8)에 있는 인증키를 활용할것이다~
2. AndroidManifest.xml에 Code 추가하기!
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
3. Activity에 Code 추가하기!
public class RealActivity extends AppCompatActivity {
final static String TAG = "SnowProject";
Timer timer;
TextView weather_text;
TextView home_text;
String weather_data;
String home_data;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_real);
weather_text = (TextView)findViewById(R.id.weather);
home_text = (TextView)findViewById(R.id.home);
new Thread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
// 아래 메소드를 호출하여 XML data를 파싱해서 String 객체로 얻어오기
// 날씨 API
weather_data= getWeatherXmlData();
// 건축물 API
home_data = getHomeXmlData();
runOnUiThread(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
weather_text.setText(weather_data); //TextView에 문자열 data 출력
home_text.setText(home_data);
}
});
}
}).start();
}
// 밑에 source code 더 있음!
// xml parsing part
String getHomeXmlData(){
StringBuffer buffer=new StringBuffer();
String sigungu = "Your 시군구 number";
String bjdong = "Your 법정동 number";
String bun = "Your 번지수 number";
String ji = "Your 번지수 number";
String numOfRows = "1";
String serviceKey = "Your Service Key";
String queryUrl = "http://apis.data.go.kr/1611000/BldRgstService/getBrTitleInfo?sigunguCd="+sigungu+"&bjdongCd="+bjdong
+"&bun="+bun+"&ji="+ji+"&numOfRows="+numOfRows+"&ServiceKey="+serviceKey;
try {
URL url= new URL(queryUrl);//문자열로 된 요청 url을 URL 객체로 생성.
InputStream is= url.openStream(); //url위치로 입력스트림 연결
XmlPullParserFactory factory= XmlPullParserFactory.newInstance();
XmlPullParser xpp= factory.newPullParser();
xpp.setInput( new InputStreamReader(is, "UTF-8") ); //inputstream 으로부터 xml 입력받기
String tag;
xpp.next();
int eventType= xpp.getEventType();
while(eventType != XmlPullParser.END_DOCUMENT){
switch(eventType){
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
tag= xpp.getName();//태그 이름 얻어오기
if(tag.equals("item")) ;
else if(tag.equals("newPlatPlc")) {
buffer.append("주소 : ");
xpp.next();
buffer.append(xpp.getText());
buffer.append("\n\n");
}
else if(tag.equals("mainPurpsCdNm")) {
buffer.append("용도 : ");
xpp.next();
buffer.append(xpp.getText());
buffer.append("\n\n");
}
else if(tag.equals("grndFlrCnt")) {
buffer.append("지상층수 : ");
xpp.next();
buffer.append(xpp.getText() +"층");
buffer.append("\n\n");
}
else if(tag.equals("ugrndFlrCnt")) {
buffer.append("지하층수 : ");
xpp.next();
buffer.append(xpp.getText() +"층");
buffer.append("\n\n");
}
else if(tag.equals("strctCdNm")) {
buffer.append("구조 : ");
xpp.next();
buffer.append(xpp.getText());
buffer.append("\n\n");
}
else if(tag.equals("etcRoof")) {
buffer.append("지붕 : ");
xpp.next();
buffer.append(xpp.getText());
buffer.append("\n\n");
}
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.END_TAG:
tag= xpp.getName();
if(tag.equals("item")) buffer.append("\n");
break;
}
eventType= xpp.next();
}
} catch (Exception e) {
// TODO Auto-generated catch blocke.printStackTrace();
}
return buffer.toString();//StringBuffer 문자열 객체 반환
}
String sigungu = "Your 시군구 number";
String bjdong = "Your 법정동 number";
String bun = "Your 번지수 number";
String ji = "Your 번지수 number";
String numOfRows = "1"; // 하고 싶은 만큼 하기!
String serviceKey = "Your Service Key";
ex>
4128710600에서
시군구 / 법정동
41287 / 10600
이런식으로 되어있음 분리해서 적으면 됨!
다음과 같이 작성해주면 된다~
ex> if ~~동 111번지
bun = "0111" / ji = "0000"
ex> if ~~동 123-55번지
bun = "0123" / ji = "0055"
String getWeatherXmlData(){
StringBuffer buffer=new StringBuffer();
String serviceKey = "Your Service Key";
String numOfRows = "7";
String pageNo = "1";
SimpleDateFormat real_time = new SimpleDateFormat("yyyyMMdd");
Date time = new Date();
String base_date = real_time.format(time);
String base_time = "0230";
String nx = "Your x좌표";
String ny = "Your y좌표";
String queryUrl = "http://apis.data.go.kr/1360000/VilageFcstInfoService/getVilageFcst?serviceKey="+serviceKey+
"&numOfRows="+numOfRows+"&pageNo="+pageNo+"&base_date="+base_date+"&base_time="+base_time+"&nx="+nx+"&ny="+ny;
try {
URL url= new URL(queryUrl);//문자열로 된 요청 url을 URL 객체로 생성.
InputStream is= url.openStream(); //url위치로 입력스트림 연결
XmlPullParserFactory factory= XmlPullParserFactory.newInstance();
XmlPullParser xpp= factory.newPullParser();
xpp.setInput( new InputStreamReader(is, "UTF-8") ); //inputstream 으로부터 xml 입력받기
String tag;
int i =0;
xpp.next();
int eventType= xpp.getEventType();
while(eventType != XmlPullParser.END_DOCUMENT){
switch(eventType){
case XmlPullParser.START_DOCUMENT:
break;
case XmlPullParser.START_TAG:
tag= xpp.getName();//태그 이름 얻어오기
if(tag.equals("item")) ; // 첫번째 검색결과
else if(tag.equals("fcstValue")) {
i++;
if (i == 1) {
buffer.append("강수확률 : ");
xpp.next();
buffer.append(xpp.getText()+"%");
buffer.append("\n");
}
if (i == 2) {
buffer.append("강수형태 : ");
xpp.next();
if(xpp.getText().equals("0")){
buffer.append("없음");
buffer.append("\n");
}
else if(xpp.getText().equals("1")){
buffer.append("비");
buffer.append("\n");
}
else if(xpp.getText().equals("2")){
buffer.append("비+눈(진눈개비)");
buffer.append("\n");
}
else if(xpp.getText().equals("3")){
buffer.append("눈");
buffer.append("\n");
}
else if(xpp.getText().equals("4")){
buffer.append("소나기");
buffer.append("\n");
}
else if(xpp.getText().equals("5")){
buffer.append("빗방울");
buffer.append("\n");
}
else if(xpp.getText().equals("6")){
buffer.append("빗방울+눈날림");
buffer.append("\n");
}
else if(xpp.getText().equals("7")){
buffer.append("눈날림");
buffer.append("\n");
}
}
if(i==3){
buffer.append("6시간 강수량 : ");
xpp.next();
buffer.append(xpp.getText()+"mm");
buffer.append("\n");
}
if(i==4){
buffer.append("습도 : ");
xpp.next();
buffer.append(xpp.getText()+"%");
buffer.append("\n");
}
if(i==5){
buffer.append("6시간 신적설 : ");
xpp.next();
buffer.append(xpp.getText()+"cm");
// buffer.append("\n");
}
if(i==7){
buffer.append("3시간 기온 : ");
xpp.next();
buffer.append(xpp.getText()+"℃");
buffer.append("\n");
}
}
break;
case XmlPullParser.TEXT:
break;
case XmlPullParser.END_TAG:
tag= xpp.getName(); //태그 이름 얻어오기
if(tag.equals("item")) buffer.append("\n");
break;
}
eventType= xpp.next();
}
} catch (Exception e) {
// TODO Auto-generated catch blocke.printStackTrace();
}
return buffer.toString();a//StringBuffer 문자열 객체 반환
}
}
String serviceKey = "Your Service Key";
// 하고 싶은 만큼 하기!
String numOfRows = "7";
String pageNo = "1";
SimpleDateFormat real_time = new SimpleDateFormat("yyyyMMdd");
Date time = new Date();
String base_date = real_time.format(time);
String base_time = "0230";
String nx = "Your x좌표";
String ny = "Your y좌표";
SimpleDateFormat real_time = new SimpleDateFormat("yyyyMMdd");
Date time = new Date();
String base_date = real_time.format(time);
참고:
ⓐmd image 넣기 & resize
ⓑandroid app icon 만드는방법
bugloss-chestnut.tistory.com/entry/Android-App-Icon-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0
ⓒjupyter notebook chrome으로 실행하기
ⓓgit collaborators 추가 방법
bugloss-chestnut.tistory.com/entry/Github-How-to-add-Git-Collaborator
[Android] App Icon 적용하기 (0) | 2021.01.11 |
---|---|
[Android] Error - Compatible side by side NDK version was not found. (0) | 2020.09.10 |
[Android] .db파일 Android App에 넣기(JAVA) (0) | 2020.08.29 |
[Android] imageView 사진 회전 현상 해결하기 & 사진의 절대경로명 찾기(JAVA) (0) | 2020.08.22 |
[SplashActivity] How to Create a Splash Screen(Java) (0) | 2020.07.31 |