株式資金流入トレンドデータの API 取得方法:Python、Java 等多言語実装ガイド

株式市場における定量分析(クオンツ分析)を実践する上で、信頼性の高いデータソースの確保は首要課題です。データ収集手段としてウェブスクレイピングを選択することも可能ですが、ページ構造の変更に伴うメンテナンスコストや安定性の問題を考慮すると、専門的に提供された API 接口を利用する方が効率的です。以下では、沪深 A 股市场の資金流入トレンドデータを取得するための API 仕様と、主要なプログラミング言語を用いた実装例を解説します。

API 接口の仕様

データ取得用のエンドポイント URL は、対象の銘柄コードと認証ライセンスキーを含む構造になっています。基本 URL 形式は以下の通りです。

http://api.mairui.club/hsmy/zjlr/{stock_code}/{license_key}

ここで、{stock_code} には 6 桁の股票代码(例:000001)を、{license_key} には発行された認証キーをそれぞれ挿入します。この接口は HTTP GET リクエストに対して JSON 形式のデータを返します。

各言語による実装例

主要な 5 つのプログラミング言語における HTTP リクエスト実装コードを以下に示します。エラーハンドリングや非同期処理を含む、実用的な構造に修正しています。

1. Python

requests ライブラリを利用し、例外処理を伴う関数として実装します。

import requests
import json

def fetch_capital_flow_data(stock_code, license_key):
    base_url = "http://api.mairui.club/hsmy/zjlr"
    target_url = f"{base_url}/{stock_code}/{license_key}"
    
    try:
        resp = requests.get(target_url, timeout=10)
        resp.raise_for_status()
        return resp.json()
    except requests.exceptions.RequestException as e:
        print(f"Error occurred: {e}")
        return None

if __name__ == "__main__":
    data = fetch_capital_flow_data("000001", "YOUR_LICENSE_KEY")
    if data:
        print(json.dumps(data, indent=2))

2. JavaScript (Node.js)

axios を利用し、async/await 構文で非同期処理を記述します。

const axios = require('axios');

async function getStockFlowInfo(code, key) {
    const endpoint = `http://api.mairui.club/hsmy/zjlr/${code}/${key}`;
    try {
        const res = await axios.get(endpoint);
        return res.data;
    } catch (err) {
        console.error('Request failed:', err.message);
        return null;
    }
}

getStockFlowInfo('000001', 'YOUR_LICENSE_KEY').then(data => {
    if (data) console.log(data);
});

3. Java

Java 11 以降の HttpClient を使用し、メソッド化して実装します。

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;

public class StockDataClient {
    public static void main(String[] args) {
        String result = fetchData("000001", "YOUR_LICENSE_KEY");
        System.out.println(result);
    }

    private static String fetchData(String code, String license) {
        HttpClient client = HttpClient.newHttpClient();
        String url = String.format("http://api.mairui.club/hsmy/zjlr/%s/%s", code, license);
        HttpRequest request = HttpRequest.newBuilder()
            .uri(URI.create(url))
            .GET()
            .build();

        try {
            HttpResponse<String> res = client.send(request, HttpResponse.BodyHandlers.ofString());
            return res.body();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

4. C#

HttpClient を利用し、非同期メソッドとして構成します。

using System;
using System.Net.Http;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main()
    {
        string content = await RetrieveStockDataAsync("000001", "YOUR_LICENSE_KEY");
        Console.WriteLine(content);
    }

    private static async Task<string> RetrieveStockDataAsync(string code, string key)
    {
        using var client = new HttpClient();
        var url = $"http://api.mairui.club/hsmy/zjlr/{code}/{key}";
        try 
        {
            var response = await client.GetAsync(url);
            return await response.Content.ReadAsStringAsync();
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
            return string.Empty;
        }
    }
}

5. Ruby

Net::HTTP を使用し、処理をメソッド内にカプセル化します。

require 'net/http'
require 'json'
require 'uri'

def load_stock_flow(code, license)
  uri = URI("http://api.mairui.club/hsmy/zjlr/#{code}/#{license}")
  begin
    res = Net::HTTP.get_response(uri)
    return JSON.parse(res.body) if res.is_a?(Net::HTTPSuccess)
  rescue => e
    puts "Failed: #{e.message}"
  end
  nil
end

result = load_stock_flow("000001", "YOUR_LICENSE_KEY")
puts result.inspect if result

レスポンスデータ構造

API は JSON 配列を返却します。各オブジェクトが特定の取引日のデータに対応します。

[
  {
    "t": "2010-03-12",
    "zdf": -3.13,
    "hsl": 0.97,
    "jlr": -104026407.66,
    "jlrl": -15.86,
    "zljlr": -79996217.26,
    "zljlrl": -12.2,
    "hyjlr": 0,
    "hyjlrl": 0.0
  }
]

返却されるフィールドの意味は以下の通りです。

フィールド 意味 単位/形式
t 取引日 yyyy-MM-dd
zdf 株価変動率 %
hsl 换手率(ターンオーバー率) %
jlr 純流入額 元
jlrl 純流入率 %
zljlr 主力純流入額 元
zljlrl 主力純流入率 %
hyjlr 業界純流入額 元
hyjlrl 業界純流入率 %

タグ: Python Java csharp Ruby nodejs

10月15日 15:27 投稿