캡스톤 프로젝트로 했다!
일단 문자 메시지를 보내려면
SMS Messaging API | Twilio
Send and receive text messages with APIs powering 66+ billion messages a year. Add SMS to your app today.
www.twilio.com
위의 링크에서 로그인 한 다음에 전송 할 전화번호와 api key를 발급 받아야 한다.
해외 뉴스를 받으려면
https://newsapi.org/docs/endpoints/everything
Everything - Documentation - News API
Everything /v2/everything Search through millions of articles from over 80,000 large and small news sources and blogs. This endpoint suits article discovery and analysis. Request parameters apiKey required Your API key. Alternatively you can provide this v
newsapi.org
위의 링크에서 api키를 받아야한다.
또, 미국 주식 거래 관련 정보를 받으려면
Free Stock APIs in JSON & Excel | Alpha Vantage
Copyright © Alpha Vantage Inc. 2017-2022 | Page last updated: May 3, 2022 | Boston, Massachusetts
www.alphavantage.co
위 홈페이지에서 api키 발급 받아야 한다!!
확실히 api를 잘 쓰고싶으면 api docs를 꼼꼼히 읽을줄 알아야한다. 물론 output example들을 보는 것도 중요하다.
그리고 output example 볼 때에는 꼭 !! chrome extension으로 json을 예쁘게 보여주는 프로그램을 깔기를 바란다.
아래는 전체 코드이다! 설명은 주석으로 달아놓겠다.
import requests
from twilio.rest import Client
#터미널에서 pip install twilio 해줘야 한다.
import datetime
STOCK = "TSLA"
COMPANY_NAME = "Tesla Inc"
#내가 소식을 받고싶은 주식의 심볼과 회사 이름을 constant로 적어준다.
#-----------------stock 코드-----------------
stock_api_key = ""
#포스팅에 적은 홈페이지에서 발급 받은 친구를 적어준다.
stock_params = {
'function' : "TIME_SERIES_DAILY", #하루마다의 feature들을 적어놓음
'symbol' : STOCK,
'apikey' : stock_api_key,
}
res = requests.get("https://www.alphavantage.co/query", params = stock_params)
stock_json = res.json()
now = datetime.datetime.now()
yester_day = str(now - datetime.timedelta(days=1)).split(" ")[0]
yester_yester_day = str(now - datetime.timedelta(days=2)).split(" ")[0]
#어제와 어저께의 주식의 특징을 알기위해 미리 만들어 놓은 변수들.
percentage = 0
if stock_json["Meta Data"]["3. Last Refreshed"] == yester_day:
"""
last refreshed라는 값이 있는데, 그 last refresed된 게 어제라면 코드를 실행시킨다.
만약 오늘이 일요일, 혹은 월요일이라면 코드는 실행되지 않는다.
"""
yesterday_end_price_ = float(stock_json["Time Series (Daily)"][yester_day]["1. close"])
yester_yesterday_end_price = float(stock_json["Time Series (Daily)"][yester_yester_day]["1. close"])
percentage = int((yesterday_end_price_-yester_yesterday_end_price)/yester_yesterday_end_price * 100)
#-----------------News 코드-----------------
if percentage != 0 :
news_api_key = ""
#포스팅에 적은 홈페이지에서 발급 받은 친구를 적어준다.
news_params = {
'q' : COMPANY_NAME,
'apiKey' : news_api_key,
'searchIn' : 'title'
#주식 회사의 이름을 title로만 검색한다는 뜻이다.
}
res = requests.get("https://newsapi.org/v2/everything", params = news_params)
news_json = res.json()['articles'][0:3]
#뉴스를 세 개만 받고싶어서 slice를 썼다.
#-----------------SMS 코드-----------------
account_sid = ''
auth_token = ''
client = Client(account_sid, auth_token)
#포스팅에 적은 홈페이지에서 발급 받은 친구를 적어준다.
message = [client.messages \
.create(
body=f"{STOCK}: {percentage}\nHeadline: {headline}\nBrief: {brief}",
from_='',
to=''
)
for i in range(3) for headline, brief in zip(news_json[i]['title'], news_json[i]['description'])
]
#news_json에 담아온 세 개의 뉴스들을 이중 for문을 이용해 headline, brief를 생성하여 문자 메시지 안에 넣어준다.
#이렇게 되면 문자는 총 세 개를 보내게 된다!
코드 반성의 시간
- key들을 발급 받고 코드 맨 위에다가 constant 변수로 쓰는 버릇을 만드는 게 좋을 것 같다. 자꾸 이러네? 다른 사람들이 내 코드 사용할 수도 있으니까 잘 좀 하자!
- 코드가 그닥 깔끔하지 않은 것 같다! 물론 draft로 적은 거나 마찬가지인 코드이지만 처음부터 예쁘게 쓰면 좋을 것 같기는 하다.
- 변수 이름 깔끔하게! 누구나 알아볼 수 있게! 이게 뭔지 알 수 있게! 이게 무슨 기능을 하는지 딱 알게! 적자.. 변수 이름 적는 게 세상에서 제일 어려운 것 같다.
'조열심 카테고리 > Python 이것저것' 카테고리의 다른 글
| [Python] dictionary랑 if문 잘 쓰기 (0) | 2022.06.04 |
|---|---|
| [Python] Python에서 html 언어 이스케이핑 하기 (0) | 2022.05.27 |
| [Python] Otaku-qutoes program (0) | 2022.05.23 |
| [Python] smtplib과 datetime을 이용하여 생일 관련 템플릿 메일 보내기 (0) | 2022.05.23 |
| [Python] SMTP (0) | 2022.05.23 |