見出し画像

MT4 自動売買EA最強の口座認証を構築その5

この記事の続きになります

サーバー側の認証プログラムを一気に作成します。前回同様にTeraTermでログインしておいてください。認証プログラムのファイル名はmain.pyにしましょう。

nano main.py

プログラムに使用するモジュールを宣言します。

import gspread
from oauth2client.service_account import ServiceAccountCredentials
import pandas as pd
from gspread_dataframe import get_as_dataframe, set_with_dataframe
from fastapi import FastAPI
import hashlib

口座リストにアクセスするためのパラメータなどを設定します。service_account.jsonは、その3で作成したものをそのまま利用します。

# Googleスプレッドシートの設定
SS_ID = 'スプレッドシートID'
SHEET = "シート1"
scopes = [
    'https://www.googleapis.com/auth/spreadsheets',
    'https://www.googleapis.com/auth/drive'
]
credentials = ServiceAccountCredentials.from_json_keyfile_name(
    './service_account.json',
    scopes=scopes
)
gc = gspread.authorize(credentials)
workbook = gc.open_by_key(SS_ID)
worksheet = workbook.worksheet(SHEET)

Googleスプレッドシートのリストを取得して口座番号があるかないかを処理するget_data関数を作ります。口座番号があればTrue、無ければfalseを返します。

def get_data(account):
    df = get_as_dataframe(worksheet).dropna(how='all').query(f'口座番号 == {account}')
    return True if len(df) == 1 else False

今回の暗号化のための鍵を変数として設定します。この鍵は、後ほど作成するMT4側のプログラムと合わせる必要があります。

key = 'AAA'

FastAPIのプログラムです。account(口座番号)を受けとってget_data関数にわたし、Trueであれば口座番号とkeyを文字列としてハッシュ化しレスポンスとして返します。口座番号なければErrorの文字列を返します。

app = FastAPI()

@app.get("/")
async def root(account: str = ""):
    if get_data(account):
        message = f'{account}{key}'
        hash_sha256 = hashlib.sha256(message.encode())
        return hash_sha256.hexdigest().upper()
    else:
        return "Error"

サーバー側のプログラムは以上です。FastAPIを起動し、ブラウザから、下記URLにアクセスしてみてください。

# FastAPIの起動
uvicorn main:app --reload --host 0.0.0.0
# http://***.**.***.***は、ご自分のサーバーURL
http://***.**.***.***:8000/?account=123456789

Googleスプレッドシートに口座番号があれば、口座番号+keyがハッシュ化された暗号がレスポンスとして返ってくると思います。

口座番号がなければ、Errorの文字列が返ります

サーバー側のプログラムは以上です。その6はMT4側のプログラムを作成したら完成ですね。

ここまで読んでもらえた方、もしよろしければスキください(^^♪
プログラムでご質問ある方は、X(twitter)にて遠慮なくご連絡ください

以下、サーバー側の認証プログラムソースコードです。

ここから先は

1,048字

¥ 500

期間限定 PayPay支払いすると抽選でお得に!

この記事が参加している募集

#スキしてみて

525,791件

この記事が気に入ったらサポートをしてみませんか?