LoginSignup
38
49

More than 5 years have passed since last update.

Python(Flask)で簡単なWebAPIを実装する

Posted at

Webアプリに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>の部分に取得したいスレッド名を当てはめてください。
ブラウザでアクセスした時に指定したスレッドに記事が存在していれば、以下のように情報が取得できます。

BBS - Google Chrome 2019_02_27 17_35_36.png

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/にブラウザでアクセスすると以下のようになります。

BBS - Google Chrome 2019_02_27 17_36_54.png

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"
    }
  ]
}
38
49
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
49