[Python] 웹스크레이핑을 통하여 String을 datetime TimeStamp로 변환하고, KRW환전해보자!


STUDY NOTE
개발을 하며 배우고 익힌 기술 / 개념을 남겨놓는 공간입니다.
잘못된 지식이나, 피드백은 언제나 환영입니다.

오늘 기록해볼 코드의 목표
1. 비트렉스의 공공 API를 사용하여, 코인의 각 부분별로 꺼내어보고
2. 그 중 TimeStamp라는 이름을 가진 String 값을 Datetime으로 변환한 뒤, TimeStamp로 변환해보는 것
3. 또한 USD 달러가 기준인 High, Low, Last 값을 dunamu의 API를 사용하여 KRW로 환전해보는 것
전체 코드
import json import requests import time import datetime, dateutil.parser #bittrex def bittrex(coin): url = requests.get('https://api.bittrex.com/api/v1.1/public/getmarketsummary?market=usd-'+coin) dict_url=url.json() url_result=dict_url['result'][0] #datetime to timestamp datetime = dateutil.parser.parse(url_result.get("TimeStamp")) timestamp=time.mktime(datetime.timetuple()) result=[] result.append(3) #company result.append(coin) #type result.append(timestamp) result.append(0) result.append(exchange_KRWUSD("USD",url_result.get("High"))) result.append(exchange_KRWUSD("USD",url_result.get("Low"))) result.append(exchange_KRWUSD("USD",url_result.get("Last"))) result.append(0) return result #exchange def exchange_KRWUSD(currency,value): url=requests.get('https://quotation-api-cdn.dunamu.com/v1/forex/recent?codes=FRX.KRW'+currency) exchange=url.json() exchange=exchange[0]['basePrice'] result=value*exchange return result
우선 전체적으로 적어본 코드입니다.
한부분, 한부분 나누어 설명해보겠습니다.

Results를 사용하여 API의 값을 받아오는 코드
import json import requests #bittrex def bittrex(coin): url = requests.get('https://api.bittrex.com/api/v1.1/public/getmarketsummary?market=usd-'+coin) dict_url=url.json() url_result=dict_url['result'][0]
첫번째로는 Requests를 사용하여, API의 값들을 가져왔습니다.
bittrex(coin)코드를 사용하여, coin부분에 입력한 값의 코인 정보를 가져오도록 하였습니다.
dict_url=url.json()
requests로 받아온 값을 json으로 변환하여 dict 형태로 만들어주었습니다.
url_result=dict_url['result'][0]
dict형태의 dict_url부분을 print하면
{'success': True, 'message': '', 'result': [{'MarketName': 'USD-BTC', 'High': 8850.0, 'Low': 8562.109, 'Volume': 318.93998143, 'Last': 8682.529, 'BaseVolume': 2774838.73370077, 'TimeStamp': '2019-06-03T02:59:16.583', 'Bid': 8680.143, 'Ask': 8680.144, 'OpenBuyOrders': 3036, 'OpenSellOrders': 1296, 'PrevDay': 8573.88, 'Created': '2018-05-31T13:24:40.77'}]}
이러한 결과 값이 나오는데, 필요한 부분은 result부분이므로 dict_url['result']를 해줍니다.
[{'MarketName': 'USD-BTC', 'High': 8850.0, 'Low': 8562.109, 'Volume': 319.64306963, 'Last': 8680.143, 'BaseVolume': 2780943.56008624, 'TimeStamp': '2019-06-03T03:00:01.573', 'Bid': 8680.143, 'Ask': 8680.144, 'OpenBuyOrders': 3038, 'OpenSellOrders': 1297, 'PrevDay': 8569.286, 'Created': '2018-05-31T13:24:40.77'}]
이렇게 필요한 값을 가져왔습니다. 그러나 [] 대괄호가 쳐져있는 리스트 부분이 아닌 {} 딕셔너리 부분을 사용할 것이기 때문에,
dict_url['result'][0]을 사용하여 대괄호 안의 데이터만을 가져왔습니다.
{'MarketName': 'USD-BTC', 'High': 8850.0, 'Low': 8562.109, 'Volume': 319.64306963, 'Last': 8680.143, 'BaseVolume': 2780943.56008624, 'TimeStamp': '2019-06-03T03:01:11.647', 'Bid': 8680.143, 'Ask': 8680.144, 'OpenBuyOrders': 3036, 'OpenSellOrders': 1294, 'PrevDay': 8569.286, 'Created': '2018-05-31T13:24:40.77'}

String을 Datetime으로 변환, Datetime을 Timestamp로 변환하는 코드
#datetime to timestamp datetime = dateutil.parser.parse(url_result.get("TimeStamp")) timestamp=time.mktime(datetime.timetuple())
두번째로는 해당코인의 내용만을 가져온 url_result 딕셔너리에서 TimeStamp라는 키를 가진 값(Type:String) 을 가져와 deteutil.parser.parser() 함수를 사용하여 datetime.datetime 형으로 변형하였습니다.
그 뒤 datetime에서 Timestamp 형으로 변형하기 위하여 time.mktime(datetime.timetuple())을 사용하여 timeStamp 형으로 변환하였습니다.
url_result.get('TimeStamp')의 값 : 2019-06-03T04:06:53.04
url_result.get('TimeStamp')의 Type : <class 'str'>
datetime의 값 : 2019-06-03 04:06:53.040000
datetime의 Type : <class 'datetime.datetime'>
timestamp의 Type : <class 'float'>
timestamp의 값 : 1559502413.0

