def start_regular(self): if self.user and self.password and ACCOUNT.account_type == "Premium": console("trying with cool API") id_ = URL_ID_RE.search(self.url).group(1) self.file_url = API_DOWNLOAD % (self.user, self.password, id_) console(self.file_url) return False page_data = self.MAIN_URL_OPEN(self.url) try: self.regular_url = REGULAR_URL_RE.search(page_data).group(1) self.regular_url = "http://www.wupload.com/file/" + self.regular_url except Exception, e: msg = "Regular link not found" log.error(msg) log.error(e.message) tmp_dump(page_data, link) raise DownloadError(msg)
import re import json import urls from guicavane.Hosts.Base import * from guicavane.Utils.Log import console from guicavane.Utils.Debug import tmp_dump from guicavane.Utils.UrlOpen import UrlOpen display_name = "Cuevana" display_image = "cuevana.png" implements = ["Shows", "Movies", "Recomended", "Latest"] url_open = UrlOpen() log = console("Hosts Cuevana") def _match_or_empty_string(re_obj, data, group): try: return re_obj.search(data).group(group) except: return "" class Episode(BaseEpisode): _sources_re = re.compile('sources = ({.*?}), sel_source') _image_re = re.compile('<div class="img"><img src="(.*?)"/></div>') _description_re = re.compile('<h2>Sinopsis</h2>(.*?)<div class="sep">', re.DOTALL) _cast_re = re.compile("<a href='#!/buscar/actor:.*?'>(.*?)</a>")
import gobject import base64 from guicavane.Gettext import gettext from guicavane.Paths import HOSTS_IMAGES_DIR, SEP from guicavane.Utils.UrlOpen import UrlOpen, DownloadError from guicavane.Config import Config from guicavane.Accounts import ACCOUNTS from CaptchaWindow import CaptchaWindow, CAPTCHA_IMAGE_PATH from Base import BaseDownloader from guicavane.Utils.Log import console from guicavane.Utils.Debug import tmp_dump log = console("Downloaders Wupload") RECAPTCHA_CHALLENGE_URL = "http://api.recaptcha.net/challenge?k=" RECAPTCHA_IMAGE_URL = "http://www.google.com/recaptcha/api/image?c=" URL_ID_RE = re.compile(".*/file/(.*)/.*") REGULAR_URL_RE = re.compile('href="(.*?)\?start=1"') RECAPTCHA_CHALLENGE_ID_RE = re.compile('Recaptcha.create\("(.*?)"') RECAPTCHA_NEW_CHALLENGE_RE = re.compile("challenge : '(.+?)',") WAITING_TIME_RE = re.compile('var countDownDelay = (\d+);') TM_RE = re.compile("id='tm' name='tm' value='(\d+)' />") TM_HASH_RE = re.compile("id='tm_hash' name='tm_hash' value='(?P<value>[0-9a-f]*?)' />") FILE_URL_RE = re.compile('<span>Download Ready </span></h3>.*?' \ '<p><a href="(.*?)">', re.DOTALL) API_DOWNLOAD="http://api.wupload.com/link?method=getDownloadLink&u=%s&p=%s&ids=%s&redirect=true"
import time import urllib import socket import httplib import urllib2 import cookielib import functools from StringIO import StringIO from Cached import Cached from guicavane.Config import Config from guicavane.Paths import CACHE_DIR, COOKIES_FILE from guicavane.Utils.Log import console from guicavane.Constants import DEFAULT_REQUEST_TIMEOUT, CUSTOM_DNS log = console("UrlOpen") HEADERS = { 'User-Agent': 'Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 ' \ '(KHTML, like Gecko) Chrome/17.0.963.2 Safari/535.11', 'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.3', 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', } RETRY_TIMES = 5 cached = Cached.get() cached.set_cache_dir(CACHE_DIR) class DownloadError(Exception): """ Indicates a downloading error. """
""" Bitshare Downloader. """ import re import time import gobject from Base import BaseDownloader from guicavane.Gettext import gettext from guicavane.Utils.Log import console from guicavane.Paths import HOSTS_IMAGES_DIR, SEP from guicavane.Utils.UrlOpen import UrlOpen, DownloadError from CaptchaWindow import CaptchaWindow, CAPTCHA_IMAGE_PATH log = console("Downloaders Bitshare") AJAXDL_RE = re.compile('var ajaxdl = "(.*?)";') REQUEST_URL = "http://bitshare.com/files-ajax/%s/request.html" RECAPTCHA_CHALLENGE_URL = "http://api.recaptcha.net/challenge?k=" RECAPTCHA_IMAGE_URL = "http://www.google.com/recaptcha/api/image?c=" RECAPTCHA_CHALLENGE_ID_RE = re.compile('<script type="text/javascript" ' \ 'src="http://api.recaptcha.net/challenge\?k=(.+?) ">') RECAPTCHA_NEW_CHALLENGE_RE = re.compile("challenge : '(.+?)',") MAIN_URL_OPEN = UrlOpen(use_cache=False) CAPTCHA_URL_OPEN = UrlOpen(use_cache=False)
#!/usr/bin/env python # coding: utf-8 """ Megaupload Downloader. """ import re from guicavane.Utils.UrlOpen import UrlOpen from guicavane.Utils.Debug import tmp_dump from guicavane.Utils.Log import console from Base import BaseAccount log = console("Accounts.Megaupload") LOGIN_PAGE = "http://www.megaupload.com?c=login" ACCOUNT_PAGE = "http://www.megaupload.com?c=account" URL_OPEN = UrlOpen(use_cache=False) class Megaupload(BaseAccount): """ Megaupload's Account. """ name = "Megaupload" account_wait = {None: 10, 'Regular' : 10, 'Premium' : 0} def __init__(self): BaseAccount.__init__(self)
""" import re from hashlib import md5 import urls from guicavane.Hosts.Base import * from guicavane.Utils.Log import console from guicavane.Utils.UrlOpen import UrlOpen display_name = "Nooo" display_image = "nooo.png" implements = ["Movies"] url_open = UrlOpen() log = console("Hosts Noo") HOSTMAP = { 'http://bitshare.com': 'bitshare', 'http://megaupload.com': 'megaupload', } class Episode(BaseEpisode): pass # Not implemented class Season(BaseSeason): pass # Not implemented
from guicavane.Utils.Log import console from tempfile import NamedTemporaryFile log = console() def tmp_dump(data, what="Data"): """ Create a dump file of data in the temp directory, with a random name """ with NamedTemporaryFile(delete=False) as fd: name = fd.name fd.write(data) log.debug("Dumped '%s' in '%s'" % (what, name))
#!/usr/bin/env python # coding: utf-8 import os import sys import Cuevana # FIXME: always avaliable because it's guicavane's default from guicavane.Paths import MAIN_DIR from guicavane.Utils.Log import console log = console("Hosts") if sys.platform == "win32": APIS_DIR = os.path.join(MAIN_DIR, "Hosts") else: APIS_DIR = os.path.dirname(os.path.abspath(__file__)) AVALIABLE_APIS = [] apis = [] for dirname in os.listdir(APIS_DIR): if os.path.isdir(os.path.join(APIS_DIR, dirname)): apis.append("guicavane.Hosts." + dirname) for api in apis: try: AVALIABLE_APIS.append(__import__(api, fromlist=[api]).api) except Exception, error: log.warn("Couldn't import %s api: %s" % (api, error)) else: log.info('Adding api site "%s"' % api)
""" import re import time import gobject from guicavane.Gettext import gettext from guicavane.Paths import HOSTS_IMAGES_DIR, SEP from guicavane.Utils.UrlOpen import UrlOpen, DownloadError from Base import BaseDownloader from guicavane.Utils.Debug import tmp_dump from guicavane.Utils.Log import console log = console("Downloaders Megaupload") MEGALINK_RE = re.compile('<a.*?href="(http://.*megaupload.*/files/.*?)"') URL_OPEN = UrlOpen(use_cache=False) class Megaupload(BaseDownloader): """ Megaupload's Downloader. """ name = "Megaupload" icon_path = HOSTS_IMAGES_DIR + SEP + "megaupload.png" accept_ranges = True def __init__(self, gui_manager, url): BaseDownloader.__init__(self, URL_OPEN, gui_manager, url)
import gobject import base64 from guicavane.Gettext import gettext from guicavane.Paths import HOSTS_IMAGES_DIR, SEP from guicavane.Utils.UrlOpen import UrlOpen, DownloadError from guicavane.Config import Config from guicavane.Accounts import ACCOUNTS from CaptchaWindow import CaptchaWindow, CAPTCHA_IMAGE_PATH from Base import BaseDownloader from guicavane.Utils.Log import console from guicavane.Utils.Debug import tmp_dump log = console("Downloaders Wupload") RECAPTCHA_CHALLENGE_URL = "http://api.recaptcha.net/challenge?k=" RECAPTCHA_IMAGE_URL = "http://www.google.com/recaptcha/api/image?c=" URL_ID_RE = re.compile(".*/file/(.*)/.*") REGULAR_URL_RE = re.compile('href="(.*?)\?start=1"') RECAPTCHA_CHALLENGE_ID_RE = re.compile('Recaptcha.create\("(.*?)"') RECAPTCHA_NEW_CHALLENGE_RE = re.compile("challenge : '(.+?)',") WAITING_TIME_RE = re.compile('var countDownDelay = (\d+);') TM_RE = re.compile("id='tm' name='tm' value='(\d+)' />") TM_HASH_RE = re.compile( "id='tm_hash' name='tm_hash' value='(?P<value>[0-9a-f]*?)' />") FILE_URL_RE = re.compile('<span>Download Ready </span></h3>.*?' \ '<p><a href="(.*?)">', re.DOTALL) API_DOWNLOAD = "http://api.wupload.com/link?method=getDownloadLink&u=%s&p=%s&ids=%s&redirect=true"
import time import string import gobject import subprocess import Downloaders from guicavane.Config import Config from guicavane.Gettext import gettext from guicavane.Utils.Log import console from guicavane.Utils.UrlOpen import UrlOpen from guicavane.Paths import HOSTS_GUI_FILE from guicavane.Hosts.Base import BaseMovie, BaseEpisode from guicavane.Constants import HOSTS_VIEW_COLUMN_OBJECT, \ HOSTS_VIEW_COLUMN_TEXT log = console("Player") class Player(object): """ Class that takes care of the downloading and correctly playing the file. """ def __init__(self, gui_manager, file_object, file_path=None, download_only=False, choose_host=False): self.gui_manager = gui_manager self.config = Config.get()
#!/usr/bin/env python # coding: utf-8 """ Megaupload Downloader. """ import re import json from guicavane.Utils.UrlOpen import UrlOpen from guicavane.Utils.Debug import tmp_dump from guicavane.Utils.Log import console from Base import BaseAccount log = console("Accounts.Wupload") LOGIN_PAGE = "http://www.wupload/account/login" ACCOUNT_PAGE = "http://www.wupload/account/settings" CHECK_STATUS = "http://api.wupload.com/user?method=getInfo&format=json&u=%s&p=%s" URL_OPEN = UrlOpen(use_cache=False) class Wupload(BaseAccount): """ Wupload's Account. """ name = "Wupload" account_wait = {None: 60, 'Regular': 60, 'Premium': 0} premium = False def __init__(self): BaseAccount.__init__(self)
import re import json import urls from guicavane.Gettext import gettext from guicavane.Hosts.Base import * from guicavane.Utils.Log import console from guicavane.Utils.Debug import tmp_dump from guicavane.Utils.UrlOpen import UrlOpen display_name = "Cuevana" display_image = "cuevana.png" implements = ["Shows", "Movies", "Recomended", "Latest"] url_open = UrlOpen() log = console("Hosts Cuevana") def _match_or_empty_string(re_obj, data, group): try: return re_obj.search(data).group(group) except: return "" class Episode(BaseEpisode): _sources_re = re.compile('sources = ({.*?}), sel_source') _image_re = re.compile('<div class="img"><img src="(.*?)"/></div>') _description_re = re.compile('<h2>Sinopsis</h2>(.*?)<div class="sep">', re.DOTALL) _cast_re = re.compile("<a href='#!/buscar/actor:.*?'>(.*?)</a>") _genere_re = re.compile('<b>Género:</b>(.*?)</div>')
#!/usr/bin/env python # coding: utf-8 """ Megaupload Downloader. """ import re import json from guicavane.Utils.UrlOpen import UrlOpen from guicavane.Utils.Debug import tmp_dump from guicavane.Utils.Log import console from Base import BaseAccount log = console("Accounts.Wupload") LOGIN_PAGE = "http://www.wupload/account/login" ACCOUNT_PAGE = "http://www.wupload/account/settings" CHECK_STATUS = "http://api.wupload.com/user?method=getInfo&format=json&u=%s&p=%s" URL_OPEN = UrlOpen(use_cache=False) class Wupload(BaseAccount): """ Wupload's Account. """ name = "Wupload" account_wait = {None: 60, 'Regular' : 60, 'Premium' : 0} premium = False
#!/usr/bin/env python # coding: utf-8 """ Megaupload Downloader. """ import re from guicavane.Utils.UrlOpen import UrlOpen from guicavane.Utils.Debug import tmp_dump from guicavane.Utils.Log import console from Base import BaseAccount log = console("Accounts.Megaupload") LOGIN_PAGE = "http://www.megaupload.com?c=login" ACCOUNT_PAGE = "http://www.megaupload.com?c=account" URL_OPEN = UrlOpen(use_cache=False) class Megaupload(BaseAccount): """ Megaupload's Account. """ name = "Megaupload" account_wait = {None: 10, 'Regular': 10, 'Premium': 0} def __init__(self): BaseAccount.__init__(self) def login(self, username, password): """
""" ThreadRunner. This module provides the class GtkThreadRunner that is used to run a function on a thread and return the result when it's done """ import Queue import gobject import threading import traceback from guicavane.Utils.Log import console from StringIO import StringIO log = console("ThreadRunner") class GtkThreadRunner(threading.Thread): """ Run `func` in a thread with `args` and `kwargs` as arguments, when finished call callback with the result obtained or an exception caught. """ def __init__(self, callback, func, *args, **kwargs): threading.Thread.__init__(self) self.setDaemon(True) self.callback = callback self.func = func self.args = args
import time import string import gobject import subprocess import Downloaders from guicavane.Config import Config from guicavane.Gettext import gettext from guicavane.Utils.Log import console from guicavane.Utils.UrlOpen import UrlOpen from guicavane.Paths import HOSTS_GUI_FILE from guicavane.Hosts.Base import BaseMovie, BaseEpisode from guicavane.Constants import HOSTS_VIEW_COLUMN_OBJECT, \ HOSTS_VIEW_COLUMN_TEXT log = console("Player") class Player(object): """ Class that takes care of the downloading and correctly playing the file. """ def __init__(self, gui_manager, file_object, file_path=None, download_only=False, choose_host=False): self.gui_manager = gui_manager self.config = Config.get() self.file_object = file_object self.download_only = download_only
# coding: utf-8 """ ThreadRunner. This module provides the class GtkThreadRunner that is used to run a function on a thread and return the result when it's done """ import Queue import gobject import threading import traceback from guicavane.Utils.Log import console from StringIO import StringIO log = console("ThreadRunner") class GtkThreadRunner(threading.Thread): """ Run `func` in a thread with `args` and `kwargs` as arguments, when finished call callback with the result obtained or an exception caught. """ def __init__(self, callback, func, *args, **kwargs): threading.Thread.__init__(self) self.setDaemon(True) self.callback = callback self.func = func self.args = args self.kwargs = kwargs