🔌 株価データAPI

当サイトの株価データをプログラムから利用するためのAPIドキュメントです。

📊 利用可能なエンドポイント

1. 株価一覧API

GET https://stock-kabu3.com/api/stocks/index.json

全銘柄の株価データ、テクニカル指標、AI分析結果を取得できます。

レスポンス例:

[
  {
    "symbol": "7203.T",
    "name": "トヨタ自動車",
    "price": 2834.5,
    "change": 45.2,
    "changePercent": 1.62,
    "volume": 12450000,
    "market": "JP",
    "sector": "自動車",
    "indicators": {
      "rsi": 65.4,
      "ma5": 2812.3,
      "ma20": 2785.6
    },
    "prediction": {
      "direction": "up",
      "confidence": "developing"
    }
  }
]

2. ダッシュボードサマリーAPI

GET https://stock-kabu3.com/api/summary.json

市場概況、トップムーバー、ランキング情報を取得できます。

3. 国際指標API

GET https://stock-kabu3.com/api/major_indices.json

19の国際指標データを取得できます。

💻 実装サンプル(3言語)

Python実装例

import requests
import pandas as pd
import json

class StockAPIClient:
    """株価データAPI クライアント"""
    
    BASE_URL = "https://stock-kabu3.com/api"
    
    def get_all_stocks(self):
        """全銘柄データを取得"""
        url = f"{self.BASE_URL}/stocks/index.json"
        response = requests.get(url)
        
        if response.status_code == 200:
            return response.json()
        else:
            raise Exception(f"API Error: {response.status_code}")
    
    def get_summary(self):
        """ダッシュボードサマリーを取得"""
        url = f"{self.BASE_URL}/summary.json"
        response = requests.get(url)
        return response.json()
    
    def filter_by_market(self, market="JP"):
        """市場別でフィルタリング"""
        stocks = self.get_all_stocks()
        return [s for s in stocks if s.get("market") == market]
    
    def get_top_gainers(self, limit=10):
        """値上がり率上位を取得"""
        stocks = self.get_all_stocks()
        df = pd.DataFrame(stocks)
        df = df.sort_values("changePercent", ascending=False)
        return df.head(limit).to_dict(orient="records")

# 使用例
if __name__ == "__main__":
    client = StockAPIClient()
    
    # 日本株のみ取得
    jp_stocks = client.filter_by_market("JP")
    print(f"日本株: {len(jp_stocks)}銘柄")
    
    # 値上がり率トップ5
    top_gainers = client.get_top_gainers(5)
    for stock in top_gainers:
        print(f"{stock['symbol']}: {stock['changePercent']:.2f}%")

JavaScript (Node.js/Browser) 実装例

/**
 * 株価データAPI クライアント
 */
class StockAPIClient {
    constructor() {
        this.BASE_URL = 'https://stock-kabu3.com/api';
    }
    
    /**
     * 全銘柄データを取得
     */
    async getAllStocks() {
        try {
            const response = await fetch(`${this.BASE_URL}/stocks/index.json`);
            if (!response.ok) {
                throw new Error(`HTTP error! status: ${response.status}`);
            }
            return await response.json();
        } catch (error) {
            console.error('データ取得エラー:', error);
            return [];
        }
    }
    
    /**
     * ダッシュボードサマリーを取得
     */
    async getSummary() {
        const response = await fetch(`${this.BASE_URL}/summary.json`);
        return await response.json();
    }
    
    /**
     * 市場別フィルタリング
     */
    async filterByMarket(market = 'US') {
        const stocks = await this.getAllStocks();
        return stocks.filter(s => s.market === market);
    }
    
    /**
     * リアルタイム監視(ポーリング)
     */
    startMonitoring(symbol, interval = 60000) {
        console.log(`監視開始: ${symbol} (${interval/1000}秒間隔)`);
        
        setInterval(async () => {
            const stocks = await this.getAllStocks();
            const target = stocks.find(s => s.symbol === symbol);
            
            if (target) {
                console.log(`${new Date().toLocaleTimeString()} - ${symbol}: ¥${target.price} (${target.changePercent > 0 ? '+' : ''}${target.changePercent}%)`);
            }
        }, interval);
    }
}

// 使用例
const client = new StockAPIClient();

// 米国株を取得して表示
client.filterByMarket('US').then(usStocks => {
    console.log(`米国株: ${usStocks.length}銘柄`);
    
    // 上位5銘柄を表示
    usStocks
        .sort((a, b) => b.changePercent - a.changePercent)
        .slice(0, 5)
        .forEach(stock => {
            console.log(`${stock.symbol}: ${stock.changePercent.toFixed(2)}%`);
        });
});

