コード例 #1
0
ファイル: tvdb.py プロジェクト: JonathanHuot/xbmctorrent
def search(name, complete=False):
    from xbmctorrent.caching import shelf
    import hashlib

    search_hash = hashlib.sha1(name).hexdigest()
    with shelf("com.thetvdb.search.%s" % search_hash) as show:
        if not show:
            import re
            import xml.etree.ElementTree as ET
            from xbmctorrent.utils import url_get

            dom = ET.fromstring(
                url_get(
                    "%s/api/GetSeries.php" % BASE_URL,
                    params={"seriesname": name},
                    headers=HEADERS,
                    with_immunicity=False,
                )
            )
            if not len(dom):
                return
            meta = dom2dict(dom[0])
            if not complete:
                return update_image_urls(meta)
            show.update(get(meta["id"]))
        return show
コード例 #2
0
def config():
    global _config
    if not _config:
        with shelf("xbmctorrent.antizapret.pac_config",
                   ttl=CACHE) as pac_config:
            if not pac_config:
                plugin.log.info("Fetching Antizapret PAC file")
                try:
                    pac_data = urllib2.urlopen(PAC_URL).read()
                except:
                    pac_data = ""

                r = re.search(r"\"PROXY (.*); DIRECT", pac_data)
                if not r:  # If antizapret bloked then read local copy
                    import os
                    with open(os.path.join(RESOURCES_PATH, "proxy.pac"),
                              "r") as pacfile:
                        pac_data = pacfile.read()

                r = re.search(r"\"PROXY (.*); DIRECT", pac_data)
                if r:
                    pac_config["server"] = r.group(1)
                    pac_config["domains"] = map(
                        lambda x: x.replace(r"\Z(?ms)", "").replace("\\", ""),
                        map(fnmatch.translate,
                            re.findall(r"\"(.*?)\",", pac_data)))
                else:
                    pac_config["server"] = None
                    pac_config["domains"] = []
            _config = pac_config
    return _config
コード例 #3
0
ファイル: antizapret.py プロジェクト: afedchin/xbmctorrent
def config():
    global _config
    if not _config:
        with shelf("xbmctorrent.antizapret.pac_config", ttl=CACHE) as pac:
            if not pac.get("pac"):
                plugin.log.info("Fetching Antizapret PAC file")
                try:
                    data = urllib2.urlopen(PAC_URL).read()
                except Exception:
                    data = ""

                pac["pac"] = {
                    "server": None,
                    "domains": []
                }
                r = re.search(r"\"PROXY (.*); DIRECT", data)
                if not r:  # If antizapret bloked then read local copy
                    import os
                    with open(os.path.join(RESOURCES_PATH, "proxy.pac"), "r") as pacfile:
                        data = pacfile.read()

                r = re.search(r"\"PROXY (.*); DIRECT", data)
                if r:
                    pac["pac"]["server"] = r.group(1)
                    pac["pac"]["domains"] = map(lambda x: x.replace(r"\Z(?ms)", "").replace("\\", ""), map(fnmatch.translate, re.findall(r"\"(.*?)\",", data)))

            _config = pac["pac"]
    return _config
コード例 #4
0
ファイル: immunicity.py プロジェクト: 1c0n/xbmctorrent
def config():
    global _config
    if not _config:
        with shelf("xbmctorrent.immunicity.pac_config", ttl=CACHE) as pac_config:
            plugin.log.info("Fetching Immunicity PAC file")
            pac_data = urllib2.urlopen(PAC_URL).read()
            pac_config["server"] = re.search(r"var proxyserver = '(.*)'", pac_data).group(1)
            pac_config["domains"] = map(lambda x: x.replace(r"\Z(?ms)", ""), map(fnmatch.translate, re.findall(r"\"(.*?)\",", pac_data)))
            _config = pac_config
    return _config
