안녕하세요 새벽단호박입니다.
오늘 상태가 안좋아서 쉴까?했는데.... 댓글달아주시는 분들을 보고 다시 글을 씁니다. 댓글달아주신 @정래훈님 감사합니다.
저번 포스팅에서 비트코인이라는 특정 종목의 시세/거래량 등의 정보를 조회하는 법을 배웠습니다.
하지만 검색기로써 기능하려면 모든 코인의 정보를 한번에 조회할 수 있고, 그중에 몇개를 추릴수 있어야겠죠?
오늘은 그 첫단계로 '모든 코인'의 정보를 조회하는 법을 배워보고자 합니다.
그럼 시작하겠습니다.
1. Object : '모든' 코인 정보 조회하기
우리는 '모든' 코인의 '정보를 수집'하고 싶습니다.
물론 개별코인의 정보를 가져오는 것은 작업했죠. 그러니.
우리가 해야할 것은
1. '모든 코인'의 이름을 가져오는것
2. 개별 코인의 정보 가져오기를 코인 갯수만큼 반복
입니다.
목표 1을 위해서 저희는 어제 배운 '크롤링'을 사용할 것이고.
목표 2를 위해서 저희는 'for ~ next' 라는 '반복함수'를 사용할 것입니다.
2. How to : 1. 모든 코인 이름 가져오기 by 크롤링
6.all_coin_name.xlsm
0.03MB
파일 설명
1. 변수설정
2. 크롤링
3. 코인갯수세기
4. for~next 로 갯수만큼 반복
How to?
1-2. 변수설명 + 크롤링
모든 코인의 이름을 알려주는 링크 : https://api.upbit.com/v1/market/all
위 링크를 클릭해보시면, 어제와 같이 엄청나게 긴! 코인이름이 나열된 페이지가 뜹니다.
변수 설정
Dim WinHttp As New WinHttp.WinHttpRequest Dim rTxt As String, pTxt As String Dim mCnt As Integer, i As Integer
크롤링 코드
With WinHttp .Open "GET", "https://api.upbit.com/v1/market/all" .SetRequestHeader "user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0" .Send .WaitForResponse rTxt = .ResponseText End With
3. 코인 갯수 세기
코인 갯수 세기
mCnt = Len(rTxt) - Len(Replace(rTxt, "{", vbNullString))
Len(rTxt)로 rTxt의 '글자 길이'를 셉니다.
Replace(rTxt, "{",vbNullstring)은 rTxt에서 "{"이라는 문자를 "빈칸"으로 바꿔죠~ 라는 코드인데요.
그럼 원래의 Len(rTxt)에서 { 갯수만 셀수 있겟죠?
위 링크를 클릭해 보면 코인의 이름은 {KRW-BTC}... 이렇게 되어있으니, {의 갯수가 코인의 갯수와 사실상 같다고 볼 수 있습니다.
따라서 mCnt = 코인의 갯수
4. For ~Next 로 반복하기
반복하기
For i = 1 To mCnt pTxt = Split(rTxt, "{")(i) Cells(i + 1, 1).Value = Split(Split(pTxt, """market"":""")(1), Chr(34))(0) Next i
1부터 mCnt(코인의 갯수) 까지 아래 과정을 반복한다. 는 뜻입니다.
pTxt와 Split코드에 대해 이해하고 싶으시면 이전 포스팅을 참고해주세요
PJ5. 엑셀로 업비트에서 코인 시세, 거래량 가져오기 (VBA 코인검색기)
0.들어가며 안녕하세요 새벽단호박입니다. 최근에 코인검색기 프로젝트에 대해 정말 정말 많이 연구하고있습니다. 사실상 sub() 가 뭔지 dim()이 뭔지... VBA를 1도 모르던 저에게는 하루하루가 힘든
dawnpkin.tistory.com
3. How To : 2. 각 코인별로 원하는 정보 가져오기
6.all_coin_name_CV.xlsm
0.03MB
파일설명
1. Make_ticker
2. Get_info
How to?
1. Make ticker
Market 명 모으기
Cells(1, 2) = Cells(5, 1) lastline = Cells(Rows.count, 1).End(xlUp).Row For i = 2 To lastline - 4 Cells(1, 2) = Cells(1, 2) & "," & Cells(i + 4, 1) Next i
앞서 불러온 '코인의 이름'들로 우리는 'ticker'를 만들겁니다. ticker는 간단히 말하자면 찾고자 하는 정보들의 집합 {} 이라고 생각하시면 됩니다.
반복문을 사용합니다. lastline = Cells(Rows.count, 1).End(xlUp).Row 은 1열의 가장 아래에 위치한 정보까지의 행 갯수를 세는 겁니다. 1~4행에 정보가 들어있고, 5행부터 마켓명이 들어있으니. (전체행갯수-4) = 코인의 갯수입니다. 그만큼 반복합니다.
Cells(1, 2) = Cells(1, 2) & "," & Cells(i + 4, 1) 은 cells(1,2) 즉 B2 셀의 정보에 쉼표와 코인의 이름을 추가하는 코드입니다.
이 과정이 진행되면 B2셀에 '모든 코인'의 이름이 적혀있는 ticker를 만들수 있습니다.
2, Get_info
1) 크롤링 준비
변수설정
Dim WinHttp As New WinHttp.WinHttpRequest Dim url As String, markets As String Dim rTxt As String, pTxt As String, i As Integer, Cnt As Integer url = "https://api.upbit.com/v1/ticker" markets = Range("B1").Value With WinHttp .Open "GET", url & "?markets=" & markets .SetRequestHeader "user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0" .Send .WaitForResponse rTxt = .ResponseText End With Cnt = Len(rTxt) - Len(Replace(rTxt, "{", vbNullString))
보시면 url이 변경되었습니다. 위 링크는 ticker에 등록된 정보들을 모아오는 함수입니다.
Cnt라는 변수가 생겼죠. 위에서 설명드렸듯이 이 변수를 통해 'Cnt 번째' 값을 불러오기 위해 설정해줍니다.
2) 크롤링 / 반복
반복문
For i = 1 To Cnt pTxt = Split(rTxt, "{")(i) Cells(i + 4, 2).Value = Split(Split(pTxt, """trade_price"":")(1), ",")(0) Cells(i + 4, 3).Value = Split(Split(pTxt, """trade_volume"":")(1), ",")(0) Next i
위에서 '이름'만 따로 불러오는 것과 같은 원리입니다.
다만 앞에 Name 코드에서는 'market/all'이라는 집합에서 이름만 가져올 수 있었고.
지금은 'ticker'에서 정보를 가져오는것만 다릅니다.
조금 장황하긴 하네요 ㅎㅎ;; 제가 처음공부할때 그냥 복사만 하다가, 응용이 안되서 고생하던 부분들을 최대한 쉽게 풀어서 써보려고 했습니다.
흠냐... 그래도 어렵네요... 능력부족인가봐요ㅠ
그래도 '검색'을 하기위한 최소한의 조건들을 만족시켰으니. 이제 정보를 가공만 할 수 있으면 되지 않겠습니까.
홀홀 한번 힘내봐야겠습니다.
그럼 이만!