리스트와 딕셔너리를 생성, 추가하는 코드
result=[] result.append(3) //company result.append(coin) //type result.append(timestamp) result.append(0) result.append(exchange_KRWUSD("USD",url_result.get("High"))) result.append(exchange_KRWUSD("USD",url_result.get("Low"))) result.append(exchange_KRWUSD("USD",url_result.get("Last"))) result.append(0) return result
세번째로는 각 해당하는 부분의 값을 가져와
result 라는 list에 추가하였습니다. 여기에서 exchange_KRWUSD는 환전하는 함수로 뒷부분에서 설명하겠습니다.
result=[]
배열선언
result.append()
배열에 값 추가
혹시 list가 아닌 dict형태로 삽입하고 싶다면
result={}
딕셔너리선언
result['company']=3
이런식으로 선언한다면 result값이 {'company':'3'} 이런식으로 출력되겠죠?

API를 사용하여 환전하는 코드
#exchange def exchange_KRWUSD(currency,value): url=requests.get('https://quotation-api-cdn.dunamu.com/v1/forex/recent?codes=FRX.KRW'+currency) exchange=url.json() exchange=exchange[0]['basePrice'] result=value*exchange return result
마지막으로 환전 함수 부분입니다.
currency는 통화단위를, value는 변경할 값을 받아오는 변수로 지정하였습니다.
exchange_KRWUSD("USD",2000)을 하면 2000이라는 값을 USD->KRW로 환전한 값을 return 해주는 것입니다.
마찬가지로 API를 사용하여 통화에 대한 정보를 가져온뒤 json타입으로 변환합니다.
exchange의 값
[{'code': 'FRX.KRWUSD', 'currencyCode': 'USD', 'currencyName': '달러', 'country': '미국', 'name': '미국 (KRW/USD)', 'date': '2019-06-03', 'time': '13:07:00', 'recurrenceCount': 233, 'basePrice': 1181.0, 'openingPrice': 1191.2, 'highPrice': 1191.2, 'lowPrice': 1179.0, 'change': 'FALL', 'changePrice': 10.5, 'cashBuyingPrice': 1201.66, 'cashSellingPrice': 1160.34, 'ttBuyingPrice': 1169.5, 'ttSellingPrice': 1192.5, 'tcBuyingPrice': 1195.17, 'fcSellingPrice': 1168.1, 'exchangeCommission': 4.2805, 'usDollarRate': 1.0, 'high52wPrice': 1196.5, 'high52wDate': '2019-05-22', 'low52wPrice': 1102.8, 'low52wDate': '2018-06-19', 'currencyUnit': 1, 'provider': 'KEB하나은행', 'timestamp': 1559535085641, 'id': 79, 'modifiedAt': '2019-06-03T04:11:26.000+0000', 'createdAt': '2016-10-21T06:13:34.000+0000', 'signedChangePrice': -10.5, 'signedChangeRate': -0.0088124213, 'changeRate': 0.0088124213}]
[{키 : 값}]
exchange[0]의 값
{'code': 'FRX.KRWUSD', 'currencyCode': 'USD', 'currencyName': '달러', 'country': '미국', 'name': '미국 (KRW/USD)', 'date': '2019-06-03', 'time': '13:07:00', 'recurrenceCount': 233, 'basePrice': 1181.0, 'openingPrice': 1191.2, 'highPrice': 1191.2, 'lowPrice': 1179.0, 'change': 'FALL', 'changePrice': 10.5, 'cashBuyingPrice': 1201.66, 'cashSellingPrice': 1160.34, 'ttBuyingPrice': 1169.5, 'ttSellingPrice': 1192.5, 'tcBuyingPrice': 1195.17, 'fcSellingPrice': 1168.1, 'exchangeCommission': 4.2805, 'usDollarRate': 1.0, 'high52wPrice': 1196.5, 'high52wDate': '2019-05-22', 'low52wPrice': 1102.8, 'low52wDate': '2018-06-19', 'currencyUnit': 1, 'provider': 'KEB하나은행', 'timestamp': 1559535085641, 'id': 79, 'modifiedAt': '2019-06-03T04:11:26.000+0000', 'createdAt': '2016-10-21T06:13:34.000+0000', 'signedChangePrice': -10.5, 'signedChangeRate': -0.0088124213, 'changeRate': 0.0088124213}
{키:값}
exchange[0]['basePrice']의 값
1181.0
exchange의 값을 구했다면, value와 exchange를 곱한다면 환전한 값이 나오게됩니다.
이 값을 return 시켜 위의 bittrex함수의 값을 환전하여 result에 append해주면
USD가아닌 KRW기준의 통화로 list에 삽입할 수 있게됩니다. :)
여러분의 댓글과 관심은 직장 노예의 엔도르핀이 됩니다 :)

Instagram @ turtle__ju
Facebook @ https://www.facebook.com/100005591914690

댓글

가장 많이 본 글