コード例 #5
0
def get(imdb_id):
    from xbmctorrent.caching import shelf
    with shelf("com.imdb.%s" % imdb_id) as movie:
        if not movie:
            try:
                import urllib2
                from xbmctorrent.utils import url_get_json
                movie.update(url_get_json("%s/movie/%s" % (BASE_URL, imdb_id), params={"api_key": API_KEY}, headers=HEADERS) or {})
            except urllib2.HTTPError:
                pass
        return dict(movie)
コード例 #6
0
ファイル: tmdb.py プロジェクト: buzzzzer/xbmctorrent
def get(imdb_id):
    from xbmctorrent.caching import shelf
    with shelf("com.imdb.%s" % imdb_id) as movie:
        if not movie:
            try:
                import urllib2
                from xbmctorrent.utils import url_get_json
                movie.update(url_get_json("%s/movie/%s" % (BASE_URL, imdb_id), params={"api_key": API_KEY}, headers=HEADERS, with_immunicity=False) or {})
            except urllib2.HTTPError:
                pass
        return dict(movie)
コード例 #7
0
ファイル: tmdb.py プロジェクト: roeiba/xbmc
def get(imdb_id):
    from xbmctorrent.caching import shelf
    with shelf("com.imdb.%s" % imdb_id) as movie:
        if not movie:
            try:
                import urllib2
                from xbmctorrent.utils import url_get_json
                movie.update(url_get_json("%s/movie/%s" % (BASE_URL, imdb_id), params={"api_key": API_KEY, "append_to_response": "credits"}, headers=HEADERS, with_immunicity=False) or {})
            except urllib2.HTTPError:
                pass
        return dict(movie)
コード例 #8
0
ファイル: tmdb.py プロジェクト: Mafarricos/xbmctorrent
def get(imdb_id):
    from xbmctorrent.caching import shelf
    with shelf("com.imdb.%s" % imdb_id) as movie:
        if not movie:
            try:
                import urllib2
                from xbmctorrent.utils import url_get_json
                movie.update(url_get_json("%s/movie/%s" % (BASE_URL, imdb_id), params={"api_key": API_KEY,"language": LANG, "append_to_response": "credits"}, headers=HEADERS, with_immunicity=False) or {})
                overview = movie.get('overview')
                if overview == None: movie.update(url_get_json("%s/movie/%s" % (BASE_URL, imdb_id), params={"api_key": API_KEY,"language": "en", "append_to_response": "credits"}, headers=HEADERS, with_immunicity=False) or {})		
                else: pass				
            except urllib2.HTTPError:
                pass
        return dict(movie)
コード例 #9
0
ファイル: immunicity.py プロジェクト: roeiba/xbmc
def config():
    global _config
    if not _config:
        with shelf("xbmctorrent.immunicity.pac_config",
                   ttl=CACHE) as pac_config:
            plugin.log.info("Fetching Immunicity PAC file")
            pac_data = urllib2.urlopen(PAC_URL).read()
            pac_config["server"] = re.search(r"var proxyserver = '(.*)'",
                                             pac_data).group(1)
            pac_config["domains"] = map(
                lambda x: x.replace(r"\Z(?ms)", ""),
                map(fnmatch.translate, re.findall(r"\"(.*?)\",", pac_data)))
            _config = pac_config
    return _config
コード例 #10
0
ファイル: tvdb.py プロジェクト: mnjstwins/xbmctorrent
def get(show_id):
    from xbmctorrent.caching import shelf
    with shelf("com.thetvdb.show.%s" % show_id) as show:
        if not show:
            import xml.etree.ElementTree as ET
            from xbmctorrent.utils import url_get

            dom = ET.fromstring(url_get(show_url(show_id), headers=HEADERS))
            if not len(dom):
                return
            meta = dom2dict(dom[0])
            meta = split_keys(meta, "actors", "genre", "writer")
            update_image_urls(meta)
            show.update(meta)
        return dict(show)
