前回まで数回にわたって、財務データを表示するアプリをWordPressで構築する方法を紹介しました。
今回は、関連して、そこで作成したデータベースにPythonからカスタムエンドポイントでデータを追加する方法を紹介します。
概要
PythonからWordPressにデータを登録する処理にはAPIが使用できます。
大きくAPIにはXMLRPCとREST APIがあります。
今回は、REST APIを使って、カスタムエンドポイントを作成し、データベースにデータを登録する方法を紹介します。
XMLRPCの場合は、以下の記事で紹介しています。
認証方法
REST APIにはいくつかの認証方法があります。
今回は、JWTに対応したコードを書きます。
認証については、詳しくは以下を確認して、トークンを取得してください。
WordPressでの設定
まずは、WordPress側でカスタムエンドポイントを作成する必要があります。
functions.php
に以下を追加します。
function register_financial_data_endpoint() {
register_rest_route('financial/v1', '/add/', array(
'methods' => 'POST',
'callback' => 'add_financial_data',
'permission_callback' => function () {
return current_user_can('manage_options'); // 管理者のみが利用可能
},
));
}
add_action('rest_api_init', 'register_financial_data_endpoint');
function add_financial_data(WP_REST_Request $request) {
global $wpdb;
$table_name = $wpdb->prefix . 'financial_data';
$data = $request->get_json_params();
$wpdb->insert(
$table_name,
array(
'docID' => $data['docID'],
'date' => $data['date'],
'secCode' => $data['secCode'],
'filerName' => $data['filerName'],
'EndDate' => $data['EndDate'],
'sales' => $data['sales'],
'gross_profit_loss' => $data['gross_profit_loss'],
'operating_income_loss' => $data['operating_income_loss'],
'ordinary_income_loss' => $data['ordinary_income_loss'],
'net_income_loss' => $data['net_income_loss'],
'parent_net_income_loss' => $data['parent_net_income_loss'],
'operating_cf' => $data['operating_cf'],
'investing_cf' => $data['investing_cf'],
'financing_cf' => $data['financing_cf'],
'assets' => $data['assets'],
'liabilities' => $data['liabilities'],
'current_assets' => $data['current_assets'],
'current_liabilities' => $data['current_liabilities'],
'net_assets' => $data['net_assets'],
'shareholders_equity' => $data['shareholders_equity'],
'retained_earnings' => $data['retained_earnings'],
'short_term_debt' => $data['short_term_debt'],
'long_term_debt' => $data['long_term_debt'],
'corporate_taxes' => $data['corporate_taxes'],
'sg_and_a' => $data['sg_and_a'],
'depreciation' => $data['depreciation'],
'interest_income_dividends' => $data['interest_income_dividends'],
'interest_expenses' => $data['interest_expenses'],
'per' => $data['per'],
'shares_outstanding' => $data['shares_outstanding'],
'dividend_per_share' => $data['dividend_per_share']
),
array(
'%s', '%s', '%s', '%s', '%s',
'%f', '%f', '%f', '%f', '%f',
'%f', '%f', '%f', '%f', '%f',
'%f', '%f', '%f', '%f', '%f',
'%f', '%f', '%f', '%f', '%f',
'%f', '%f', '%f', '%f'
)
);
return new WP_REST_Response('Data added successfully.', 200);
}
このコードは、カスタムエンドポイントを作成し、そのエンドポイントに渡されたデータをDBに登録するようになっています。
Pythonからカスタムエンドポイントを使用
作成したカスタムエンドポイントにPythonからアクセスします。
JWTのトークン取得が必要な場合はトークン取得します。(すでにJWTの設定は終わっている前提です。未設定の場合は、認証のところで紹介した記事を確認してください)
import requests
# トークンを取得
token_url = 'https://yourdomain.com/wp-json/jwt-auth/v1/token'
token_data = {
'username': 'user',
'password': 'pass'
}
token_response = requests.post(token_url, data=token_data)
token = token_response.json().get('token')
print(token)
token = 'JWTのトークン'
base_url = 'https://finance.yourdomain.com'
# データを追加する
api_url = f'{base_url}/wp-json/financial/v1/add/'
headers = {
'Authorization': f'Bearer {token}',
'Content-Type': 'application/json'
}
data = {
'docID': '123',
'date': '2024-08-30',
'secCode': 'XYZ',
'filerName': 'Company Name',
'EndDate': '2024-12-31',
'sales': 1000000.0,
'gross_profit_loss': 500000.0,
'operating_income_loss': 200000.0,
'ordinary_income_loss': 150000.0,
'net_income_loss': 100000.0,
'parent_net_income_loss': 80000.0,
'operating_cf': 120000.0,
'investing_cf': -30000.0,
'financing_cf': 20000.0,
'assets': 2000000.0,
'liabilities': 500000.0,
'current_assets': 300000.0,
'current_liabilities': 100000.0,
'net_assets': 1500000.0,
'shareholders_equity': 1200000.0,
'retained_earnings': 500000.0,
'short_term_debt': 50000.0,
'long_term_debt': 150000.0,
'corporate_taxes': 20000.0,
'sg_and_a': 70000.0,
'depreciation': 30000.0,
'interest_income_dividends': 10000.0,
'interest_expenses': 5000.0,
'per': 15.0,
'shares_outstanding': 100000.0,
'dividend_per_share': 2.0
}
response = requests.post(api_url, json=data, headers=headers)
if response.status_code == 200:
print('Data added successfully.')
else:
print(f'Error adding data: {response.json()}')
これで登録が確認されれば成功です。phpMyadminなどで確認してください。