def add(self): """""" link_file = None err_msg = None source = None wait = WAITING try: #Remove the filename from the url file_id = self.link.split("/oron.com/")[1].split("/")[0] self.link = "%s/%s" % (BASE_URL, file_id) cookie = cookielib.CookieJar() with URLClose(URLOpen(cookie).open(self.link)) as s: if self.wait_func(): return self.link, None, err_msg fname = None for line in s: if 'name="fname"' in line: fname = line.split('value="')[-1].split('"')[0] if fname is not None: dict_form = { "op": "download1", "usr_login": "", "id": file_id, "fname": fname, "referer": "", "method_free": " Regular Download " } headers = { "Content-type": "application/x-www-form-urlencoded", } with URLClose( URLOpen(cookie).open(self.link, urllib.urlencode(dict_form), headers=headers)) as sa: if self.wait_func(): return self.link, None, err_msg rand = None referer = None recaptcha_key = None for line in sa: if 'id="countdown"' in line: wait = int( line.split('id="countdown">')[-1].split( '<')[0].strip()) elif 'name="rand"' in line: rand = line.split('value="')[-1].split('"')[0] elif 'name="referer"' in line: referer = line.split('value="')[-1].split( '"')[0] elif "challenge?k=" in line: recaptcha_key = line.split( "challenge?k=")[-1].split('"')[0] if None not in (rand, referer, recaptcha_key): if self.wait_func( wait ): #wait... if true: download was stopped return self.link, None, err_msg recaptcha_link = "http://www.google.com/recaptcha/api/challenge?k=%s" % recaptcha_key c = Recaptcha(BASE_URL, recaptcha_link, self.wait_func) challenge, response = c.solve_captcha() if response is not None: dict_form = { "op": "download2", "id": file_id, "rand": rand, "referer": referer, "method_free": " Regular Download ", "method_premium": "", "recaptcha_challenge_field": challenge, "recaptcha_response_field": response, "down_direct": "1" } with URLClose( URLOpen(cookie).open( self.link, urllib.urlencode(dict_form), headers=headers)) as sb: if self.wait_func(): return self.link, None, err_msg for line in sb: if 'class="atitle"' in line: link_file = line.split( 'href="')[-1].split('"')[0] elif "Wrong captcha" in line: raise CaptchaException( "Wrong captcha") if link_file is not None: with URLClose( URLOpen(cookie).open( link_file, range=(self.content_range, None)), always_close=False) as sc: source = sc else: #link not found raise LinkErrorException("Link Error") else: raise CaptchaException( "No response from the user") else: #limit exceeded #TODO: Fix for big files (+1gb), since regular users cant download them raise LimitExceededException("Limit Exceeded") else: #link not found raise LinkErrorException("Link Error") except (urllib2.URLError, httplib.HTTPException, socket.error) as err: err_msg = err except (LimitExceededException, CaptchaException, LinkErrorException) as err: if isinstance(err, LimitExceededException): self.set_limit_exceeded(True) err_msg = err logger.info(err) except Exception as err: err_msg logger.exception(err) return link_file, source, err_msg #puede ser el objeto archivo o None.
def add(self): #wait_func: wait method from thread_managed """ TODO: Refactory. """ link_file = None err_msg = None source = None wait = WAITING try: file_id = self.link.split("turbobit.net/")[-1].split("/")[0].rstrip(".html") self.link = BASE_URL + "/download/free/" + file_id cookie = cookielib.CookieJar() opener = URLOpen(cookie) #cookielib with URLClose(opener.open(self.link)) as s1: key = None for line in s1: if "challenge?k=" in line: key = line.split('challenge?k=')[-1].split('"')[0] recaptcha_link = "http://www.google.com/recaptcha/api/challenge?k=%s" % key c = Recaptcha(BASE_URL, recaptcha_link, self.wait_func) break if key is None: raise LimitExceededException("Limit Exceeded") for retry in range(3): challenge, response = c.solve_captcha() if response is not None: form = urllib.urlencode([("recaptcha_challenge_field", challenge), ("recaptcha_response_field", response), ("captcha_type", "recaptcha"), ("captcha_subtype", "")]) with URLClose(opener.open(self.link, form)) as s2: found = False for line in s2: if "limit :" in line: found = True try: wait = int(line.split(":")[-1].split(",")[0]) / 100 #ms except Exception as err: logger.exception(err) wait = WAITING elif "captcha-error" in line: err_msg = "Wrong captcha" if found: if self.wait_func(wait+1): return self.link, None, err_msg url = BASE_URL + "/download/getLinkAfterTimeout/" + file_id print url with URLClose(opener.open(url)) as s3: for line in s3: print line if "href='/download/redirect" in line: tmp = line.split("href='")[-1].split("'")[0] redir_url = BASE_URL + tmp print redir_url with URLClose(opener.open(redir_url)) as s4: for line in s4: if 'href="' in line: link_file = line.split('href="')[-1].split('"')[0] #print link_file with URLClose(opener.open(link_file, range=(self.content_range, None)), always_close=False) as s5: source = s5 raise FileLinkFoundException() else: raise CaptchaException("No response from the user") except (urllib2.URLError, httplib.HTTPException, socket.error) as err: err_msg = err except (FileLinkFoundException, LimitExceededException, LinkErrorException, CaptchaException) as err: if isinstance(err, LimitExceededException): self.set_limit_exceeded(True) err_msg = err logger.info(err) except Exception as err: logger.exception(err) err_msg = err return link_file, source, err_msg
def add(self): #wait_func: wait method from thread_managed """ TODO: Refactory. """ link_file = None err_msg = None source = None wait = WAITING ajax_id = None recaptcha_key = None try: file_id = self.link.split("/files/")[1].split("/")[0] cookie = cookielib.CookieJar() opener = URLOpen(cookie) #cookielib ajax_id_url = BASE_URL + "/files-ajax/" + file_id + "/request.html" with URLClose(opener.open(self.link)) as s1: for line in s1: if "var ajaxdl" in line: ajax_id = line.split('"')[1] elif "challenge?k=" in line: recaptcha_key = line.split("challenge?k=")[-1].split( '"')[0].strip() if not ajax_id: #not recaptcha_key or not ajax_id: raise LinkErrorException("Link not found.") if self.wait_func(): return self.link, None, err_msg #wait time. #note: bitshare does not care for this. It can be skipped. #headers = {"Accept:": "application/json", } form = urllib.urlencode([("request", "generateID"), ("ajaxid", ajax_id)]) with URLClose(opener.open(ajax_id_url, form)) as s2: response = s2.read() #may return ERROR: explanation wait = int(response.split(":")[1]) #file:60:1 if wait > 120: raise LimitExceededException("Limit Exceeded") if self.wait_func(wait): return self.link, None, err_msg #recaptcha. #note: bitshare does not care for this. It can be skipped. if recaptcha_key: recaptcha_link = "http://www.google.com/recaptcha/api/challenge?k=%s" % recaptcha_key for retry in range(3): c = Recaptcha(BASE_URL, recaptcha_link, self.wait_func) challenge, response = c.solve_captcha() if response is not None: form = urllib.urlencode([ ("request", "validateCaptcha"), ("ajaxid", ajax_id), ("recaptcha_challenge_field", challenge), ("recaptcha_response_field", response) ]) response_ = opener.open(ajax_id_url, form).read( ) #may return ERROR: explanation or SUCCESS if not "ERROR" in response_: break else: raise CaptchaException("No response from the user") if "ERROR" in response_: raise CaptchaException("Wrong captcha") if self.wait_func(): return self.link, None, err_msg #get download link form = urllib.urlencode([("request", "getDownloadURL"), ("ajaxid", ajax_id)]) with URLClose(opener.open(ajax_id_url, form)) as s3: response = s3.read() link_file = response.split("http")[-1] link_file = "http" + link_file with URLClose(URLOpen(cookie).open(link_file, range=(self.content_range, None)), always_close=False) as sc: source = sc except (urllib2.URLError, httplib.HTTPException, socket.error) as err: err_msg = err except (LimitExceededException, CaptchaException, LinkErrorException) as err: if isinstance(err, LimitExceededException): self.set_limit_exceeded(True) err_msg = err logger.info(err) except Exception as err: err_msg logger.exception(err) return link_file, source, err_msg