ZerochanCrawler

요약

개발범위 전체
레포지터리 주소 https://bitbucket.org/cenox/zerochancrawler
레포지터리 생성 일자 2016. 10. 21..
사용한 언어 Swift
사용한 개발 툴 (IDE) Xcode
활성화 된 기능 N/A
사용된 라이브러리 N/A

C# 버전 요약

개발범위 전체
레포지터리 주소 https://github.com/CenoX/zerochanCrawler-CS
레포지터리 생성 일자 2017. 05. 22..
프로젝트 생성일 2017. 01. 04..
사용한 언어 C#
사용한 개발 툴 (IDE) Visual Studio
활성화 된 기능 N/A
사용된 라이브러리 N/A

개요

zerochanCrawlerzerochan의 이미지를 파싱하여 저장해주는 macOS용 콘솔 애플리케이션입니다. 실행 시 인자에 다운로드 받을 path와 함께 실행하면 맥 도큐멘트 폴더 내에 자동으로 저장합니다.

C# 버전은 위와 같은 목적으로 Windows 환경에서도 사용할 수 있도록 포팅된 콘솔 애플리케이션으로써, CMD 또는 PowerShell 에서 다운로드 받을 path를 인자로 넣어 실행하면 컴퓨터의 사진 폴더에 자동으로 저장합니다.

앱 내용

zerochan 에서 함대 컬렉션의 야마카제 이미지를 다운받고자 한다면

./zerochanCrawler http://www.zerochan.net/Yamakaze+%28Kantai+Collection%29

명령어를 이용하여 터미널 환경에서 바로 실행을 확인할 수 있습니다.

스크린샷 2017-05-20 오전 9.23.34

본인이 심심해서 만든 인트로 화면과 함께 애플리케이션이 시작됩니다. 만약 실행 시 아래의 항목에 해당하는 경우 오류와 함께 종료됩니다.

  • 인자가 없음
  • 인자의 호스트가 zerochan이 아님

스크린샷 2017-05-20 오전 9.23.40

URL이 확인되면 폴더를 만들고 그 폴더 내에 인자명으로 된 폴더를 하나 더 생성합니다. 그리고 인자로 가져온 URL에서 페이지 정보를 파싱하고, 이미지 파싱을 시작합니다.

이미지 파싱

이미지 파싱에는 3개의 class가 사용됩니다. 각각 TH1, TH2, DownloadOperation 으로써 TH1은 인자 및 그 아래의 페이지로부터 이미지의 갯수와 이미지의 href를 불러 TH2를 실행합니다. TH2 에서는 받아온 href로 URLSession을 연결하여 원본 이미지가 저장되어 있는 URL을 파싱합니다. 그리고 DownloadOperation 클래스에 Session과 URL을 인자로 넣어 OperationQueueadd합니다.

위의 파싱과정을 보기좋게 정렬하여 보면

(TH1) 전체 페이지와 Thumb 이미지 갯수를 파악하여 이미지 갯수 구함

(TH1) Thumb 의 상세 페이지(href)를 가지고 TH2 생성

(TH1) 현재 페이지가 전체 페이지보다 작으면 페이지 인덱스에 1을 더하고 다음 TH1 생성
(TH2) TH1에서 넘어온 상세 페이지(href)에 세션 연결

(TH2) static 이미지 (원본 이미지) URL을 가져와 DownloadOperation 생성 후 공용 OperationQueue에 추가

(OperationQueue) DownloadOperation 태스크를 실행

순으로 이루어집니다.

따라서 TH1 -> TH2 -> OperationQueue(DownloadOperation) 의 과정이 연달아 이어지게 되며 TH1이 마지막 페이지에 도달하여 최대 이미지 갯수를 구하고 DownloadOperation이 마지막 이미지 갯수 까지의 이미지를 전부 다운로드하면, Finder 를 통해 주제경로를 사용자에게 표시하고 semapore.signal() 함수를 통해 애플리케이션이 종료됩니다.


스크린샷 2017-05-20 오전 9.26.01

스크린샷 2017-05-20 오전 9.46.02

위의 이미지 파싱 부분을 거쳐 다운로드가 완료되면, 다운로드 완료 라는 출력과 함께 다운로드가 완료된 폴더를 표시하고 애플리케이션은 종료됩니다.

C# 포팅 프로젝트

Swift 를 이용하여 만들어진 Command Line Tool 인 zerochancrawler를 Windows 플랫폼에서도 구동 가능하도록 C#의 코드스타일에 맞추어 포팅한 프로젝트입니다. 앱의 기본적인 작동방식은 Swift 버전의 그것과 완전히 같지만, 사진을 저장하는 곳이 내 문서가 아닌 사진 폴더에 저장된다는 점이 다른 점입니다.

사진 폴더는 Environment 클래스의 GetFolderPath 를 통해 가져왔으며 이미지 다운로드는 WebClient의 ` DownloadFileAsyncDownloadFileCompleted`를 이용하여 구현하였습니다.

스크린샷 2017-05-22 오후 11.03.01

위의 사진은 C#으로 만들어지고 컴파일 된 C#버전 ZerochanCrawler를 Mono Framework 를 이용해 실행한 모습입니다.