スポンサーリンク
スポンサーリンク

ColorfulboxでPythonを使ってWebAPIを作る(2)

前回の記事では、PythonAppを作成し、動作確認をするまでを紹介しました。

この記事では、Python環境を整備し、FlaskでAPIを作成します。

スポンサーリンク
スポンサーリンク

Python環境を整備する

Python本体は準備できましたが、パッケージソフトを整備するところから始めます。

1. Pythonがインストールされたディレクトリにアクセスする

アクセスするためのコマンドは、Python Appを作成したときの画面に表示されているので参考にしましょう。「source **** && cd ****」の部分です。(クリックすればコピーできます)

virtualenvでpythonがインストールされるためactivateをして、homeディレクトリ配下に「Application root」の名前のディレクトリが作られているので、そのディレクトリをカレントディレクトリにしましょう。

下の画像のように行の頭に(())で囲まれた場所に、環境名が表示されます。

「Python -V」コマンドで、指定したバージョンのPythonがインストールされていることも確認しましょう。

2. パッケージのインストール

今回は、Flaskを使ってMySQLにアクセスしたいので、Flaskとmysqlclientをインストールします。

pip install flask mysqlclient

pipコマンドのupgrade警告が出る場合は適宜更新しましょう。

WARNING: You are using pip version 21.3.1; however, version 22.3 is available.
You should consider upgrading via the '/home/xxx/virtualenv/api_test/3.9/bin/python3.9_bin -m pip install --upgrade pip' command.
((api/test:3.9)) [api_test]$ pip install --upgrade pip
Requirement already satisfied: pip in /home/xxx/virtualenv/api_test/3.9/lib/python3.9/site-packages (21.3.1)
Collecting pip
  Using cached pip-22.3-py3-none-any.whl (2.1 MB)
Installing collected packages: pip
  Attempting uninstall: pip
    Found existing installation: pip 21.3.1
    Uninstalling pip-21.3.1:
      Successfully uninstalled pip-21.3.1
Successfully installed pip-22.3
((api/test:3.9)) [api_test]$

Flaskを記述する

app.py(Application startup fileに設定したファイル)が呼ばれるので、編集していきます。

import os
import sys
from flask import Flask

sys.path.insert(0, os.path.dirname(__file__))

app = Flask(__name__)

@app.route('/')
def test():
    return 'api_test'

このようにapp.pyを書き換えて、Application URLにアクセスしてみましょう。指定した内容が表示されていればFlaskが動いています。

設定がかみ合っていない場合は、下の画像のように500エラーとなる場合があります。確認しましょう。

cPanelの設定というよりも、passenger_wsgi.pyからapp.pyが呼べているかを確認しましょう。
確認する点は、

①load_sourceで指定するファイル名があっているか。(例:app.pyにFlask設定がある)
②applicationで呼び出すオブジェクトがいるか。(例:app=Flaskで定義しているから、wsgi.app)

の2点をみればよいでしょう。

stderr.logファイルにエラーメッセージが追記されているのでよく読んで対応しましょう。

SQLからデータを取得するWEB APIを作る

MYSQLにユーザを追加する(任意)

任意ですが、すべてを操作することを想定しないのであれば、API用にアクセス権を制御するべきでしょう。

  1. cPanel上のデータベースから「MySQLデータベース」を選択します。

2. 新しいユーザーの追加にユーザー名とパスワードを入力して作成する。

3. データベースにユーザーを追加する

 4. ユーザー権限を設定する。(使用するものにチェックを入れる)

Pythonを作成する

app.pyに、DBに接続し、SELECT文を投げる処理を書いてみましょう。

import os
import sys

from datetime import datetime, date, timedelta
import json 

from flask import Flask, make_response
import MySQLdb

sys.path.insert(0, os.path.dirname(__file__))

app = Flask(__name__)

def json_serial(obj):
    if isinstance(obj, (datetime, date)):
        return obj.isoformat()
    elif isinstance(obj, timedelta):
        return str(obj)
    raise TypeError("Type %s not serializable" % type(obj))

@app.route('/')
def test():
    try:
        connection = MySQLdb.connect(
            host='127.0.0.1',
            user='ユーザーメイ',
            passwd='パスワード',
            db='DB名')
        print("MySQL Database connection successful")
    except Error as err:
        print(f"Error: '{err}'")
    
    with connection.cursor(MySQLdb.cursors.DictCursor) as cur:
        cur.execute("select * from game where 1 limit 1")
        data = cur.fetchall()
        
    connection.close()
    
    response = {}
    response["body"] = data
    response["status"] = 200
    
    return make_response(json.dumps(response, default=json_serial))

app.pyの編集が終わったら、cPanelからAppを再起動しましょう。

アクセスして、取得できていれば成功です。

まとめ

この記事では、Flask,mysqlclientを使用して、ColorfulboxでWebAPIを作成する方法を紹介しました。

検索エンジンで調べるとCGIを使う方法が出てきますが、CGIを使わなくても作成することが可能です。

作りたいものや環境によってベストは違いますが、簡単ですのでこちらの方が管理はしやすいと思います。

プログラミング
スポンサーリンク
スポンサーリンク
スポンサーリンク
びぼうろく

コメント

タイトルとURLをコピーしました