230315 / BSA02. 다양한 금융자료들 간 환율 비교, 1분 단위로 사이트 접속하여 데이터 가져오기

BSA02_Exchange_Rates.ipynb

 

필요한 패키지

import requests
import json
import time  # (표준패키지) 시간과 관련된 작업을 수행할 때 필요한 패키지

# !pip install apscheduler
from apscheduler.schedulers.background import BackgroundScheduler
from apscheduler.triggers.interval import IntervalTrigger

 

크롤링

url = "https://api.coinbase.com/v2/exchange-rates?currency=BTC"

response = requests.get(url)
비트코인 = json.loads(response.text)
비트코인

print("상품수", len(비트코인['data']['rates']))
print("비트코인가격:", 비트코인['data']['rates']['KRW'])  # 한국의 비트코인 1개 가격

# currency=KRW 기준으로 (1원당 가격을 '원화'에 저장)
url = "https://api.coinbase.com/v2/exchange-rates?currency=KRW"
response = requests.get(url)
원화 = json.loads(response.text)['data']['rates']
원화

관심상품 = ['USD', 'EUR', 'JPY', 'CNY', 'BTC', 'ETH', 'DOGE']

# 1원당 'USD': '0.0007675585146542'이므로 역수를 취해서 1USD가 ?원인지 확인
가격 = []
for 상품 in 관심상품:
  가격 += [1.0/float(원화[상품])]  # append와 같은 역할
print(가격)


def 가격산출(url, 관심상품):
  response = requests.get(url)
  환전자료 = json.loads(response.text)['data']['rates']
  가격 = [str(time.asctime())]  # 작업을 수행한 시간을 문자열로 추가
  for 상품 in 관심상품:
    가격 += [1.0/float(환전자료[상품])]
  return 가격
  
# 실행할 때마다 값이 바뀜 (은행 시장이 끝나면 값의 변화 없을 수도 있음)
결과 = 가격산출(url, 관심상품)
print(결과)

 

지정된 시간에 작업을 수행

sched = BackgroundScheduler()

def 가격산출():
  url = "https://api.coinbase.com/v2/exchange-rates?currency=KRW"
  관심상품 = ['USD', 'EUR', 'JPY', 'CNY', 'BTC', 'ETH', 'DOGE']
    
  # 데이터를 저장할 때에는 파일을 열고 저장하고 닫아야 함
  # w(write) : 덮어쓰기(새로 저장) 
  # a(append) : 추가

  저장파일 = open("원화-환율.csv", "a", encoding="utf-8")
  response = requests.get(url)
  환전자료 = json.loads(response.text)['data']['rates']
  가격 = str(time.asctime())
  for 상품 in 관심상품:
    가격 += ", " + str(1.0/float(환전자료[상품]))
  print(가격)

  # read(읽는 작업)을 할 때에는 닫을(close) 필요 없음
  저장파일.write(가격+'\n')
    
  # 닫는 작업 꼭 필요!!!  
  저장파일.close()
sched.start()

# 시간 간격을 60초 단위로 해서 작업(가격 산출) 반복 
sched.add_job(가격산출, IntervalTrigger(), seconds=60)  

# add_job 안에 내가 만든 함수를 넣음
# 안에 파라미터 값이 많으면 안되기 때문에 '가격산출'이라는 함수 생성

# 작업 종료
sched.shutdown(가격산출)