[DAY28] API(공공데이터 포털에 있는 API 다뤄보기)

NA YE SOM·2023년 8월 7일
0

API

목록 보기
1/2

모든 API가 있는건 아니지만 많은 API가 여기를 통해 있다.

회원가입 하기

회원가입을 해야 serviceKey를 발부받을 수 있음

오픈 api 메뉴들

-> 오픈 api -> 더보기 선택

1.제공되는 데이터의 형식
(오픈 api) open -> 무료
api = 조회 서비스(정보 요청하는것)

XML
JSON


-> 어떤 데이터 형식으로 제공이 되어있구나 신경쓰기!

JAVA코드를 통해서 API 요청을 하면 결과를 받아올때) XML 아니면 JSON
받아온 것을 화면으로 보내주면 Front 에서 Javascript 가 사용됨

웹화면을 구성할 수 있는 언어 : javascript
HTML 조작이 가능한 언어이다.
웹화면을 구성하지만 기본적인 프로그래밍 언어라서 객체라는 개념이 있음 : Object


-> JAVAscript : HTML의 구성요소를 객체화 시켜서 조작하는 것

XML(확장 마크업 언어)
XML의 데이터를 JAVAscript측으로 보내면 HTML다루듯이 파싱해서 결과를 만들어낼 수 있음
JSON(제이슨, 제이손) data형식 :
JSO : JAVA SCRIPT OBJECT (자바 스크립트 객체형식으로 아예 데이터를 받아오는 형식도 있음)

자바에서는 Front 웹화면조작하는언어인 JS에서 가공한다

자바측에서 API 요청하고 결과 받아올 것 : 받아온 결과가 정상적인지 확인? XML은 파일의 형태로 내려받음

-> XML파일의 형태로 받음 ) 흡사 비슷 : 날씨의 형태

JAVA측에서 XML을 파싱할 일은 없음(프론트로 보내서 JS가 파싱할 예정)
JSON 데이터에 어떤 데이터가 포함이 되어있는지 분석해줘야 함

API라고 하는것 : 서비스에 따라서 한번 요청하는게 아닐 수 도 있음


-> 한번만 요청해서 끝나는것이 아니라 "단계별"로 요청하는 것

  1. 첫요청 : 인증에 관련된 작업 수행(나 이런사람)
  2. 답 주기 : 그렇군요
  3. 나 이걸 원한다
  4. 여기있다

--> 한번에 여러개의 api가 사용될 수 있음
(중간중간에 분석해서 해당 데이터를 다시 보내주는 경우가 많음)
XML과 다르게 JSON데이터는 분석도 하는것이 좋음

JSON이 어떻게 생겼는지? 분석 - API

API 요청하는 코드 - Network 요청(지난시간 80~90%)


-> 어떻게 데이터를 받아올 건지에 대한 이야기
요청할때) 이거주라고 할때 : XML, JSON 이다 포함됨

(무엇을 받고 싶은지 결정해서 요청하기)

1.활용신청하기


-> 활용신청만 하면 알아서 자동승인되도록 해주는 API

-> 1000건(하루에 만건정도 요청할 수 있음)

2년동안 사용가능

? 다음에 나오는 값 : 파라미터=값

파라미터 : 서버로 보내는 데이터

servie key 발급받아서

return TYPE : 요청결과로 SML 받을건지 JSON 받을건지
한페이지에 100개의 결과를 받아오겠다
PAGENo 1page를 요청한다
sidoName 전국,서울,...

ver 이걸로 확인 불가


-> 5개의 주소가 다른데 이거는 대표주소임
(개별적인 아이들의 정보는 개별정보에서 찾기)

-> serviceKey(개인적으로 받은것)

encoding : 원본을 암호화시키는것
decoding : 암호화된 데이터를 원본데이터로 만드는것

(원본=decoding)
<원본>


-> API마다 Encoding 요구할수도 decoding요구할 수도 있다
(API 마다 다르다 => 알아서 해야한다)
(둘다 보내라는 것이 아니라 골라야 한다) -> Encoding 보낼지 decoding 보낼지 선택해야한다
(일반적으로는 encoding 많이 씀)

상세설명 -> 문서로 감

-> 요청주소, 파라미터를 보고 URL(주소 만들기) 연습하기!

주소만들기(API분석해서)



http://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getCtprvnRltmMesureDnsty


-> API마다 서비스키를 보낼때 인코딩인지 디코딩인지 확인을 해야함

요청파리미터 6개 가 꼭 보내야할 데이터(필수냐?아니냐?)

1(필수) 0(옵션:안보내도됨)

returnType이 옵션으로 되어있으서 xml요청할건지? json 요청할건지?

  • 필수 : 꼭 보내야하는건 서비스 name, 시도 name 뿐!!!


    -> 주소 만들준비 끝남

상세보기 뒤로 가서


-> decoding(원본) copy하기


-> double아님

어차피 string될꺼라 string으로 모두 바꿔도 됨



