2011년 4월 6일 수요일

bigmail 사람 많을 때 다운로드.

bigmail파일 다운로드 받을 때 사람 많아 나오는 메시지...

프로그래밍 잘하시는 분은 문제 없겠지만, 나처럼 잘 모르는 사람은...


아래 내용의 배치파일 만듦.  (예: run.bat)

:Loop
ping -n 15 127.0.0.1
wget http://bigmail....
goto Loop

2번째 줄의 청색으로 된 숫자로 잠시 대기하는 시간을 정해줌
15초마다 대기하면서 다운로드를 시도하는 구조.
적색 부분에 bigmail 주소 입력해둠.

wget은 아래 사이트에서 받을 수 있음. wget.exe과 run.bat는 같은 디렉터리에 있어야함.

http://users.ugent.be/~bpuype/wget/

단일 파일로 wget.exe이고 현재 버전 1.11.4, 크기는 401408byte


장점 : 시간이 걸리긴 하지만 다운로드 횟수가 남아있다면 왠만하면 받게됨.

단점 :
  • 다운로드 완료 후,
    배치파일을 종료하는 코드가 없어 재 다운로드 하게되는 문제가 있음.

    사람이 워낙 많으면 재다운로드 하는 경우는 거의 없지만,
    다른 이에게 폐가 될 수 있을 것 같음..
     
  • 다운로드한 파일 명을 수동으로 바꿔줘야함.

위의 문제를 조금이라도 해결하고 싶어서...
VBScript 코드를 작성해봤다. 엉터리이긴 하지만...




Dim WshShell, objFSO, objFile, objRandom
Dim Str, Addr, strFile

Str = "wget.exe"
Addr = InputBox("Daum bigmail 주소 입력")

If Addr = "" Then 
 WScript.Quit() '취소 버튼누르면 스크립트 종료
End If

Addr = replace(Addr," ","") '불필요한 공백이 주소에 있다면 제거.

strFile = "bigfile_down@uid=" & Mid(Addr, 56) 'wget에 의해 생성되는 파일명.

Set objRandom = CreateObject("System.Random")
Set objFSO = CreateObject("Scripting.FileSystemObject")

If objFSO.FileExists(strFile) Then
 WScript.Echo("파일이 이미 존재합니다.")
 WScript.Quit() '파일 존재하면 스크립트 종료
End If

Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run Str & " " & Addr,  0, true  '다운로드 명령실행

Set objFile = objFSO.GetFile(strFile) 


'While CLng(objFile.Size) < 1000    
While Len(objFile.Size) < 4   '999byte 이하 크기라면 재 다운로드
 
 objFile.Delete '이전에  다운로드 실패한 파일 삭제 
 
 'WScript.Sleep 15000   '15초간 대기
 
 WScript.Sleep objRandom.Next_2(1000, 30000) 
 '1~30초 사이의 난수 입력되도록 변경

 WshShell.Run Str & " " & Addr,  0, true  '다운로드 명령실행 
 'Set objFile = objFSO.GetFile(strFile) 

Wend

WScript.Echo("다운로드 완료됨.")


일단 재 다운로드 되는 걱정은 안해도 될 것 같다.

실행 중 종료하는 부분을 생각하지 않아서
종료하려면 작업관리자에서 wscript.exe 프로세스를 강제종료 해줘야하는 문제가 있다.

댓글 없음:

댓글 쓰기