def get_challenge(self, code): data = {} for find in re.findall( r'<input type=hidden name="([^"]+)" value="([^"]+)">'): data[find[0]] = find[1] data['adcopy_response'] = code url = self.path url = url[:url.find('media?c=')] + 'verify.noscript' data = util.post(url, data, random_ua=True) if not data: logging.error('Failed to submit challenge!') return None info = re.search(r'URL=(http[^"]+)', data) if not info: return None url = info.group(1) if self.secure: url = url.replace('http://', 'https://') data = util.get(url, random_ua=True) if data: return re.search(r'id=gibberish>([^<]+)', data).group(1) else: return None
def get(cls, file, use_first=True): if use_first: for home in cls.HOME_URLS: result = get(home + file) if result is not None: return result return None else: results = [] for home in cls.HOME_URLS: result = get(home + file) if result is not None: results.append(result) return results
def load(self): self.get_challenge_key() if self.secure: server = 'http://api.solvemedia.com' else: server = 'https://api-secure.solvemedia.com' path = '/papi/challenge.noscript?k=' self.path = server + path + self.challenge self.data = util.get(self.path, random_ua=True) if '>error: domain / ckey mismatch' in self.data: raise Exception('Domain / ckey mismatch') captcha_address = re.search(r'<img src="(/papi/media\?c=[^"]+)', self.data) if not captcha_address: captcha_address = re.search(r'src="(/papi/media\?c=[^"]+)', self.data) if captcha_address is None: raise Exception('Failed SolveMedia') else: self.captcha_address = captcha_address
def ask_for_code(self, link): data = util.get('http://api.recaptcha.net/challenge?k=' + self.id_, random_ua=True) challenge = re.search(r'challenge.*?:.*?\'(.*)?\',', data) server = re.search(r'server.*?:.*?\'(.*?)\',', data) if not challenge or not server: raise Exception('Failed to get ReCaptcha API response') self.challenge = challenge.group(1) self.server = server.group(1) self.captcha_address = self.server + 'image?c=' + self.challenge while self.tries < self.MAX_TRIES: if self.tries > 0: self.reload() code = self.get_code() if not self.challenge or not code: raise Exception('Invalid challenge or code!') data = { 'recaptcha_challenge_field': self.challenge, 'recaptcha_response_field': code } self.tries += 1 self.data = util.post(link, data, random_ua=True) info = re.search(r'challenge\?k=(.+?)"', self.data) if not info: # No ID found \o/ break self.id_ = info.group(1).replace('&error=1', '')
def get_challenge(self, code): data = {} for find in re.findall(r'<input type=hidden name="([^"]+)" value="([^"]+)">'): data[find[0]] = find[1] data['adcopy_response'] = code url = self.path url = url[:url.find('media?c=')] + 'verify.noscript' data = util.post(url, data, random_ua=True) if not data: logging.error('Failed to submit challenge!') return None info = re.search(r'URL=(http[^"]+)', data) if not info: return None url = info.group(1) if self.secure: url = url.replace('http://', 'https://') data = util.get(url, random_ua=True) if data: return re.search(r'id=gibberish>([^<]+)', data).group(1) else: return None
def reload(self): data = util.get('http://www.google.com/recaptcha/api/reload?c=' + self.challenge + '&k=' + self.id_ + '&reason=r&type=image&lang=en', random_ua=True) if not data: logging.error('Failed to reload ReCaptcha!') return False challenge = re.search(r'Recaptcha\.finish\_reload\(\'(.*?)\', \'image\'', data) if not challenge: raise Exception('Failed to reload captcha!') self.challenge = challenge.group(1) self.captcha_address = self.server + 'image?c=' + self.challenge
def get_mods(cls): mods = [] for link in cls.get_lines('filenames.txt'): data = get(link.strip()) if data is None: continue else: mods.extend(ModParser().parse(data)) return mods
def reload(self): data = util.get('http://www.google.com/recaptcha/api/reload?c=' + self.challenge + '&k=' + self.id_ + '&reason=r&type=image&lang=en', random_ua=True) if not data: logging.error('Failed to reload ReCaptcha!') return False challenge = re.search( r'Recaptcha\.finish\_reload\(\'(.*?)\', \'image\'', data) if not challenge: raise Exception('Failed to reload captcha!') self.challenge = challenge.group(1) self.captcha_address = self.server + 'image?c=' + self.challenge
def process(link, dest): data = util.get(link, random_ua=True) link_info = BOX_CHECK.match(link) info = BOX_EXTRACT.search(data) if not info: logging.error('Failed to process the download page for "%s"!', link) return False dl_link = ( 'https://app.box.com/index.php?rm=box_download_shared_file&shared_name=%s&file_id=%s' % (link_info.group(1), info.group(1))) with open(dest, 'wb') as stream: return util.download(dl_link, stream, random_ua=True)
def process(link, dest): data = util.get(link, random_ua=True) link_info = BOX_CHECK.match(link) info = BOX_EXTRACT.search(data) if not info: logging.error('Failed to process the download page for "%s"!', link) return False dl_link = ( 'https://app.box.com/index.php?rm=box_download_shared_file&shared_name=%s&file_id=%s' % (link_info.group(1), info.group(1)) ) with open(dest, 'wb') as stream: return util.download(dl_link, stream, random_ua=True)