コード例 #11
0
ファイル: tvdb.py プロジェクト: Mafarricos/xbmctorrent
def get(show_id):
    from xbmctorrent.caching import shelf
    with shelf("com.thetvdb.show.%s" % show_id) as show:
        if not show:
            import xml.etree.ElementTree as ET
            from xbmctorrent.utils import url_get

            dom = ET.fromstring(url_get(show_url(show_id), headers=HEADERS, with_immunicity=False))
            if not len(dom):
                return
            meta = dom2dict(dom[0])
            meta = split_keys(meta, "actors", "genre", "writer")
            update_image_urls(meta)
            show.update(meta)
        return dict(show)
コード例 #12
0
ファイル: tvdb.py プロジェクト: mnjstwins/xbmctorrent
def search(name, complete=False):
    from xbmctorrent.caching import shelf
    import hashlib
    search_hash = hashlib.sha1(name).hexdigest()
    with shelf("com.thetvdb.search.%s" % search_hash) as show:
        if not show:
            import re
            import xml.etree.ElementTree as ET
            from xbmctorrent.utils import url_get
            dom = ET.fromstring(
                url_get("%s/api/GetSeries.php" % BASE_URL,
                        params={
                            "seriesname": name,
                        },
                        headers=HEADERS))
            if not len(dom):
                return
            meta = dom2dict(dom[0])
            if not complete:
                return update_image_urls(meta)
            show.update(get(meta["id"]))
        return show
コード例 #13
0
ファイル: eztv.py プロジェクト: ebababi/xbmctorrent
def eztv_shows_by_letter(letter):
    import re
    import xbmc
    import xbmcgui
    from bs4 import BeautifulSoup
    from contextlib import nested, closing
    from itertools import izip, groupby
    from concurrent import futures
    from xbmctorrent.scrapers import ungenerate
    from xbmctorrent.utils import terminating, url_get, SafeDialogProgress
    from xbmctorrent import tvdb

    with shelf("it.eztv.shows") as eztv_shows:
        if not eztv_shows:
            response = url_get("%s/showlist/" % BASE_URL, headers=HEADERS)
            soup = BeautifulSoup(response, "html5lib")
            nodes = soup.findAll("a", "thread_link")
            for node in nodes:
                show_id, show_named_id = node["href"].split("/")[2:4]
                show_name = node.text
                show_first_letter = show_name[0].lower()
                if re.match("\d+", show_first_letter):
                    show_first_letter = "0-9"
                eztv_shows.setdefault(show_first_letter, {}).update({
                    show_id: {
                        "id": show_id,
                        "named_id": show_named_id,
                        "name": node.text,
                    }
                })

    shows_list = sorted(eztv_shows[letter.lower()].values(), key=lambda x: x["name"].lower())

    with closing(SafeDialogProgress(delay_close=0)) as dialog:
        dialog.create(plugin.name)
        dialog.update(percent=0, line1="Fetching serie information...", line2="", line3="")

        state = {"done": 0}
        def on_serie(future):
            data = future.result()
            state["done"] += 1
            dialog.update(
                percent=int(state["done"] * 100.0 / len(shows_list)),
                line2=data and data["seriesname"] or "",
            )

        with futures.ThreadPoolExecutor(max_workers=5) as pool_tvdb:
            tvdb_list = [pool_tvdb.submit(tvdb.search, show["name"], True) for show in shows_list]
            [future.add_done_callback(on_serie) for future in tvdb_list]
            while not all(job.done() for job in tvdb_list):
                if dialog.iscanceled():
                    return
                xbmc.sleep(100)

    tvdb_list = [job.result() for job in tvdb_list]
    for i, (eztv_show, tvdb_show) in enumerate(izip(shows_list, tvdb_list)):
        if tvdb_show:
            item = tvdb.get_list_item(tvdb_show)
            item.update({
                "path": plugin.url_for("eztv_get_show_seasons", show_id=eztv_show["id"], tvdb_id=tvdb_show["id"])
            })
            yield item
        else:
            yield {
                "label": eztv_show["name"],
                "path": plugin.url_for("eztv_get_show_seasons", show_id=eztv_show["id"])
            }