// Apple株を60秒ごとに監視
// client.startMonitoring('AAPL', 60000);

Java実装例

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.*;
import java.util.stream.Collectors;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.io.BufferedReader;
import java.io.InputStreamReader;

/**
 * 株価データAPIクライアント
 */
public class StockAPIClient {
    private static final String BASE_URL = "https://stock-kabu3.com/api";
    private final Gson gson = new Gson();
    
    /**
     * 株価データモデル
     */
    public static class Stock {
        public String symbol;
        public String name;
        public double price;
        public double change;
        public double changePercent;
        public long volume;
        public String market;
        public String sector;
        public Map<String, Double> indicators;
        public Map<String, String> prediction;
        
        @Override
        public String toString() {
            return String.format("%s (%s): ¥%.2f (%.2f%%)", 
                name, symbol, price, changePercent);
        }
    }
    
    /**
     * 全銘柄データを取得
     */
    public List<Stock> getAllStocks() throws IOException {
        String urlString = BASE_URL + "/stocks/index.json";
        String jsonResponse = fetchData(urlString);
        
        return gson.fromJson(jsonResponse, 
            new TypeToken<List<Stock>>(){}.getType());
    }
    
    /**
     * 市場別フィルタリング
     */
    public List<Stock> filterByMarket(String market) throws IOException {
        List<Stock> allStocks = getAllStocks();
        return allStocks.stream()
            .filter(s -> market.equals(s.market))
            .collect(Collectors.toList());
    }
    
    /**
     * 値上がり率上位を取得
     */
    public List<Stock> getTopGainers(int limit) throws IOException {
        List<Stock> allStocks = getAllStocks();
        return allStocks.stream()
            .sorted((a, b) -> Double.compare(b.changePercent, a.changePercent))
            .limit(limit)
            .collect(Collectors.toList());
    }
    
    /**
     * セクター別集計
     */
    public Map<String, List<Stock>> groupBySector() throws IOException {
        List<Stock> allStocks = getAllStocks();
        return allStocks.stream()
            .collect(Collectors.groupingBy(s -> s.sector));
    }
    
    /**
     * HTTPリクエスト実行
     */
    private String fetchData(String urlString) throws IOException {
        URL url = new URL(urlString);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setRequestMethod("GET");
        conn.setRequestProperty("Accept", "application/json");
        
        if (conn.getResponseCode() != 200) {
            throw new IOException("Failed : HTTP error code : " 
                + conn.getResponseCode());
        }
        
        BufferedReader br = new BufferedReader(
            new InputStreamReader(conn.getInputStream(), "UTF-8"));
        
        StringBuilder response = new StringBuilder();
        String output;
        while ((output = br.readLine()) != null) {
            response.append(output);
        }
        
        conn.disconnect();
        return response.toString();
    }
    
    /**
     * メインメソッド(使用例)
     */
    public static void main(String[] args) {
        StockAPIClient client = new StockAPIClient();
        
        try {
            // 日本株を取得
            List<Stock> jpStocks = client.filterByMarket("JP");
            System.out.println("日本株: " + jpStocks.size() + "銘柄");
            
            // 値上がり率トップ5
            System.out.println("\n値上がり率トップ5:");
            List<Stock> topGainers = client.getTopGainers(5);
            for (Stock stock : topGainers) {
                System.out.println(stock);
            }
            
            // セクター別集計
            System.out.println("\nセクター別銘柄数:");
            Map<String, List<Stock>> bySector = client.groupBySector();
            bySector.forEach((sector, stocks) -> {
                System.out.println(sector + ": " + stocks.size() + "銘柄");
            });
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

📝 利用規約

✅ 許可される使用方法

  • 個人の分析・研究目的での利用
  • 教育目的での利用
  • 非商用アプリケーションでの利用

❌ 禁止事項

  • 過度なリクエスト(1秒間に10リクエスト以上)
  • データの再販売・商用利用
  • APIサーバーへの攻撃的なアクセス

🔄 更新頻度

  • 株価データ: 日次更新(市場クローズ後)
  • 国際指標: 日次更新
  • テクニカル指標: 日次更新
  • AI分析: 日次更新(開発中)

⚠️ 注意事項

  1. CORS対応: ブラウザから直接アクセス可能
  2. 認証不要: 現在は認証なしで利用可能
  3. レート制限: 将来的に実装予定
  4. データ遅延: リアルタイムではなく、遅延データです

🆘 サポート

APIに関する質問や問題は、GitHubのIssuesまでお願いします。


このAPIは研究・教育目的で提供されています。投資判断は自己責任でお願いします。