LoginSignup
1
0

Alpha Vantage API を使用してみる

Last updated at Posted at 2024-03-10

本業や研究でより良いアウトプットを出すために

いろいろなソースコードを作っていきたいと思います

優良なデータを集めて Microsoft Access などの
データベースに保存したい
そこでAPIの活用を考えました

上記のサイトを参考に
APIキーを作ってみます

image.png

get_stock_API.py

import requests

def get_stock_data(symbol):
    API_KEY = '〇〇'  # ここにAPIキーを入力
    BASE_URL = 'https://www.alphavantage.co/query'
    
    parameters = {
        "function": "TIME_SERIES_DAILY",
        "symbol": symbol,
        "apikey": API_KEY,
        "datatype": "json"
    }
    
    response = requests.get(BASE_URL, params=parameters)
    data = response.json()
    
    return data

コードスニペットは、Alpha VantageのAPIを使用して、特定の株式の日次時系列データをJSON形式で取得する方法を示しています。requestsライブラリを使用してAPIにリクエストを送り、paramsで指定したパラメータ(関数、シンボル、データ形式、APIキー)を含めます。API_KEY = : '〇〇'の部分には、あなたがAlpha Vantageから取得したAPIキーを入力してください。
このリクエストを送信すると、指定した株式のデータが応答として返され、print(response.json())でその内容を表示

main.py

import requests
from src import get_stock_API


if __name__ == "__main__":
    symbol = "〇〇"  # 株のシンボルを指定
    stock_data = get_stock_API.get_stock_data(symbol)
    print(stock_data)

main.py の実行で無事に
データを取り出せました

これらのデータをもとに
データベースの接続を考えてみます

環境変数を利用する

環境変数を設定:
環境変数を設定するには、以下のコマンドを実行します:

export MY_API_KEY="your_api_key_here"
import os

api_key = os.environ.get("STOCK_API_KEY")

ここでMY_API_KEYは任意の環境変数名で、your_api_key_hereは実際のAPIキーに置き換えてください。

#!/bin/bash
cd /path/to/your/directory
export MY_API_KEY="your_api_key_here"
python3 your_script.py

ファイルを保存して実行権限を付与します:

chmod +x run_my_script.sh

これでバッチファイルを実行できます:

bash run_my_script.sh

get_stock_API.py を変更

import os
import requests

def get_stock_data(symbol):
    API_KEY = os.environ.get("STOCK_API_KEY")
    #API_KEY = '〇〇'  # ここにAPIキーを入力
    BASE_URL = 'https://www.alphavantage.co/query'
    
    parameters = {
        "function": "TIME_SERIES_DAILY",
        "symbol": symbol,
        "apikey": API_KEY,
        "datatype": "json"
    }
    
    response = requests.get(BASE_URL, params=parameters)
    data = response.json()
    
    return data

def save_stock_data_to_csv(stock_data, filename="stock_data.csv"):
    # Extract relevant data from stock_data (adjust as needed)
    time_series = stock_data.get("Time Series (Daily)", {})
    rows = [(date, values["1. open"], values["4. close"]) for date, values in time_series.items()]

    # Write data to CSV file
    with open(filename, "w", newline="") as csvfile:
        writer = csv.writer(csvfile)
        writer.writerow(["Date", "Open Price", "Close Price"])  # Write header
        writer.writerows(rows)

    print(f"Stock data saved to {filename}")

main.py を変更

import requests
# multiprocessingをインポートすることで、プロセスの生成と管理が可能になります。
import multiprocessing
# get_stock_APIからget_stock_data関数とsave_stock_data_to_csv関数をインポートします。
# これらの関数は株価データの取得とCSVファイルへの保存を行います。
from src.get_stock_API import get_stock_data, save_stock_data_to_csv

# 株式シンボルを引数として、株価データを取得し、CSVファイルに保存する関数です。
def process_stock(symbol):
    # 指定されたシンボルの株価データを取得します。
    stock_data = get_stock_data(symbol)
    # 取得した株価データをCSVファイルに保存します。ファイル名はシンボル名に基づきます。
    save_stock_data_to_csv(stock_data, filename=f"{symbol}_stock_data.csv")

# このスクリプトが直接実行された場合にのみ以下のコードブロックが実行されます。
if __name__ == "__main__":
    # 処理する株式シンボルのリストです。
    symbols = ["IBM", "AAPL", "GOOG"]
    # 空のプロセスリストを作成します。このリストは後でプロセスを管理するために使用されます。
    processes = []

    # 株式シンボルごとにループを実行します。
    for symbol in symbols:
        # 各シンボルに対して、新しいプロセスを生成します。ターゲット関数は`process_stock`で、引数はシンボルです。
        p = multiprocessing.Process(target=process_stock, args=(symbol,))
        #p = multiprocessing.Process(target=process_stock_to_db, args=(symbol,))
        # 生成したプロセスをプロセスリストに追加します。
        processes.append(p)
        # プロセスを開始します。
        p.start()

    # 全てのプロセスが終了するまで待機します。
    for process in processes:
        process.join()

image.png

上記は wsl2 で実施しました
保存された csv データから

Microsoft Access などの
データベースに保存する バッチファイルの作成などを考えます

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0