지난번 주식 시세 모니터링에 이어서

이번에는 네이버 카페의 최신글을 모니터링하는 PPT VBA 프로그램입니다.


먼저 캡쳐 영상을 보겠습니다.

특정 카페의 전체글, 특정게시판의 최근 글을 보여주고

클릭하면 기본 브라우저를 통해 해당 게시글로 가게 되어 있습니다.

굳이 파워포인트를 켜서 이럴 일은 없겠지만 나름대로 만들어 보았습니다.




대상 카페와 추출해올 게시판은  상기와 같습니다.


일단 최신글 15개를 2페이지에 걸쳐 보여드립니다.
가만히 있으면 10초마다 1페이지씩 에니메이션과 함께 지나갑니다.

2페이지입니다.



그다음으로 공지사항, 자유공간, 장르별강좌, 팁, vba게임, 질문 등의 게시판을 순서대로 보여줍니다.

7개 게시판이라 10초식 재생하고 그다음 게시판 하나씩 실시간으로 최근 목록을 가져옵니다.

제목을 클릭하면 기본 브라우저에서 해당 게시물을 보여줍니다.
물론 로그인이 되어야 겠지요.


게시판 제목 옆의 < || > 버튼은 페이지를 이동할 때 쓰입니다.
|| 버튼은 다음 페이지로 가더라도 슬라이드가 자동으로 넘어가지 않게 멈춥니다.


** 실행시 매크로가 허용되어 있어야 하고 
지난번 주식모니터링처럼 WinHTTP 5.1과  MSHTML Object Library 가 체크되어 있어야 합니다. **

지난 주식모니터링 처럼 WinHTTP로 reponseText로 HTML을 가져옵니다.
그런데 여기서는 UTF-8로 유니코드로 인코딩이 필요해서 responseBody 로 가져와서 글자 인코딩도 바꿔줍니다.
result = StrConv(winHttpReq.responseBody, vbUnicode)
그 다음에는 MSHTML innerHTML에 그 결과를 넣어주고
GetElementbyTagName을 이용해서 <form> <tr><td> 등의 각 태그를 찾아내서
최종적으로 <td> 로 찾은 모든 값을 2차원배열에 넣어주고 이 데이터를 파싱해서 각슬라이드 화면에 넣어줍니다.

좀더 구체적으로 html 데이터 파싱 부분을 얘기해봅니다.

1) 먼저 접속 주소는 아래와 같습니다.


접속해보면 바로 1초 이내에 좌측메뉴와 상단타이틀이 있는 다른 페이지로 리다이렉트됩니다.

메뉴 아이디에 메뉴 번호가 들어갑니다.
좌측 게시판 링크를 살펴보면 다들 번호가 있습니다.
대표적인 번호는 아래와 같습니다.

(공지 7 자유 10 VBA 660  퍼즐퀴즈 810 캐릭터 40 사물 670 공통강좌 642  장르별 643 팁 645  질문 248)
(search.page=는 당장은 필요없지만 search.page=2 를 해주면 2페이지 게시글제목을 가져올 수 있습니다.)


이런 PC화면 페이지를 이용하거나 아니면 모바일 페이지를 이용할 수도 있겠습니다.
모바일의 경우는 각 게시글제목에 <TD>가 아니라 <LI>를 많이 쓰지요.

2) 최근 글은 첫번째 <form> 안에 게시물 테이블이 존재하고
나머지 게시판은 두번째 <form> 안에 게시물 테이블이 있습니다.

3) 게시물 마다 번호, 제목, 작성자가 있는 <TD> 의 개수가 약간 차이가 납니다.
공지사항이나 자유글 등은 8개가 있는데 나머지 게시판은 7개가 나옵니다.

4) 게시판의 제목은 <H3> 태그안에서 가져옵니다. 

5) 제목을 누르면 연결될 링크주소를 가져옵니다.

원래 주소는 ..
.href="about:/cafe.naver.com/ArticleRead.nhn?clubid=16854404&amp;page=1&amp;boardtype=L&amp;articleid=123243&amp;referrerAllArticles=true"> 
이런식입니다.
여기서 우리가 필요한 주소로 파싱해보겠습니다.

Function Parse(userStr As String) As String
    Dim str As String
    str = Replace(Split(Split(userStr, "href=")(1), ">")(0), "about:", "http://cafe.naver.com")
'먼저 href= 를 기준으로 잘라서 두번째(1) 배열을 찾고 
'그다음 닫는 태그인 '>' 앞에서 첫번째(0) 배열을 찾은 다음
'about: 을 http://cafe.naver.com으로 바꿉니다.
    str = Replace(str, "&amp;", "&")
'&amp는 &로 바꿉니다.
    str = Replace(str, Chr(34), "") 'double equation
'쌍따옴표는 없애줍니다.
    'str = InputBox("url:", , str) ' 디버그용도
    Parse = str
End Function

PPT 2010에서 제작되어서 2007에서는 애니메이션과 전환 효과가 문제가 있을 겁니다.
그 경우 첨부파일을 열어서 14개 슬라이드의 애니메이션과 전환효과를 삭제하면 문제가 없을 겁니다.

Alt-F11로 보시면 주식모니터링소스를 고쳐서 지저분한 곳이 많이 있습니다.
네이버카페 죄근글 가져오는 방법을 찾으시는 분들께 도움이 되길 바랍니다.

이 글은 http://cafe.naver.com/gameppt/123367 에도 게재되었습니다.