엑셀 x 네이버 블로그 발행량 조회 자동화 양식 & 함수 만들기
라이브 55 회
2021년07월03일
위캔두 Plus
보충 자료
1️⃣ 이번 강의에서 사용된 네이버 게시글 게시글 세기 - VBA 마스터 코드
Function NaverPostCount(Keyword, Optional Period = "1m")
Dim URL As String
Dim HTMLDoc As HTMLDocument
Dim strResult As String
'Dim Keyword As String: Dim Period As String
'Keyword = "파워포인트"
'Period = "1y"
'1h:1시간, 1w:1주, 1m:1달, 1y:1년, from20200101to20201231:기간지정..
'중요 알림
'블로그 발행량을 반환하는 URL이 일부 변경되었습니다.
'전체 코드 중, URL 부분은 아래 코드로 수정하여 실습을 진행해주세요!
'URL = "https://s.search.naver.com/p/blog/search.naver?where=blog&api_type=1&query=" & Keyword & "&dup_remove=1&nso=so:r,p:" & Period & ",a:all&nx_search_query=" & Keyword
End Function
Private Function GetHttp(URL As String, Optional formText As String, _
Optional isWinHttp As Boolean = False, _
Optional RequestHeader As Variant, _
Optional includeMeta As Boolean = False, _
Optional RequestType As String = "GET") As Object
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ GetHttp 함수
'▶ 웹에서 데이터를 받아옵니다.
'▶ 인수 설명
'_____________URL : 데이터를 스크랩할 웹 페이지 주소입니다.
'_____________formText : Encoding 된 FormText 형식으로 보내야 할 경우, Send String에 쿼리문을 추가합니다.
'_____________isWinHttp : WinHTTP 로 요청할지 여부입니다. Redirect가 필요할 경우 True로 입력하여 WinHttp 요청을 전송합니다.
'_____________RequestHeader : RequestHeader를 배열로 입력합니다. 반드시 짝수(한 쌍씩 이루어진) 개수로 입력되어야 합니다.
'_____________includeMeta : TRUE 일 경우 HTML 문서위로 ResponseText를 강제 입력합니다. Meta값이 포함되어 HTML이 작성되며 innerText를 사용할 수 없습니다. 기본값은 False 입니다.
'_____________RequestType : 요청방식입니다. 기본값은 "GET"입니다.
'▶ 사용 예제
'Dim HtmlResult As Object
'Set htmlResult = GetHttp("https://www.naver.com")
'msgbox htmlResult.body.innerHTML
'###############################################################
Dim oHTMLDoc As Object: Dim objHTTP As Object
Dim HTMLDoc As Object
Dim i As Long: Dim blnAgent As Boolean: blnAgent = False
Dim sUserAgent As String: sUserAgent = "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Mobile Safari/537.36"
Application.DisplayAlerts = False
If Left(URL, 4) <> "http" Then URL = "http://" & URL
Set oHTMLDoc = CreateObject("HtmlFile")
Set HTMLDoc = CreateObject("HtmlFile")
If isWinHttp = False Then
Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP")
Else
Set objHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
End If
objHTTP.setTimeouts 3000, 3000, 3000, 3000
objHTTP.Open RequestType, URL, False
If Not IsMissing(RequestHeader) Then
Dim vRequestHeader As Variant
For Each vRequestHeader In RequestHeader
Dim uHeader As Long: Dim Lheader As Long: Dim steps As Long
uHeader = UBound(vRequestHeader): Lheader = LBound(vRequestHeader)
If (uHeader - Lheader) Mod 2 = 0 Then GetHttp = CVErr(xlValue): Exit Function
For i = Lheader To uHeader Step 2
If vRequestHeader(i) = "User-Agent" Then blnAgent = True
objHTTP.setRequestHeader vRequestHeader(i), vRequestHeader(i + 1)
Next
Next
End If
If blnAgent = False Then objHTTP.setRequestHeader "User-Agent", sUserAgent
objHTTP.send formText
If includeMeta = False Then
With oHTMLDoc
.Open
.Write objHTTP.responseText
.Close
End With
Else
oHTMLDoc.body.innerHTML = objHTTP.responseText
End If
Set GetHttp = oHTMLDoc
Set oHTMLDoc = Nothing
Set objHTTP = Nothing
Application.DisplayAlerts = True
End Function
Private Function Splitter(v As Variant, Cutter As String, Optional Trimmer As String)
'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ Splitter 함수
'▶ Cutter ~ Timmer 사이의 문자를 추출합니다. (Timmer가 빈칸일 경우 Cutter 이후 문자열을 추출합니다.)
'▶ 인수 설명
'_____________v : 문자열입니다.
'_________Cutter : 문자열 절삭을 시작할 텍스트입니다.
'_________Trimmer : 문자열 절삭을 종료할 텍스트입니다. (선택인수)
'▶ 사용 예제
'Dim s As String
's = "{sa;b132@drama#weekend;aabbcc"
's = Splitter(s, "@", "#")
'msgbox s '--> "drama"를 반환합니다.
'###############################################################
Dim vaArr As Variant
On Error GoTo EH:
vaArr = Split(v, Cutter)(1)
If Not IsMissing(Trimmer) Then vaArr = Split(vaArr, Trimmer)(0)
Splitter = vaArr
Exit Function
EH:
Splitter = ""
End Function
버전 안내
이번 강의는 일부 버전에서 실습이 제한됩니다.
윈도우 : 파워쿼리의 FuzzyMatch 기능은 엑셀 2021 이후 버전에서 사용 가능하며, 파워쿼리는 엑셀 2016 이후 버전부터 사용가능합니다.
Mac : Mac용 엑셀에서는 실습 진행이 불가능합니다.
네이버페이지가 개편되서 안되는걸까요?
24년도에 하니 뷰기능이 없고 블로그로 바뀌어서 그런걸까요?
먼저 오류를 확인해주셔서 감사드립니다.
말씀하신 오류는 블로그 발행량을 반환하는 URL 구조가 일부 변경되어서 그런 것으로 확인 하였습니다.
코드 중 URL 부분을 아래와 같이 수정 후 다시 실행해보시겠어요? :)
바로 해결되실겁니다.
감사합니다.
이거 해결할수있는방법이있나요?
말씀하신 상황은 키보드의 INSERT 키가 눌려 '겹쳐쓰기'가 활성화되어서 그렇습니다.
이러한 경우 INSERT 키를 다시 한번 더 눌러서 겹쳐쓰기를 비활성화하면 바로 해결됩니다.^^
감사합니다.
24년 8월 20일 이후, 네이버의 블로그 게시글의 주/월별 발행량을 조회하는 URL이 중단되었습니다.
따라서 본 기능은 더 이상 사용 불가하며, 블로그 게시글의 총 발행량을 조회하는 방법은 빠른 시일내에 멤버십 특강으로 제공할 예정입니다.
감사합니다.🙇♂️
유튜브 오늘 업로드 되었던데,
이게 블로그 발행량 수정된 영상강의 맞을까요? 바로 실습적용해야되서요~
네, 맞습니다.
이번주에 업로드한 라이브 189강에서 블로그 발행량 관련하여 수정된 내용을 정리했으니 확인해보시길 바랍니다.
준비한 강의가 업무를 보시는데 도움이 될 수 있길 바랍니다. 감사합니다.