파이썬 웹훅을 사용한 실시간 주가 변동 알림 서비스 개발 방법

주식 시장은 항상 변동성이 높고, 변동성을 신속하게 파악하는 것은 매우 중요합니다. 파이썬에서 웹훅(Webhook)을 활용하여 실시간으로 주가 변동에 대한 알림 서비스를 개발할 수 있습니다.

웹훅(Webhook)이란?

웹훅은 특정 이벤트가 발생할 때 웹 애플리케이션에 자동으로 알림을 보내는 기능입니다. 주식 시장에서는 주가가 변동할 때마다 이를 신속하게 감지하고 알려주는 서비스를 구현할 수 있습니다.

필요한 라이브러리 설치

웹훅을 사용하기 위해 다음과 같은 라이브러리를 설치해야 합니다.

pip install requests

실시간 주가 데이터 수집

주식 시장의 실시간 주가 데이터를 수집하기 위해 주식 API를 사용할 수 있습니다. 대표적인 주식 API인 Alpha Vantage API를 사용해보겠습니다. 먼저 해당 API에 가입하고 API 키를 발급받아야 합니다.

import requests

api_key = "YOUR_API_KEY"

def get_stock_price(symbol):
    url = f"https://www.alphavantage.co/query?function=GLOBAL_QUOTE&symbol={symbol}&apikey={api_key}"
    response = requests.get(url)
    data = response.json()
    return data['Global Quote']['05. price']

위의 코드는 주어진 주식 심볼에 대한 주가 정보를 가져오는 함수입니다. 함수 내부에서 Alpha Vantage API를 호출하여 데이터를 받아옵니다. API 키에 자신의 API 키를 넣어야 합니다.

웹훅으로 알림 보내기

주가 변동을 실시간으로 감지하여 알림을 보내기 위해 웹훅을 사용해보겠습니다. 예를 들어, 특정 주식의 가격이 5% 이상 상승하면 알림을 보내는 것으로 가정해봅시다.

import requests

webhook_url = "YOUR_WEBHOOK_URL"

def send_notification(message):
    data = {
        "text": message
    }
    response = requests.post(webhook_url, json=data)
    if response.status_code == 200:
        print("Notification sent successfully!")
    else:
        print("Failed to send notification.")

def monitor_stock_price(symbol):
    prev_price = get_stock_price(symbol)
    
    while True:
        current_price = get_stock_price(symbol)
        price_diff = abs(float(current_price) - float(prev_price))
        if (price_diff / float(prev_price)) >= 0.05:
            message = f"{symbol}의 가격이 5% 이상 상승했습니다!"
            send_notification(message)
        prev_price = current_price

위의 코드는 주식의 가격 변동을 실시간으로 감지하여 5% 이상 상승하면 알림을 보내는 함수입니다. Webhook URL 변수에 자신의 웹훅 URL을 넣어야 합니다.

실행하기

실시간 주가 변동을 감지하는 서비스를 실행하려면 다음과 같이 코드를 호출하면 됩니다.

monitor_stock_price("AAPL")

위의 코드는 Apple 주식(AAPL)을 모니터링하는 예시입니다. 원하는 주식 심볼을 넣어 실행하면 됩니다.

결론

이렇게 파이썬에서 웹훅을 사용하여 실시간 주가 변동 알림 서비스를 개발할 수 있습니다. Alpha Vantage API로 주가 정보를 수집하고 웹훅을 통해 알림을 보내는 방식을 활용하면 실시간으로 주가 변동을 파악할 수 있습니다.