-> 이렇게 하면 x
여기 seriveKey값 디코딩되어있으니
인코딩처리하는 url encoder 해야함



-> 오류가 나는 이유는 UnsupportedEncodingException 처리가 안되어있으서
-> try-catch안되어있어서

--> 서비스key붙이는것 성공


-> 첫번째 파라미터 : ?
-> 두번째 파라미터 : & 연결


웹화면에서 입력받은걸 java String으로 입력받을 수 있음
(사용자한테 받아온것)

주소나왔으니까 url 객체선언하기


-> 선언만 함
(scope의 문제)


-> 주소가 string bulider로 만들어졌으니 to.string으로 만들기

지금은 url 만들어서 분석밖에 안됨

접속하는 객체를 만들어야 함

접속하는 방법 url.openConnection 호출하기

-> getResoponseCode가 200이면 정상접속 , 400번대면 주소를 잘못만들었을 가능성이 높음

-> 200대신 썼던 값 : HttpURLConnection 클래스의 HTTP_OK를 부르면 200을 불러주는 필드값(숫자 외우는거 믿지 X)

-> 아니면
접속이 안되었을 것임

접속코드를 던질려고
직접 던지는 거니까 new Runtimpexception 만들어서 던지면 됨



-> 문제가 있다면 예외를 발생할 수 있게끔 처리함


->UnsupportedEncodingException


->MalformedURLException(잘못된형식의 URL예외)


-> IOException

UnsupportedEncodingException는 IO에 잡아먹히니까


-> 같은줄에 넣으면 IOEXCEPTION 에 잡아먹혀서

-> 전부 txt데이터 (txt값을 받아오는것)

텍스트를 읽어들이는 연습 (20장) -> xml 데이터도 txt라서
BufferedReader 이용해서 읽어들임


-> 모든 데이터의

byte inputstream
문자스트림으로 바꾸는 input stream 필요
속도향상위해서 buffered


xml을 읽어들이기 위해서


txt데이터를 reader로 바꿔주는 작업

-> api 전체문서에서 한줄만 읽어서 성공하는지 확인하는것

한줄 -> 전체 읽어오는걸로 코드수정하기


-> 한줄씩 읽어들이는 line 완성


xml데이터는 파싱안함(읽어들이는 데이터가 어렵기때문에)


-> 반복문으로 읽어들여서 쌓아놓아서 보낼때 한번에 보내면 됨

write는 반드시 close해야 함


JSON 요청

JSON데이터가 어떻게 생겼는가?

JSON (JavaScript Object Notation 자바 스크립트 객체 표기법) : 자바스크립트 수업에서 공식적으로 살펴볼 예정

{
객체표현시 중괄호로 묶어서 표현함
}

{"name":"tom"} 속성:값, 속성:값,...
속성과 값의 조합
property:value, property:field


-> json데이터의 표준표기법


-> :콜론 다음에 공백 하나씩

value 가 문자열 "", number타입이면 그냥 작성


-> api에서 가장 많이 쓰이는 형태


-> json형식으로 답이 왔다면 이렇게 왔다는 뜻임

string데이터로 올 것임(이름, 나이, 키)
전체 string에서 tom,50,180.5를 빼는게 쉬울지?? 자바에서는 어렵다
(분석해줄 도구가 따로 있지 않으면 힘들다)

자바만으로는 원하는 값을 잘라내는 것이 어려움 -> spring의 method를 이용해서 분석하는것이 불가능에 가까움

json 라이브러리 :

-> 계산기 만들면서 jar로 만들수 있었음
(해당 jar파일 불러서 계산기 클래스의 모든 기능을 사용할 수 있었음)
-> 만들어져있는 라이브러리를 불러다 쓰는 일이 더 많을 것임,json라이브러리 만들어져있는걸 가져다쓰는것!(그중에 하나를 골라서 사용법 익히기)

api 사용을 안하더라도 json - 유명한 표준 데이터

JSON_Library 사용


jar(자르 파일)이 있어야 함



-> string(property)

whitespace(공백)은 지키지 않더라도 인식됨


-> property value 순서로 만들기!


-> 수많은 언어들의 json library가 링크로 만들어져있음


-> 이거 쓸예정임

-> 나중에는 jackson씀(현업 jackson쓸예정)

블로그들 내용이 다를 수 있음(라이브러리를 다루는 내용이 달라서)


-> 소스코드

-> README.md파일이 소개page만드는것

Maven central(메이븐 중앙저장소 : 3개월에 하나씩 올라오는 버전)

가장 최근 jar file 받고 싶으면 클릭





-> 자바랑 조금 다름


-> 객체, 배열 클래스 제공하고있음


-> 불러다가 사용가능

라이브러리 다운 -> 사용은

프로젝트가 대상임

(1)

(2)





json임에도 xml 처리도 가능


->이렇게 가리면 map같음(실제로 map 기반으로 만들어져있음)


