금정구청 포토갤러리 일괄 다운로더
토끼같은 아이들의 사진을 한땀한땀 받다가 지친 영혼을 위해 만든 하찮지만 정성이 가득한 다운로드 매니저입니다.
금정구청 포토갤러리를 이용하시는 분들의 수고를 조금이나마 덜어드림을 희망합니다.
2. 주소창을 복사하여 'Enter Photo Gallery URL' 에 붙여넣기를 한 후 '확인'을 누릅니다
주소가 정확하지 않으면 에러 납니다. ▼
주소가 정확하지 않으면 에러 납니다. ▼
3. 사진을 저장할 폴더를 지정해줍니다. ▼
4. 게이지가 움직이면서 다운로드가 시작됩니다. ▼
5. 기다립니다.
Imports System.Net Imports System.ComponentModel Imports System.Text.RegularExpressions Public Class MainFrm Private WithEvents download As New WebClient Private i As Long Private SaveFolder As String Private CurrentFileNumber As Integer Private Sub btnAddressOk_Click(sender As Object, e As EventArgs) Handles btnAddressOk.Click Dim WinHttp As Object, Temp As String '웹페이지 소스 파싱용 변수 Dim Match As Match, Matches As MatchCollection 'URL 및 이미지 주소 파싱 정규식용 변수 Const RegexOption As RegexOptions = RegexOptions.IgnoreCase '정규식 옵션(대소문자 구분 안함) Dim v() As String, j As Long '사진 원본 주소를 담을 배열 Const MainURL As String = "http://photo.geumjeong.go.kr/photoH/" '사진 원본 주소 중복되는 부분 'WebClient 헤더 지정(지정 안 하면 사진 다운로드 시 에러남) download.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)") '포토갤러리 주소 확인 → 이상하면 프로그램 종료, 안 이상하면 Match 변수 초기화 Match = Regex.Match(txtAddress.Text, "http:\/\/photo.geumjeong.go.kr\/photoDetail.asp\?photo_id", RegexOption) If Not Match.Success Then MsgBox(Prompt:="포토갤러리 주소를 확인하세요", Title:="Error", Buttons:=vbCritical) Exit Sub Else Match = Nothing End If '버튼 비활성화, 사진 저장할 폴더 지정 btnAddressOk.Enabled = False Call GetFolderName() Try '포토갤러리 웹페이지 소스 파싱 WinHttp = CreateObject("WinHttp.WinHttpRequest.5.1") With WinHttp .Open("GET", txtAddress.Text) .send .waitforresponse Temp = .responsetext End With WinHttp = Nothing '사진 제목 및 주소 추출 후 소스변수 초기화 Match = Regex.Match(Temp, "제.*목:<\/td><td><font.+?>(.+?)<\/td>", RegexOption) Matches = Regex.Matches(Temp, "filepath=\\+(\w+)\\+&filename=(\w+.jpg)", RegexOption) Temp = vbNullString '레이블 값(사진제목, 저장폴더) 지정 lblDownloading.Text = "Downloading " & Match.Groups(1).Value lblSavingTo.Text = "Saving To " & SaveFolder '사진 갯수만큼 재배열 후 사진원본주소를 배열에 삽입 j = Matches.Count - 1 ReDim v(j) For i = 0 To j With Matches(i) v(i) = MainURL & .Groups(1).Value & "/" & .Groups(2).Value End With Next i '사진 다운로드 실행 DownloadAllFiles(v, SaveFolder) Catch ex As Exception MsgBox("다운로드에 실패하였습니다." & vbLf & ex.Message, Buttons:=MsgBoxStyle.Critical, Title:="Error!!") Close() End Try End Sub Private Sub GetFolderName() '저장할 폴더 지정 If FolderBrowserDialog1.ShowDialog() = DialogResult.OK Then SaveFolder = FolderBrowserDialog1.SelectedPath + "\" Else Exit Sub End If End Sub Private Async Sub DownloadAllFiles(ByVal FileNames As IEnumerable(Of String), SaveFolder As String) Dim SaveFileName As String For Each FileName In FileNames '로컬에 저장된 각 사진 개수(총 진행사항 파악 위한 변수) CurrentFileNumber += 1 '로컬에 저장될 파일명 With FileName SaveFileName = SaveFolder + .Substring(.LastIndexOf("/")) End With With download AddHandler .DownloadFileCompleted, AddressOf download_DownloadFileCompleted AddHandler .DownloadProgressChanged, AddressOf download_DownloadProgressChanged Await .DownloadFileTaskAsync(New Uri(FileName), SaveFileName) End With Next End Sub Private Sub download_DownloadProgressChanged(ByVal sender As Object, ByVal e As DownloadProgressChangedEventArgs) Handles download.DownloadProgressChanged Dim TotalPercent As Double = CurrentFileNumber / i * 100 With e pbFile.Value = .ProgressPercentage If pbFile.Value > 1 Then pbFile.Value = .ProgressPercentage - 1 lblFilePregress.Text = "Downloaded " & Math.Round(.BytesReceived / 1000, 2) & " KB / " & Math.Round(.TotalBytesToReceive / 1000, 2) & " KB (" & Math.Round(.ProgressPercentage, 2) & " %)" End With pbTotal.Value = TotalPercent lblTotalDownload.Text = "Downloaded " & CurrentFileNumber & " / " & i & " (" & Math.Round(TotalPercent, 2) & " %)" End Sub Private Sub download_DownloadFileCompleted(sender As Object, e As AsyncCompletedEventArgs) Handles download.DownloadFileCompleted If CurrentFileNumber = i Then MsgBox("다운로드가 완료되었습니다.", Buttons:=MsgBoxStyle.Information, Title:="Photo Gallery") Close() End If End Sub End Class | cs |
다운로드 프로그램입니다. 이걸 받아서 실행하시면 됩니다. ▼
다운로드 프로그램 소스입니다. 굳이 받을 필요는 없습니다. ▼
◈ 업데이트2017.03.07. 아이콘 추가, 폴더명 자동생성 체크박스 추가
'VB(A)' 카테고리의 다른 글
지역별로 시트 생성하여 나누기 (2) | 2017.05.16 |
---|---|
주식표 변경(상승, 하락 글꼴변경, 주요 금액단위 변경) (0) | 2017.05.07 |
[정규식] 일치하는 문자열만 추출(lazy 모드) (0) | 2017.02.05 |
순서대로 필터링하기 (0) | 2017.02.04 |
[Adodb.Stream] json 파일로 추출하기 (0) | 2017.01.10 |