파이썬에서 API를 활용하는 방법 기초

1. 클라이언트와 서버

 

정보를 원하는 클라이언트가 서버에 요청(request)을 보내면

 

서버는 그 요청을 받아서 정보를 주기 위해 응답(response)을 한다

 

 

클라이언트는 정보를 이용하는 사용자

 

서버와 연결된 모든 단말기들, 혹은 브라우저 등등

 

서버는 네트워크를 통해 서비스 및 데이터를 제공하는 하나의 컴퓨터

 

요청을 받으면 서버는 DB에서 데이터를 찾아와서 클라이언트에 네트워크를 통해 데이터를 보낸다

 

서버는 항상 클라이언트의 요청에 응답할 준비가 되어 있어야함

 

 

2. JSON(JavaScript Object Notation)

 

데이터를 주고받기 위한 표기법

 

파이썬의 딕셔너리처럼 생겼음

 

파이썬의 딕셔너리와 리스트 구조로 쉽게 변환가능

 

서버 API의 응답으로 데이터를 줄때 JSON 형태를 많이 이용함

 

json 예시

 

위와 같이 실제로 {key:value} 같은 딕셔너리 형태로 생김

 

3. API

 

Application Programming Interface

 

프로토콜 집합을 사용하여 두 소프트웨어가 통신할 수 있게 하는 메커니즘

 

휴대폰의 날씨 어플리케이션은 기상청의 소프트웨어에 요청을 하고, 기상청의 소프트웨어는 그 요청을 받아 데이터베이스에 존재하는 일일 기상 데이터를 보내서 휴대폰의 날씨 어플리케이션이 일일 날씨를 보여준다

 

4. requests

 

파이썬에서 서버에 요청을 할 수 있는 라이브러리

 

외장 라이브러리라 설치해야 사용가능

 

pip install (모듈이름)으로 외장 모듈을 설치할 수 있다

 

 

 

requests.get(<url>)을 하면 <url>에 정보를 달라는 요청을 보내고 그에 대한 응답 데이터를 받아온다

 

requests.get(<url>).json()을 하면 받아온 응답 데이터를 json으로 저장함

 

 

5. requests 예제1

 

이름을 보내 나이를 예측하는 API

 

 

API들이 자기가 만든 것을 다른 사람들이 어떻게 사용하는지 알리가 없기 때문에

 

대부분 어떻게 사용해야하는지 document들을 제공함

 

위의 경우 검정색 동그라미 부분에 활용 방법이 나와있다

 

 

똑같이 따라해보면 위와같이 웹이 보기 쉽게  json처럼 보여준다

 

사용자인 내가 브라우저 주소창에 'https://api.agify.io/?name=yun'라고 입력을 하면 브라우저가 이에 대한 정보를 달라고 서버에 요청을 함

 

그러면 해당 서버에서 그에 대한 응답으로 위 페이지 처럼 {"name":"yun",...}처럼 보여주는것

 

근데 실제로는 서버는 하나의 컴퓨터로 0,1로 이루어진 사람이 이해할 수 없는 이진데이터를 보내주고

 

브라우저 웹이 사람이 보기 쉽게 그러한 이진데이터를 가공해서 보여준다고함

 

 

위와 같이 이해할 수 없는 데이터를 보내고 브라우저가 가공해서 사람이 이해할 수 있게 보여주나봐

 

import requests

url = 'https://api.agify.io/?name=yun' #요청을 보낼 주소 (어떤 서버에 요청을 보낼건지)

#이름이 yun인 사람의 나이를 알려달라고 서버에 요청함
#?는 서버에 추가적인 정보 전달이 있을 때 ?기호를 사용해서 그 값들을 나열하는 파라미터


#파이썬의 딕셔너리처럼 사용할 수 있는 json()
print(requests.get(url).json())

#서버에 요청을 보내고 서버의 응답 데이터를 변수에 저장함
response = requests.get(url).json()

#이름만 출력하고싶을때

print(response.get('name'))

#나이를 출력하고 싶을 때
print(response.get('age'))
#json은 딕셔너리처럼 response[key]형태로 key에 대응하는 value를 가져온다

print('===========================')

import requests

url = 'https://api.agify.io/?name=yun'

response = requests.get(url).json()

name = response.get('name')
age = response.get('age')

print(f"{name}의 나이는 {age}쨩")

 

import requests 로 모듈을 부르고

 

url =  'https://api.agify.io/?name=yun'으로 요청을 보낼 url 저장

 

response = requests.get(url).json()를 하면 응답을 json으로 저장함

 

아마 response는 {'name': 'yun', 'age': 46, 'count': 2243} 이렇게 생겼을거

 

이거는 dict기 때문에 'name'을 부르고 싶으면 response.get('name')

 

dict에서 get함수는 dict.get(key,value)는 dict[key]값을 가져오는데 dict에 해당 key가 존재하지 않으면 value를 반환

 

 

뒤에 f-string을 사용했는데

 

f"{name}의 나이는 {age}살"이라하면 name과 age에 저장된 값을 저 문자열에 그대로 넣어서

 

"yun의 나이는 46살" 이렇게 출력함

 

--------------------------------------------------------------------------------------------------------------------------------------------------

 

6. requests 예제2

 

로또번호가 저장된 서버에서 원하는 회차의 로또번호를 가져오는 프로그램

 

 

'https://dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=1021'

 

위와 같은 url 들어가보면 1021회 로또번호를 제공하는데

 

drwtNO1,2,3,4,5,6에 6개의 로또번호가 저장되어 있다

 

import requests

url = 'https://dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=1021'

response = requests.get(url).json()

print(response)

print('=========================')

print(response.get('drwtNo1'))
print(response.get('drwtNo2'))
print(response.get('drwtNo3'))
print(response.get('drwtNo4'))
print(response.get('drwtNo5'))
print(response.get('drwtNo6'))

print('==========')

for i in range(1,7): #1부터 6까지 반복

    key = f"drwtNo{i}" #fstring, {i}에 i값이 대신 들어가서 문자열 형성

    print(response.get(key))

 

 

6개를 반복적으로 쓰기보다는 f-string과 반복문을 이용해서 쓰는 것이 보기좋다

 

 

7. 참고

 

https://velog.io/@funnysunny08/%EC%84%9C%EB%B2%84%EC%99%80-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8

 

서버와 클라이언트

서비스를 사용하는 사용자를 의미하는 말로,서버와 연결된 모든 단말기와 단말기에서 이용하는 , 웹에 접근하는 소프트웨어를 지칭한다. 주로 브라우저를 말하며, 사용자의 입력을 주로 처리하

velog.io

 

TAGS.

Comments