개요
전자신문은 이메일뉴스레터를 신청하면 그날치 신문pdf 파일을 무료로 제공하는데,(대략 오전 9시이후면 가능한것 같다) 이게 신문 한페이지당 한파일로 올려놔서 상당히 관리&다운로드하기 귀찮았다.(30개의 pdf 파일을 하나씩 다운받는다고 생각해보라.;;;)
기능
이 프로그램의 기능은 날짜별로 폴더를 만든 후, 그 안에 pdf 파일을 다운받는 방식이다. 끝.
기타
닷넷 프레임 워크의 웹브라우저 오브젝트를 이용하여 만들어보니 핵심코드는 50줄정도만으로 끝이났다.-_-;;또한 스크린샷은 너무 간단해서 볼것도 없다.
근데 문제는, 이런걸 올려도 되냐 이거다. 나만 알고 있으면 계속 다운받을수 있을텐데 말이지..
자료같은거 올리려다가 이런 생각떄문에 못올리는 프로젝트도 몇개가 된다. 대신 하드와 백업장치에 고이 모셔두고 있는 상태. 비슷한 프로젝트로, 중앙일보 무료 pdf 다운로더 프로젝트가 있다. 하지만 이런거 공개되는것도 시간이 알아서 해결해줄듯. ;)
문제되었던 사항.
1. 전자신문이 리퍼러를 읽는것인지, 데이터 포스팅을 하는데도 반응이 없었다. 결국에 document를 읽어와서 submit 하는 방식으로 바꿨다.
2. DocumentCompleted가 여러번 반복되는 현상을 겪었다. pdf 목록을 저장하는데 이게 계속 반복되니까 목록을 중복해서 저장하게 되었다. 배열을 일일히 조사하는건 비효율적이므로, DocumentCompleted된 후 배열크기가 0이 아닐경우, 아무런 처리를 하지 않는 방법으로 했다.(뭐 이런것까지 써야되나.-_-)
3. 다운로드는 WebClient로 구현했는데, 처음에 현재 브라우저의 헤더값을 이쪽에 전송하는 방법을 몰랐다. 뭐 꼼수를 쓰긴 했지만...(꼼수를 써버렸더니 기존에 짜놨던게 소용없어지게 되었다.ㅜㅠ)
추가구현할것.
1. 여러개의 pdf 파일을 한 파일로 합치는 기능을 구현한다.
2. pdf 파일 내의 text를 따로 뽑아서 나중에 검색 할 수 있도록 한다.
3. 자체 메일서버를 구축하여 메일이 오는 즉시 프로그램을 가동 할 수 있도록 한다. dotnet framework를 조금 더 공부해보자!!(메일이 와야 그날 신문을 읽을 수 있는 권한(?)이 생기므로.)
DocumentCompleted관련자료
1. [2.0] Strange problem with WebBrowser control "double loading" a page, eh?
(http://www.vbforums.com/archive/index.php/t-457720.html)
MSDN에 따르면 이 이벤트는 페이지의 프레임을 읽어 올 때마다 발생한다고 한다. 근데 AllowNavigation-false를 쓰라는 댓글도 있구만-거의 안쓰이게 되던데.-_-;; 그리고 이건 한 페이지를 로드할 때 그 내부의 프레임을 로드하지 말라는게 아니라 다른 사이트로 움직이는거를 방해하는건데.=> 프레임 갯수 읽어온후 이 이벤트가 발생한 수랑 비교해보면 될텐데?
2. Grabbing information from web pages using regular expressions
(http://www.codeproject.com/useritems/Regex.asp)
내가 처음에 이 방법으로(사이트에 포스트 하는) 로그인 해와서 빼오려고 했는데 실패를 했었다.(덕분에 소스가 더 보기 쉬워진 느낌). 여기서는 DocumentCompleted를 한 후에 이 이벤트를 지워버리는데, 그러면 위에서 설명했던대로 완전한 컴플릿 상태가 아니니까 패스.
3. WebBrowser.DocumentCompleted is raised more than once
(http://dotmad.blogspot.com/2007/05/webbrowserdocumentcompleted-is-raised.html)
이런 경우가 드문게 아니라는걸 보여주기위해 링크 하나 더 추가해 놓은것..(볼건 없음)
댓글 없음:
댓글 쓰기