今回は、XMLRPCを使って、PythonからWordPressのDBにデータを登録する方法を紹介します。
前提
今回登録するDBについては、以下の記事で作成したDBです。
また、同じ操作をREST APIを使って行う方法は以下の記事で紹介しています。
WordPressの設定
WordPress側の設定はfunctions.php
に以下を記述します。
add_action('xmlrpc_api_list_methods', 'custom_xmlrpc_list_methods');
add_filter('xmlrpc_methods', 'custom_xmlrpc_methods');
function custom_xmlrpc_list_methods($methods) {
$methods['custom.add_financial_data'] = 'custom_add_financial_data';
return $methods;
}
function custom_xmlrpc_methods($methods) {
$methods['custom.add_financial_data'] = 'custom_add_financial_data';
return $methods;
}
function custom_add_financial_data($args) {
global $wpdb;
$table_name = $wpdb->prefix . 'financial_data';
// 引数をチェック
if (count($args) < 31) {
return new IXR_Error(400, 'Invalid number of arguments');
}
$data = array(
'docID' => $args[2],
'date' => $args[3],
'secCode' => $args[4],
'filerName' => $args[5],
'EndDate' => $args[6],
'sales' => $args[7],
'gross_profit_loss' => $args[8],
'operating_income_loss' => $args[9],
'ordinary_income_loss' => $args[10],
'net_income_loss' => $args[11],
'parent_net_income_loss' => $args[12],
'operating_cf' => $args[13],
'investing_cf' => $args[14],
'financing_cf' => $args[15],
'assets' => $args[16],
'liabilities' => $args[17],
'current_assets' => $args[18],
'current_liabilities' => $args[19],
'net_assets' => $args[20],
'shareholders_equity' => $args[21],
'retained_earnings' => $args[22],
'short_term_debt' => $args[23],
'long_term_debt' => $args[24],
'corporate_taxes' => $args[25],
'sg_and_a' => $args[26],
'depreciation' => $args[27],
'interest_income_dividends' => $args[28],
'interest_expenses' => $args[29],
'per' => $args[30],
'shares_outstanding' => $args[31],
'dividend_per_share' => $args[32]
);
$wpdb->insert(
$table_name,
$data,
array_fill(0, count($data), '%s') // 全て文字列として扱う
);
return 'Data added successfully.';
}
Pythonからの実行
Pythoから以下のようにして実行します。
XMLRPCはセキュリティ面であまり良い方法ではないようなので、REST APIを使うか、ローカルのみの利用がよいかもしれません。
from xmlrpc.client import ServerProxy, Fault
# WordPressサイトのXML-RPCエンドポイント
xmlrpc_url = "https://your-deployed-site.com/xmlrpc.php" # デプロイされたWordPressサイトのURLに置き換えてください
# 認証情報 (ユーザー名とパスワード)
username = "your_username" # WordPressのユーザー名に置き換えてください
password = "your_password" # WordPressのユーザーパスワードに置き換えてください
# XML-RPCサーバーへの接続
server = ServerProxy(xmlrpc_url)
# カスタムメソッドの呼び出し
method_name = 'custom.add_financial_data'
# 送信するデータ
data = [
'docID_value', 'date_value', 'secCode_value', 'filerName_value', 'EndDate_value',
1000.0, 2000.0, 3000.0, 4000.0, 5000.0, 6000.0, 7000.0, 8000.0, 9000.0,
10000.0, 11000.0, 12000.0, 13000.0, 14000.0, 15000.0, 16000.0, 17000.0,
18000.0, 19000.0, 20000.0, 21000.0, 22000.0, 23000.0, 24000.0, 25000.0
]
try:
# カスタムメソッドを呼び出す
result = server.custom.add_financial_data(username, password, *data)
print("カスタムメソッドの結果:", result)
except Fault as e:
print(f"XML-RPCエラーが発生しました: {e.faultString}")