Stock News Monitoring Project
주가 변동 확인하기
1️⃣ endpoint, stock, company name, API Key 생성 후 상수로 저장
2️⃣ import requests 모듈, requests메소드 이용해서 파라미터, response 생성
3️⃣어제 종가 구하기
- 날짜 딕셔너리는 계속 변경하기 때문에 리스트 컴프리헨션을 사용해 접근할 수 있도록 변경
💡items()메소드는 딕셔너리에서 키와 값을 튜플 형태로 반환해줌
⇨ [("a", 1), ("b", 2), ("c", 3)]
4️⃣ 그저께 종가 구하기
5️⃣ 어제와 그제 종가 비교
**Python abs() Function**
숫자의 절대값을 리턴하는 함수
숫자 앞에 있는 모든 음수 표시를 제거
6️⃣ 종가 차이 비율 구하기
7️⃣ 차이가 4%이상이면 print(“Get News”)
if diff_percent > 4:
print("Get News")
뉴스 기사 가져오기
1️⃣ news API Key 상수로 저장, requests메소드 이용해서 파라미터, response 생성
2️⃣ 키를 넣어서 관련 키워드의 모든 기사 잡기
3️⃣slice()를 이용해서 처음 3개의 기사만 얻기
SMS 메시지 보내기
1️⃣ 컴프리헨션으로 첫 기사 3개의 제목과 요약문으로 된 리스트 만들기
2️⃣ twilio를 통해 메시지 전송
- import, sid, token 저장
- Client클래스로부터 내 클라이언트 생성해서 설정
- 반복문으로 세 개의 메시지 전송
3️⃣ 주식이 올랐는지 내렸는지 보여주기
Final Code
import requests
from twilio.rest import Client
STOCK_NAME = "TSLA"
COMPANY_NAME = "Tesla Inc"
STOCK_ENDPOINT = "https://www.alphavantage.co/query"
NEWS_ENDPOINT = "https://newsapi.org/v2/everything"
STOCK_API_KEY = ""
NEWS_API_KEY = ""
TWILIO_SID = ""
TWILIO_AUTH_TOKEN = ""
stock_params = {
"function": "TIME_SERIES_DAILY",
"symbol": STOCK_NAME,
"apikey": STOCK_API_KEY,
}
response = requests.get(STOCK_ENDPOINT, params=stock_params)
data = response.json()["Time Series (Daily)"]
data_list = [value for (key, value) in data.items()]
yesterday_data = data_list[0]
yesterday_closing_price = yesterday_data["4. close"]
print(yesterday_closing_price)
day_before_yesterday_data = data_list[1]
day_before_yesterday_closing_price = day_before_yesterday_data["4. close"]
print(day_before_yesterday_closing_price)
difference = float(yesterday_closing_price) - float(day_before_yesterday_closing_price)
up_down = None
if difference > 0:
up_down = "📈"
else:
up_down = "📉"
diff_percent = round((difference / float(yesterday_closing_price)) * 100, 2)
print(diff_percent)
if abs(diff_percent) > 1:
news_params = {
"apiKey": NEWS_API_KEY,
"qInTitle": COMPANY_NAME,
}
news_response = requests.get(NEWS_ENDPOINT, params=news_params)
articles = news_response.json()["articles"]
three_articles = articles[:3]
print(three_articles)
formatted_articles = [f"{STOCK_NAME}: {up_down}{diff_percent}%\nHeadline: {article['title']}. \nBrief: {article['description']}"
for article in three_articles]
client = Client(TWILIO_SID, TWILIO_AUTH_TOKEN)
for article in formatted_articles:
message = client.messages.create(
body=article,
from_="",
to=""
)