WordPressのXMLPRCでPythonからデータを登録する方法

ブログ

今回は、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}")
タイトルとURLをコピーしました