코딩테스트 API 문제 연습 (HackerRank)

sckwon770·2023년 10월 19일

코딩테스트

목록 보기
2/2

필요 문법

파이썬은 신이다

import requests, json
from pprint import pprint

winner_url = f"https://jsonmock.hackerrank.com/api/football_competitions?name={competition}&year={year}"
#response = requests.get(winner_url).json()
winner_team = requests.get(winner_url).json()['data'][0]['winner']
#pprint(response)

match_url = f"https://jsonmock.hackerrank.com/api/football_matches?competition={competition}&year={year}"
total_pages = int(requests.get(match_url).json()['total_pages'])

request

fstring

  • f"https://url?param={param_val}" : 손쉽게 url에 파라미터 넣자

requests.get(url, params)

  • request.get(url) : response code 반환
  • request.get(url).json : 역직렬화해야 데이터가 제대로 출력됨
  • winner_team = requests.get(winner_url).json()['data'][0]['winner'] : 반환값은 딕셔너리 혹은 리스트 형태이므로, 복잡하게 변수에 할당해가며 탐색하지 말고 바로 인덱싱
  • 필요하다면 딕셔너리 형태로 파라미터 첨부
paramDict = {
    "a" : "aa",
    "b" : 123
}

response = requests.get(url, params=paramDict)

requests.post(url, data)

data = {
    "a" : "aa",
    "b" : 123
}

response = requests.post(url, data=data)

headers

headers = {'User-Agent': 'MyUserAgent/1.0'}
response = requests.get(url, headers=headers)

json

대게 requests.get(url).json() 선에서 해결되기는 하지만, 조바심에 정리해 본다

직렬화 dumps / 역직렬화 loads

>>> import json
>>> d = {"name":"홍길동", "birth":"0525", "age": 30}
>>> json_data = json.dumps(d)
>>> json_data
'{"name": "\\ud64d\\uae38\\ub3d9", "birth": "0525", "age": 30}'

>>> json.loads(json_data)
{'name': '홍길동', 'birth': '0525', 'age': 30}

pprint

적극 활용하자

winner_url = f"https://jsonmock.hackerrank.com/api/football_competitions?name={competition}&year={year}"
response = requests.get(winner_url).json()
pprint(response)


풀이 팁

pprint를 적극 활용해, 설명보다 직접 눈으로 확인해보자

pagination이 요청을 반복하게 하지만, page 파라미터를 빼도 디폴트로 1번 페이지만 조회된다

문제의 조건에서 답을 찾자

알고리즘 문제와 달리 비즈니스 요구사항에 맞게 HTTP 요청을 다루고 API 데이터를 가공하는 것에 핵심이 있는 것으로 보인다. 따라서 문제에 해답과 함정이 있다면, 설명에 있다. 다음을 주의해서 보자

  • Notice ~
  • 굵은 글씨체(Bold)
  • Constraints

2개의 api를 나란히 제공하고, 결국 1번 api에서 단서를 찾아 2번 api에서 답을 구한다

profile
늘 학습하고 적용하고 개선하는 개발자

0개의 댓글