def start_get_info (self): fileid = re.search ('\?d=([A-Za-z0-9]+)', self.url).group (1) postdata = 'id0=%s' % (fileid) self.tfile = TempFile ('http://www.megaupload.com/mgr_linkcheck.php', postdata, headers=['TE: trailers', 'Connection: TE']) self.tfile.completed_cb = self.handle_info_page self.tfile.start ()
def stage_captcha_download_completed (self, tfile): self.code = self.downman.application.prompt_for_captcha (tfile.contents) if self.code != None: post_data = 'captchacode=%s&megavar=%s&captcha=%s' % (self.captchacode, self.megavar, self.code) self.tfile = TempFile (self.url, post_data) self.tfile.completed_cb = self.stage_download_completed self.tfile.start () else: self.status = 'Invalid Code' self.set_state (STATE_DISABLED)
def handle_start_page (self, match): ccstr = '<INPUT type="hidden" name="captchacode" value="(.*?)">' m = re.search (ccstr, self.tfile.contents) self.captchacode = m.group (1) mvstr = '<INPUT type="hidden" name="megavar" value="(.*?)">' m = re.search (mvstr, self.tfile.contents) self.megavar = m.group (1) imgstr = '<TD>Enter this </TD>\s*?<TD width="100" align="center" height="40"><img src="([^"]*?)" border="0" alt=""></TD>\s*?<TD> here:</TD>' m = re.search (imgstr, self.tfile.contents) self.iurl = m.group (1) self.tfile = TempFile (self.iurl) self.tfile.completed_cb = self.stage_captcha_download_completed self.tfile.start ()
def handle_start_download (self): dpath = self.downman.config.get_property ('DefaultDownloadDirectory') self.location = os.path.join (dpath, re.search ('([^\/]*)$', self.furl).group (1)) rfrom = None if os.path.exists (self.location): s = os.stat (self.location) if s.st_size == self.total: self.set_state (STATE_COMPLETED) return if s.st_size == self.downloaded: rfrom = self.downloaded self.tfile = WriteFile (self.furl, self.location, None, self.url, rfrom) self.tfile.completed_cb = self.download_completed self.tfile.progress_cb = self.download_progress self.tfile.start () self.status = 'Downloading...' self.set_state (STATE_DOWNLOADING)
class MUDownload (GenericHost): location = None def __init__ (self, url, downman): GenericHost.__init__ (self, url, downman) self.case_handlers = [ ('<FORM method="POST" id="captchaform">', self.handle_start_page), ('count=(\d+);', self.handle_correct_captcha), ] def start_get_info (self): fileid = re.search ('\?d=([A-Za-z0-9]+)', self.url).group (1) postdata = 'id0=%s' % (fileid) self.tfile = TempFile ('http://www.megaupload.com/mgr_linkcheck.php', postdata, headers=['TE: trailers', 'Connection: TE']) self.tfile.completed_cb = self.handle_info_page self.tfile.start () def handle_info_page (self, tfile): self.total = int (re.search ('s=(\d+)', self.tfile.contents).group (1)) self.name = re.search ('n=(.+)', self.tfile.contents).group (1) self.set_state (STATE_INFO_COMPLETED) def handle_start_page (self, match): ccstr = '<INPUT type="hidden" name="captchacode" value="(.*?)">' m = re.search (ccstr, self.tfile.contents) self.captchacode = m.group (1) mvstr = '<INPUT type="hidden" name="megavar" value="(.*?)">' m = re.search (mvstr, self.tfile.contents) self.megavar = m.group (1) imgstr = '<TD>Enter this </TD>\s*?<TD width="100" align="center" height="40"><img src="([^"]*?)" border="0" alt=""></TD>\s*?<TD> here:</TD>' m = re.search (imgstr, self.tfile.contents) self.iurl = m.group (1) self.tfile = TempFile (self.iurl) self.tfile.completed_cb = self.stage_captcha_download_completed self.tfile.start () def stage_captcha_download_completed (self, tfile): self.code = self.downman.application.prompt_for_captcha (tfile.contents) if self.code != None: post_data = 'captchacode=%s&megavar=%s&captcha=%s' % (self.captchacode, self.megavar, self.code) self.tfile = TempFile (self.url, post_data) self.tfile.completed_cb = self.stage_download_completed self.tfile.start () else: self.status = 'Invalid Code' self.set_state (STATE_DISABLED) def handle_correct_captcha (self, match): num = int (match.group (1)) m = re.search ('id="downloadlink"><a href="([^"]*)"', self.tfile.contents) self.furl = m.group (1) self.timeout = Timeout (num, self.handle_start_download, self.print_progress) self.set_state (STATE_WAITING) def handle_start_download (self): dpath = self.downman.config.get_property ('DefaultDownloadDirectory') self.location = os.path.join (dpath, re.search ('([^\/]*)$', self.furl).group (1)) rfrom = None if os.path.exists (self.location): s = os.stat (self.location) if s.st_size == self.total: self.set_state (STATE_COMPLETED) return if s.st_size == self.downloaded: rfrom = self.downloaded self.tfile = WriteFile (self.furl, self.location, None, self.url, rfrom) self.tfile.completed_cb = self.download_completed self.tfile.progress_cb = self.download_progress self.tfile.start () self.status = 'Downloading...' self.set_state (STATE_DOWNLOADING) def startup (self, data): self.name = data['name'] self.url = data['url'] self.downloaded = float (data['downloaded']) self.total = float (data['total']) self.state = int (data['state']) if data.has_key ('location'): self.location = data['location'] def shutdown (self): data = {} if self.state == STATE_CONNECTING: self.tfile.close () self.state = STATE_QUEUED elif self.state == STATE_DOWNLOADING: self.tfile.close () self.state = STATE_QUEUED elif self.state == STATE_WAITING: self.timeout.cancel () self.state = STATE_QUEUED elif self.state == STATE_INFO or self.state == STATE_INFO_COMPLETED: self.tfile.close () return data['name'] = self.name data['url'] = self.url data['downloaded'] = str (self.downloaded) data['total'] = str (self.total) data['state'] = str (self.state) data['match'] = MUDOWNLOAD_MATCH if self.location != None: data['location'] = self.location return data