##今回やること
この記事は前回の勉強の続きです。
【前回】:【Unity(C#)】API通信勉強メモ①
前回できなかったPostの処理を学びます。
なんもわからんなりの解釈が山盛りなのでマサカリ、オールオッケーです。
##Flask
Flask(フラスク)は、プログラミング言語Python用の、軽量なウェブアプリケーションフレームワークである。標準で提供する機能を最小限に保っているため、自身を「マイクロフレームワーク」と呼んでいる。
Wikipediaより引用
今回はFlaskというPythonのウェブアプリケーションフレームワーク1を使用して
ローカルにアプリケーションサーバーを立て、Unity側からHTTPリクエスト(POST)を送る
までやってみようと思います。
おおよそ、参考リンクに沿って進めていきます。
【参考リンク】:Pythonと連携する方法
###Flaskのインストール
$pip install flask
##GETリクエスト
まずはFlaskで立てたローカルのサーバーにGETリクエストを送ってみます。
from flask import Flask
app = Flask(__name__)
@app.route("/", methods=['GET'])
def index():
return "HIKAKIN「ブンブン!ハローユーチューブ!」"
if __name__ == "__main__":
app.debug = True
app.run()
Unity側の処理は下記リンクから拝借しました。
【参考リンク】:UnityでHTTPに接続する
using System.Collections;
using UnityEngine.Networking;
using UnityEngine;
public class HTTPGet : MonoBehaviour {
//接続するURL
private const string URL = "http://localhost:5000/";
void Start()
{
//コルーチンを呼び出す
StartCoroutine("OnSend", URL);
}
IEnumerator OnSend(string url)
{
//指定したURLでGET
UnityWebRequest webRequest = UnityWebRequest.Get(url);
//URLに接続して結果が戻ってくるまで待機
yield return webRequest.SendWebRequest();
//エラーが出ていないかチェック
if (webRequest.isNetworkError)
{
//通信失敗
Debug.Log(webRequest.error);
}
else
{
//通信成功
Debug.Log("Get" + " : "+webRequest.downloadHandler.text);
}
}
}
成功しました。
①Python側(VSC)でデバッグを開始
②UnityでPlay
という順番です。
##POSTリクエスト
次はFlaskで立てたローカルのサーバーにPOSTリクエストを送ってみます。
@app.route("/", methods=['POST', 'GET'])
にPOSTを追加しただけです。
from flask import Flask
app = Flask(__name__)
@app.route("/", methods=['POST', 'GET'])
def index():
return "HIKAKIN「ブンブン!ハローユーチューブ!」"
if __name__ == "__main__":
app.debug = True
app.run()
実際にやってみて思ったこととしては結局POSTとGETは何が違うんだよってことです。
この疑問に関しては下記リンクを見て一旦深く考えるのを止めることにしました。
【引用元】:GETとPOSTの違いについて
本当はGETでやるべきこともPOSTでできてしまうのです。
やろうと思えばすべての処理をPOSTで作れてしまうのです。
この辺りは思想的な話もあるので、何とも言えない部分です。
##次回やること
Postの処理も上手くいったので次回はUnity側から入力した情報を登録 & ログインする機能を作っていきます。
とりあえずわかっていることとしては、
リクエストを送る際に情報を渡す方法として、
Unity側にWWW.Form
が用意されていることです。
//POSTする情報
WWWForm form = new WWWForm();
form.AddField("user_id", idInputField.text, Encoding.UTF8);
form.AddField("password",passInputField.text, Encoding.UTF8);
上記のようにUnity側でログイン画面に入力したIDやパスワードをサーバーに送れる。。。はずです。
やりました→【Unity(C#),Python】API通信勉強メモ③簡易版ログイン機能の実装