-> 문자열로 변환해서 확인하기



-> collection에 들어간 것 1. arraylist 2. hashset
1,2번 가지고 만들어서 생성자에 전달하면 그 내용을 가지고 배열로 만들어주겠다.

map은 collection이 아니라 map interface따로 가지고 있음


put(): 저장하는 메소드


-> 대괄호 하나, 중괄호 하나, 중괄호 하나

DB에서 만들어진 자료를 저렇게 넘겨도 됨
자바스크립트의 객체 표기법이라서 저렇게 넘겨도 됨
(API 뿐만 아니라 굉장히 많이 쓰는 형태중하나임)

JASON DATA를 JAVASCRIPT가 제일 좋아함

ex03_


-> 만들어진 string값을 받아서 분석을 해보기


-> ex01() 다시실행
{"name":"tom","age":50,"height":180.5} 결과복사


-> ""들은 모두 \붙여줘야함
(복붙하는게 낫음)



collection은 '배열'쪽에 연결 map은 '객체'쪽에 연결

map이 기반이라 key라고 부름( 여기서는 property 공식적으로는)

value타입으로 object많이 썼음(int, string,double 데이터 저장가능)
map연결시 object로 해놓음(사용자가 어떤값을 하든 가능하기 위해서)



-> object꺼낼때는 그냥 쓰는법이 없고 -> (String) 다운캐스팅
이렇게도 가능(쓰는건 별로임)

<map이었을때 썼던 코드> JSON Object가 맵 기반으로 만들어져 있어서 동일한 코드를 지원하고있음



-> 시도는 한글로 보내서 인코딩해줘야 함

ex02() 실행 -> 복사
[{"heigth":180.5,"name":"tom","age":50},{"name":"jessica","age":60,"height":190.5}]

-> string을 json array로 바꾸기






-> 저장되어있는것이 2개 모두 객체라서
배열에 있는것 가져올때 getJSONObject로 !

array에 들어가는데 jsonObect 2개다

무엇이든 저장할 수 있게 구성되어있는 라이브러리라서 object로 잡아서 구성
JSON ARRAY저장할때 - 내부 OBJECT로 저장

꺼낼때 향상 FOR문으로 쓰려면 OBJECT으로 빼야함

ex05




-> collection 전달시 list 아니면 set

map을 javascript에 전달하면 json object로 처리


list -> json array
자동으로 변환해주는 library가 있음
(지금은 자동변환이 아님, jackson이 자동으로 변환시켜줄 것임)


-> 파일로 넘기면 json파일이 됨


-> 확장자가 json이라는 값을 가짐

-> 안쪽에 file내용에는 실제 json데이터가 포함된다



-> 화이트스페이스 꼭 안지켜도 됨


-> 문자열String으로 만들면 됨

sales만들때 [대괄호] : sales값 저장할때) List써서 하나만 있든 두개가 있든
-> [대괄호] list 쓰고
-> {중괄호} map 쓰기


-> jsonArray쓰려면 buildpath잡아야함


★★★실무에서 JSON 데이터를 똑같이 하면 됨

  • XML, JSON 많이 씀(2개파일)



-> 충전소가 어디에있는지

접속으로부터 데이터 받아오는 입력스트립
입력스트림을 이용한 실제 받아오기

등등

과정 살펴보고 안보고해보기

네이버 개발자 센터에서 제공하는 API

파싱(parsing) : 컴퓨터에서 컴파일러 또는 번역기가 원시 부호를 기계어로 번역하는 과정의 한 단계

네이버도 대부분 JSON으로 넘겨줌


-> 지도앱의 markup 표시 -> 지도 application이랑 같이 써서 지도앱으로 표시가능



-> 싹 다 encoding하기

string으로 먼저 받아오고 string을 JSONObject로 바꾸기


->줄바꿀 필요 x(줄바꾸든 아니든 가져온 데이터는 같음)


-> 중괄호로 시작 : json object임

key값 : rss 확인
-> 가지고 올때 ) obj.get("rss")

-> rss가지고 오는 타입 : json Object(중괄호로 되어있어서)

(1)(JSONObject)로 캐스팅하거나
(2) get 메소드를 호출(★★권장) -> rss에 포함된 channel로 이동가능


-> rss가져온 channel만


-> channel까면 또 json object들어있음
(중괄호로 시작)




-> item에 들어있는것 또 중괄호(jsonobject)


-> 더 양파까고 들어갈 것 x


-> author에 저장될 자료 : 기상청(더이상 분석할 자료x)



-> item에서 꺼내야 할건 description




fw값은 string으로 되어있음



-> 줄 바꾸고 싶을때마다
(줄바꿈 태그)
->


나오면 -> \n줄바꿈해라

1.신청을 해야 쓸수있음
2. API 주소 어떻게 보는지

★★★ 네이버 개발자 센터 - 08/11 시험(애플리케이션 설계)

profile
개발자 velog

0개의 댓글