🔌 株価データ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分析: 日次更新(開発中)
⚠️ 注意事項
- CORS対応: ブラウザから直接アクセス可能
- 認証不要: 現在は認証なしで利用可能
- レート制限: 将来的に実装予定
- データ遅延: リアルタイムではなく、遅延データです
🆘 サポート
APIに関する質問や問題は、GitHubのIssuesまでお願いします。
このAPIは研究・教育目的で提供されています。投資判断は自己責任でお願いします。