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