RestFul API

HTTP ์š”์ฒญ์„ ์œ„ํ•œ ๋ณต์žกํ•œ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜๋Š” requests ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

567Rabbit 2024. 5. 30. 11:31

requests ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ž€?

 

 

requests ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ์œ„ํ•ด ๋ณต์žกํ•œ ์ž‘์—…์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ

 

 

์‚ฌ์šฉ์ž๊ฐ€ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ณผ์ •์„ ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

 

 

 

vscode cmd์ฐฝ์—์„œ ์ž…๋ ฅํ•˜์—ฌ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

pip install requests

 

 

 

 

์žฅ์ 

 

(1) ์„ธ์…˜ ์ง€์›

- requests.Session ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์š”์ฒญ ๊ฐ„์— ์ง€์†์ ์ธ ์„ธ์…˜์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์ฟ ํ‚ค์™€ ์ธ์ฆ ์ •๋ณด๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

(2) ์ฟ ํ‚ค, ํ—ค๋”, ํŒŒ๋ผ๋ฏธํ„ฐ ์ง€์›

- ์š”์ฒญ ์‹œ ์ฟ ํ‚ค, ํ—ค๋”, URL ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ์„ ์‰ฝ๊ฒŒ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

(3) ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ๋‹ค์šด๋กœ๋“œ

- ํŒŒ์ผ ์—…๋กœ๋“œ ๋ฐ ๋‹ค์šด๋กœ๋“œ ์ž‘์—…์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

(4) JSON ์‘๋‹ต ์ฒ˜๋ฆฌ

- JSON ํ˜•์‹์˜ ์‘๋‹ต์„ ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

 

 

 

from flask import request
from flask_restful import Resource

# API ์š”์ฒญ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
import requests

# ๋‚ด๊ฐ€ ๋งŒ๋“  ๋ณด์•ˆ ๊ฐ’ class
from config import Config

class NewSearchResource(Resource) :
    def get(self) :
		
        # params ์— ์ฟผ๋ฆฌ ๊ฐ’์ด ์—†์œผ๋ฉด ๋ฆฌํ„ด
        if 'query' not in request.args :
            return {"result":"fail", "error":"๊ฒ€์ƒ‰์–ด๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค."}, 400
        
        # params์— ์žˆ๋˜ ๊ฐ’ ๋ณ€์ˆ˜๋กœ ์ €์žฅ (๋”•์…”๋„ˆ๋ฆฌ์—ฌ์„œ .get() ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.)
        keyword = request.args.get('query')

        # ๋„ค์ด๋ฒ„ API ํ˜ธ์ถœํ•œ๋‹ค.
        # API ํ˜ธ์ถœํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ requests
        
        # ํŒŒ์ด์ฌ ์ฝ”๋“œ๋กœ GET, POST, PUT, DELETE API๋ฅผ
        # ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ requests ๋‹ค.
		
        # openAPI ์—์„œ ์ œ๊ณตํ•˜๋Š” url, params
        # params ์•ˆ์—๋Š” ๋‚ด๊ฐ€ ์„ค์ •ํ•œ ๊ฐ’ + ์˜ต์…˜๋“ค
        # openAPI ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•„์ด๋”” ๊ฐ’ ๊ณผ ์‹œํฌ๋ฆฟ ๊ฐ’ ์ž…๋ ฅ
        url = 'https://openapi.naver.com/v1/search/news.json'
        params = {'query' : keyword,
                  'display' : 30,
                  'sort' : 'date'}
        headers = {'X-Naver-Client-Id' : Config.X_NAVER_CLIENT_ID,
                   'X-Naver-Client-Secret' : Config.X_NAVER_CLIENT_SECRET}
		
        # ๊ฐ’์„ requests์˜ get()ํ•จ์ˆ˜ ์‚ฌ์šฉํ•ด์„œ ๋ฐ›์•„์ฃผ๊ธฐ
        response = requests.get( url, params= params, headers= headers)
        
        # ์‘๋‹ต์œผ๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ JSON์œผ๋กœ ๋ฐ›๋Š”๋‹ค.
        # ํฌ์ŠคํŠธ๋งจ ์‘๋‹ต ๋ฐ”๋””์— JSON์œผ๋กœ ๋˜์–ด์žˆ์–ด์„œ ๊ฐ€๋Šฅํ•˜๋‹ค.
        response = response.json()
        print( response )

        return {"result" : "success", 
                "items" : response['items'], 
                "count" : len(response['items'])}