관련: 지식인
아직 작동하는 HTML 요소를 이용하는 방식의 VBA입니다.
https://kin.naver.com/qna/detail.naver?d1id=1&dirId=102020101&docId=436801616
아래는 좀 더 빠른 속도를 위해 JSON 데이터를 검색하는 방식입니다.
교보문고에서 검색할 때 판매중인 자료는 실시간으로 간단한 데이터들을 Json형식으로 가져옵니다.
이 API를 이용해서 Json 형식으로 빠르게 도서 정보를 가져오는 방법입니다.
이런 식으로 검색하면 아래와 같은 JSON 데이터를 받아옵니다.
더보기
autocompleteShop({
"data": {
"returnCode": 1,
"totalSize": 1,
"realSize": 1,
"errorMessage": null,
"resultDocuments": [{
"CMDTCODE": "9791190090018",
"CMDT_NAME": "우리가 빛의 속도로 갈 수 없다면",
"SALE_CMDTID": "S000001935245",
"SALE_CMDT_DVSN_CODE_SUB": "KOR",
"SCORE": "100856",
"RELATE_HTML_LIST": "",
"SALE_CMDT_GRP_DVSN_CODE": "SGK",
"DQ_ID": "TOT_S000001935245",
"SALE_CMDT_DVSN_CODE": "TOT",
"TOT_RELATE_HTML_LIST": "9791190090018$@소설$@우리가 빛의 속도로 갈 수 없다면$@김초엽$@허블$@2019$@06$@14000.00$@12600.00$@10.00$@700$@N$@N$@KOR$@https://contents.kyobobook.co.kr/sih/fit-in/200x0/pdt/9791190090018.jpg$@0$@0$@0$@0$@0$@5.00$@바이오센서를 만드는 과학도에서 이제는 소설을 쓰는 작가 김초엽. 어디에도 없는 그러나 어딘가에 있을 것 같은 상상의 세계를 특유의 분위기로 손에 잡힐 듯 그려내며, 정상과 비정상, 성공과 실패, 주류와 비주류의 경계를 끊임없이 질문해온 그의 첫 소설집 『우리가 빛의 속도로 갈 수 없다면』.\n\n《관내분실》로 2017년 제2회 한국과학문학상 중단편부문 대상을, 《우리가 빛의 속도로 갈 수 없다면》으로 가작을 동시에 받으며 작품 활동을 시작한 저자의 이야기를 만나볼 수 있다. 신인소설가로서는 드물게 등단 일 년여 만에 《현대문학》, 《문학3》, 《에피》 등 여러 지면을 통해 발표한 작품으로 펴낸 첫 소설집으로, 근사한 세계를 그려내는 상상력에서 한 발 더 나아가, 우리를 돌아보게 하는 질문을 던지는 일곱 편의 작품이 수록되었다.$@$@0$@0$@0$@010107"
}]
},
"resultCode": "200",
"resultMessage": "Search Success",
"detailMessage": "자동완성 상품 검색 결과를 가져왔습니다."
});
autoCompleteShop( 다음에 오는 내용이 Json 형식의 데이터입니다.
위 JSON 형식의 데이터안의 TOT_RELATE_HTML_LIST 데이타 문자열을 파싱하면
제목, 가격, 저자, 출판사, 표지이미지, 소개 등 대부분의 정보를 빠르게 가져올 수 있습니다.
단점은 절판된 자료는 검색이 되지 않습니다.
아래 코드는 JsonBag 클래스 2.6버전을 이용합니다.
더보기
'Alt-F11 도구-참조에서 MS XML x.0 Object Library 체크
Option Explicit
Const ImgOn As Boolean = False
Sub getKyobobook_JSON()
Dim lastRow As Range
Dim sht As Worksheet
Dim rng As Range
Dim URL As String
Const KYOBOsearch As String = "https://search.kyobobook.co.kr/srp/api/v1/search/autocomplete/shop?callback=autocompleteShop&keyword="
Const KYOBO As String = "http://mobile.kyobobook.co.kr/showcase/book/"
Dim temp As String
Dim http As Object 'MSXML2.ServerXMLHTTP or MSXML2.ServerXMLHTTP60
Dim JSON As New JsonBag
Dim arr() As String
Dim ImgFile As String, ImgPath As String, ImgDir As String, shp As Shape
Dim l As Long
'Set http = New MSXML2.ServerXMLHTTP 'or MSXML2.ServerXMLHTTP60
Set http = CreateObject("MSXML2.ServerXMLHTTP")
Set sht = ThisWorkbook.ActiveSheet
Set lastRow = Cells(sht.Rows.Count, "B").End(xlUp)
If lastRow.Row < 4 Then Exit Sub
'기존 내용 삭제
sht.Hyperlinks.Delete
sht.Range("C4:Z" & lastRow.Row).ClearContents
If Not ImgOn Then
For l = sht.Shapes.Count To 1 Step -1
If sht.Shapes(l).Name Like "Img_*" Then
sht.Shapes(l).Delete
End If
Next l
End If
On Error Resume Next ' 에러무시
'ISBN 순환 검색
For Each rng In sht.Range("B4", lastRow)
'검색
With http
.Open "GET", KYOBOsearch & rng, False
.setRequestHeader "User-Agent", "Mobile"
'.setRequestHeader "Content-Type", "Application / javascript"
.send
temp = .responseText
temp = Mid(temp, InStr(temp, "{"))
temp = Left(temp, InStrRev(temp, "}"))
JSON.JSON = temp
'autocompleteShop({
' "data": {
' "returnCode": 1,
' "errorMessage": null,
' "resultDocuments": [{
' "CMDTCODE": "9791190090018",
' "CMDT_NAME": "우리가 빛의 속도로 갈 수 없다면",
' "SALE_CMDTID": "S000001935245",
' "TOT_RELATE_HTML_LIST": "9791190090018$@소설$@우리가 빛의 속도로 갈 수 없다면$@김초엽$@허블$@2019$@06$@14000.00$@12600.00$@10.00$@700$@N$@N$@KOR$@https://contents.kyobobook.co.kr/sih/fit-in/200x0/pdt/9791190090018.jpg$@0$@0$@0$@0$@0$@5.00$@바이오센서를 만드는 과학도에서 이제는 소설을 쓰는 작가 김초엽. 어디에도 없는 그러나 어딘가에 있을 것 같은 상상의 세계를 특유의 분위기로 손에 잡힐 듯 그려내며, 정상과 비정상, 성공과 실패, 주류와 비주류의 경계를 끊임없이 질문해온 그의 첫 소설집 『우리가 빛의 속도로 갈 수 없다면』.\n\n《관내분실》로 2017년 제2회 한국과학문학상 중단편부문 대상을, 《우리가 빛의 속도로 갈 수 없다면》으로 가작을 동시에 받으며 작품 활동을 시작한 저자의 이야기를 만나볼 수 있다. 신인소설가로서는 드물게 등단 일 년여 만에 《현대문학》, 《문학3》, 《에피》 등 여러 지면을 통해 발표한 작품으로 펴낸 첫 소설집으로, 근사한 세계를 그려내는 상상력에서 한 발 더 나아가, 우리를 돌아보게 하는 질문을 던지는 일곱 편의 작품이 수록되었다.$@$@0$@0$@0$@010107"
' }]
' },
' "resultCode": "200",
' "resultMessage": "Search Success",
'});
'첫번째 데이터
JSON.JSON = JSON("data")("resultDocuments")(1).JSON
'Debug.Print JSON.JSON
End With
'9791190090018$@
'소설$@
'우리가 빛의 속도로 갈 수 없다면$@
'김초엽$@
'허블$@
'2019$@
'06$@
'14000.00$@
'12600.00$@
'10.00$@
'700$@
'N$@
'N$@
'KOR$@
'https://contents.kyobobook.co.kr/sih/fit-in/200x0/pdt/9791190090018.jpg$@
'0$@
'0$@
'0$@
'0$@
'0$@
'5.00$@
'바이오센서를 만드는 과학도에서 이제는 소설을 쓰는 작가 김초엽. 어디에도 없는 그러나 어딘가에 있을 것 같은 상상의 세계를 특유의 분위기로 손에 잡힐 듯 그려내며, 정상과 비정상, 성공과 실패, 주류와 비주류의 경계를 끊임없이 질문해온 그의 첫 소설집 『우리가 빛의 속도로 갈 수 없다면』.\n\n《관내분실》로 2017년 제2회 한국과학문학상 중단편부문 대상을, 《우리가 빛의 속도로 갈 수 없다면》으로 가작을 동시에 받으며 작품 활동을 시작한 저자의 이야기를 만나볼 수 있다. 신인소설가로서는 드물게 등단 일 년여 만에 《현대문학》, 《문학3》, 《에피》 등 여러 지면을 통해 발표한 작품으로 펴낸 첫 소설집으로, 근사한 세계를 그려내는 상상력에서 한 발 더 나아가, 우리를 돌아보게 하는 질문을 던지는 일곱 편의 작품이 수록되었다.$@
'$@
'0$@
'0$@
'0$@
'010107
If ImgOn Then rng.RowHeight = 100 Else rng.RowHeight = 18 '행 높이
rng.Offset(, -1) = rng.Row - 3 ' 연번
'제목
rng.Offset(, 1) = JSON("CMDT_NAME") 'arr(2)
If Len(rng.Offset(, 1)) = 0 Then
rng.Offset(, 1) = "[n/a]"
Else
sht.Hyperlinks.Add rng.Offset(, 1), KYOBO & JSON("SALE_CMDTID")
'Debug.Print JSON("TOT_RELATE_HTML_LIST")
'요약 문자열 분리
arr() = Split(JSON("TOT_RELATE_HTML_LIST"), "$@")
'작가
rng.Offset(, 2) = arr(3)
'출판사
rng.Offset(, 3) = arr(4)
'가격
rng.Offset(, 4) = arr(8)
rng.Offset(, 4).NumberFormat = "###,###,##0"
'intro_summary
rng.Offset(, 5) = arr(21)
'표지
rng.Offset(, 6) = arr(14)
ImgFile = "": ImgDir = "\Img"
ImgFile = arr(14)
If ImgOn And Len(ImgFile) Then
ImgPath = ThisWorkbook.Path & ImgDir
If Dir(ImgPath, vbDirectory) <> Mid(ImgDir, 2) Then MkDir ImgPath
ImgPath = ImgPath & Application.PathSeparator & rng & ".jpg"
Call URLDownloadToFile(0, ImgFile, ImgPath, 0, 0)
With rng.Offset(, 6)
Set shp = sht.Shapes.AddPicture(ImgPath, 0, 1, .Left, .Top, .Width / 2, .Height)
shp.ScaleHeight 1, msoTrue: shp.ScaleWidth 1, msoTrue
shp.LockAspectRatio = msoTrue
shp.Height = rng.Height
shp.Left = .Left + (.Width / 2 - shp.Width / 2)
shp.Name = "Img_" & rng.Row - 3 & "_" & rng
shp.AlternativeText = ImgFile
End With
End If
End If
'대기
If (rng.Row - 3) Mod 5 = 0 Then Application.Wait Now() + TimeSerial(0, 0, 1)
Next rng
Application.StatusBar = False
Set JSON = Nothing
Set http = Nothing
End Sub
ImgOn이 False 일때:
ImgOn이 True 일때:
첨부파일 참고하세요.
주의) 교보문고 사이트가 변경되면 위 코드는 언제든지 작동을 하지 않게 됩니다.
위 코드의 지속적인 작동을 보장하지 않고 업데이트 계획도 없습니다.
인터넷 사이트에서 Json 자료를 가져오는 방법에 대한 예시일 뿐입니다.
'XLS+VBA' 카테고리의 다른 글
의료기기 검색 크롤링 (2) | 2024.10.03 |
---|---|
구글 검색 API > 검색 결과 첫번째 링크 가져오기 (0) | 2024.07.03 |
엑셀연동] 자동 방배정 및 명단 출력 2 (0) | 2024.05.23 |
엑셀연동] 방배정 명단 출력 1 (0) | 2024.05.23 |
모든 행 값을 랜덤으로 섞기 (1) | 2024.03.01 |
네이버 API를 이용한 '네이버 쇼핑' 검색 결과 수집 (0) | 2024.02.20 |
엑셀에서 실시간 유튜브 구독자수 모니터링 (0) | 2024.02.15 |
온라인 이미지를 다운로드하여 아래로 이어 붙인 상품 이미지 일괄 생성 (0) | 2024.02.14 |
최근댓글