Python (Flask)으로 간단한 WebAPI 구현

웹 앱에 API 기능 추가



이번에 작성하는 API는 작성한 게시판 사이트에 축적되어 있는 데이터를 프로그램으로 자동 추출하는 것을 즐길 수 있도록 구현합니다.

다음 사이트를 참고로 했습니다.
Python (Flask)을 사용하여 기계 학습 API 만들기

이 절에서는 GET 및 POST 메소드로 요청을 보내고 수신된 데이터를 JSON 형식으로 출력하는 방법을 설명합니다.
다음 사이트에 소스 코드가 있습니다.
Source Code

GET 방법


@app.route("/api_get/<key>", methods=["GET"])
def api_get(key):
    data = {key: []}
    thread_api_get = Thread.query.filter_by(threadname=key).first()
    articles = Article.query.filter_by(thread_id=thread_api_get.id).all()
    for article in articles:
        r = {"name": article.name, "article": article.article}
        data[key].append(r)
    return jsonify(data)
jsonify(data) 표시되는 데이터가 일본어라고 문자화되어 버리므로, 이하의 설정을 추가해 주세요.
app.config['JSON_AS_ASCII'] = False
http://127.0.0.1:5000/api_get/<key><key> 의 부분에 취득하고 싶은 thread명을 맞추어 주세요.
브라우저로 액세스했을 때에 지정한 thread에 기사가 존재하고 있으면, 이하와 같이 정보를 취득할 수 있습니다.



POST 메소드


@app.route("/api_post", methods=["POST"])
def api_post():
    print(request.data)
    api_data_post = request.data.decode()
    data = {api_data_post: []}
    print(api_data_post)
    thread_api_get = Thread.query.filter_by(threadname=api_data_post).first()
    articles = Article.query.filter_by(thread_id=thread_api_get.id).all()
    for article in articles:
        r = {"name": article.name, "article": article.article}
        data[api_data_post].append(r)
    return jsonify(data)
http://127.0.0.1:5000/api_post/ 에 브라우저로 액세스하면 다음과 같이 됩니다.



POST 메소드로만 액세스 할 수 있도록하고 있기 때문에 잘 표시되지 않습니다.
여기에서는 다음 스크립트를 사용하여 POST 메서드로 액세스합니다.
import requests

url = 'http://127.0.0.1:5000/api_post'
r = requests.post(url, data="hogehoge".encode('utf-8'))
print(r.text)

POST에서 전송되는 데이터는 바이너리이므로 복호화 처리를 추가해야 합니다.
request.data.decode()

취득 결과는 다음과 같습니다.
{
  "hogehoge": [
    {
      "article": "ああああああああ",
      "name": "hoge1"
    },
    {
      "article": "いいいい いいい",
      "name": "hoge2"
    },
    {
      "article": "うう うう うう",
      "name": "hoge3"
    }
  ]
}

좋은 웹페이지 즐겨찾기