def rutor_play(tid, pulsar): from contextlib import closing from bencode import bdecode from urlparse import urljoin from xbmctorrent.magnet import generate_magnet from xbmctorrent.utils import first, SafeDialogProgress from xbmctorrent.acestream import ace_supported with closing(SafeDialogProgress(delay_close=0)) as dialog: dialog.create(plugin.name) dialog.update(percent=0, line1="Получение информации о раздаче...") torrent_url = urljoin(BASE_URL, "download/%s" % tid) try: metadata = bdecode(url_get(torrent_url, headers=HEADERS)) except Exception: import xbmcgui plugin.log.error("Unexpected error: %s" % sys.exc_info()[0]) xbmcgui.Dialog().ok(plugin.name, "Не удалось получить данные от сервера") return dialog.update(percent=100, line1="Готово") if "files" in metadata["info"]: # and ace_supported(): items = [] for index, info in enumerate(metadata["info"]["files"]): name = "/".join(info["path"]) if not _rutor_valid_file(name): continue if plugin.get_setting("torrent_engine", int) == 1 and ace_supported(): path = plugin.url_for("torrent_play", url=torrent_url, index=index, name=name) else: path = plugin.url_for("play_file", uri=generate_magnet(metadata, name), index=index) items.append({"label": name, "path": path}) items = sorted(items, key=lambda x: x["label"]) if len(items) == 1: # start playback if torrent contains only one file plugin.redirect(items[0]["path"]) else: # ask to select which file to play import xbmcgui select_items = [item["label"] for item in items] select = xbmcgui.Dialog().select("Выберите файл для проигрывания", select_items) if select >= 0: plugin.redirect(items[select]["path"]) else: name = metadata["info"].get("name") or " / ".join(first(metadata["info"]["files"])["path"]) or "rutor.org" if plugin.get_setting("torrent_engine", int) == 1 and ace_supported(): path = plugin.url_for("torrent_play", url=torrent_url, index=0, name=name) else: path = plugin.url_for(["play", "play_with_pulsar"][int(pulsar)], uri=generate_magnet(metadata, name)) plugin.redirect(path)
def rutracker_play(tid, pulsar): from contextlib import closing from bencode import bdecode from urlparse import urljoin from xbmctorrent.magnet import generate_magnet from xbmctorrent.utils import first, SafeDialogProgress from xbmctorrent.acestream import ace_supported with closing(SafeDialogProgress(delay_close=0)) as dialog: dialog.create(plugin.name) dialog.update(percent=0, line1="Получение информации о раздаче...") try: data = url_get(urljoin(BASE_URL, "dl.php?t=%s" % tid)) metadata = bdecode(data) except Exception: plugin.log.error("Unexpected error: %s " % format_exc().split('\n')[-2]) xbmcgui.Dialog().ok(plugin.name, "Не удалось получить данные от сервера") return dialog.update(percent=100, line1="Готово") if "files" in metadata["info"]: # and ace_supported(): items = [] for index, info in enumerate(metadata["info"]["files"]): name = "/".join(info["path"]) decname = _rutracker_decode_try(name) if not _rutracker_valid_file(decname): continue name = uenc(decname) if plugin.get_setting("torrent_engine", int) == 1 and ace_supported(): path = plugin.url_for("play_torrent_raw", raw=data, index=index, name=name) else: path = plugin.url_for("play_file", uri=generate_magnet(metadata, name), index=index) items.append({"label": name, "path": path}) if len(items) == 1: # start playback if torrent contains only one file plugin.redirect(items[0]["path"]) else: select_items = [item["label"] for item in items] select = xbmcgui.Dialog().select("Выберите файл для проигрывания", select_items) if select >= 0: plugin.redirect(items[select]["path"]) else: name = metadata["info"].get("name") or " / ".join(first(metadata["info"]["files"])["path"]) or "rutracker.org" if plugin.get_setting("torrent_engine", int) == 1 and ace_supported(): path = plugin.url_for("play_torrent_raw", raw=data, index=0, name=name) else: path = plugin.url_for(["play", "play_with_pulsar"][int(pulsar)], uri=generate_magnet(metadata, name)) plugin.redirect(path)
def torrents3d_play(article): import xbmcgui from bs4 import BeautifulSoup from contextlib import closing from urlparse import urljoin from xbmctorrent.magnet import generate_magnet from xbmctorrent.utils import SafeDialogProgress article = int(article) with closing(SafeDialogProgress(delay_close=0)) as dialog: dialog.create(plugin.name) dialog.update(percent=0, line1=u"Получение информации о релизе...", line2="", line3="") url = urljoin(BASE_URL, "article/%d" % article) try: html_data = url_get(url, headers=HEADERS) soup = BeautifulSoup(html_data, "html5lib") torrent_href = soup.find("a", class_="genmed") if not torrent_href: dialog.update(percent=50, line2=u"Требуется авторизация. Авторизация...") if not plugin.get_setting("t3d_login") and not plugin.get_setting("t3d_passwd"): plugin.notify("Проверьте настройки авторизации.", delay=15000) return html_data = _torrents3d_login(url) soup = BeautifulSoup(html_data, "html5lib") torrent_href = soup.find("a", class_="genmed") if not torrent_href: xbmcgui.Dialog().ok(plugin.name, "Авторизация неудалась. Проверьте настройки авторизации.") return dialog.update(percent=100, line2=u"Обработка данных.") from bencode import bdecode title = "[%s] %s" % _torrents3d_cleantitle(soup.find("a", class_="tt-text").text) torrent_data = url_get(torrent_href["href"], headers=HEADERS) metadata = bdecode(torrent_data) plugin.redirect(plugin.url_for("play", uri=generate_magnet(metadata, uenc(title)))) except Exception: plugin.log.error("Cannot get data from remote server") xbmcgui.Dialog().ok(plugin.name, u"Не удалось получить данные от сервера") return
def play(uri, pulsar): if not uri.startswith("http://") and not uri.startswith("https://") and not uri.startswith("magnet:"): with open(uri, 'rb') as file: torrent_data = file.read() from xbmctorrent.magnet import generate_magnet from bencode import bdecode metadata = bdecode(torrent_data) uri = generate_magnet(metadata) if int(pulsar): from urllib import urlencode plugin.set_resolved_url("plugin://plugin.video.pulsar/play?%s" % urlencode({ "uri" : uri })) else: if uri.startswith("magnet:") and plugin.get_setting("magnet_boost", bool): plugin.log.info("Enabled magnet booster") uri = _boost_magnet(uri) from xbmctorrent.player import TorrentPlayer TorrentPlayer().init(uri).loop()
def play(uri, pulsar): if not uri.startswith("http://") and not uri.startswith( "https://") and not uri.startswith("magnet:"): with open(uri, 'rb') as file: torrent_data = file.read() from xbmctorrent.magnet import generate_magnet from bencode import bdecode metadata = bdecode(torrent_data) uri = generate_magnet(metadata) if int(pulsar): from urllib import urlencode plugin.set_resolved_url("plugin://plugin.video.pulsar/play?%s" % urlencode({"uri": uri})) else: if uri.startswith("magnet:") and plugin.get_setting( "magnet_boost", bool): plugin.log.info("Enabled magnet booster") uri = _boost_magnet(uri) from xbmctorrent.player import TorrentPlayer TorrentPlayer().init(uri).loop()
def rutracker_play(tid, pulsar): from copy import deepcopy from contextlib import closing from bencode import bencode, bdecode from urlparse import urljoin from xbmctorrent.magnet import generate_magnet from xbmctorrent.utils import first, SafeDialogProgress, get_quality_from_name, get_current_list_item from xbmctorrent.acestream import ace_supported with closing(SafeDialogProgress(delay_close=0)) as dialog: dialog.create(plugin.name) dialog.update(percent=0, line1="Получение информации о раздаче...") torrent_url = urljoin("http://dl.rutracker.org/forum/", "dl.php?t=%s" % tid) try: plugin.log.debug("loading data from uri: " + torrent_url) params = {"t": tid} import os, xbmc, cookielib cookie = cookielib.Cookie(version=0, name='bb_dl', value=tid, port=None, port_specified=False, domain='.rutracker.org', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False) data = url_get(torrent_url, headers=HEADERS, post=params, cookie=cookie) metadata = bdecode(data) plugin.log.debug("Metadata received " + str(metadata)) except: import xbmcgui plugin.log.error("Unexpected error: %s " % format_exc().split('\n')[-2]) xbmcgui.Dialog().ok(plugin.name, "Не удалось получить данные от сервера") return dialog.update(percent=100, line1="Готово") # Get currently selected item current_item = get_current_list_item() current_item.setdefault("stream_info", {}).update( get_quality_from_name(current_item['label'])) if "files" in metadata["info"] and ace_supported(): items = {} for index, info in enumerate(metadata["info"]["files"]): name = "/".join(info["path"]) if not _rutracker_valid_file(name): continue items[index] = deepcopy(current_item) items[index].update({ "label": name, "path": plugin.url_for("play_torrent_raw", raw=data, index=index, name=name), "is_playable": True }) items[index].setdefault("info", {}).update({ "title": name, }) # start playback if torrent contains only one file if len(items) == 1: index, item = items.popitem() if not plugin.get_setting("force_ace", bool): item["path"] = plugin.url_for("play", uri=generate_magnet( metadata, item["label"])) plugin.play_video(item) yield item else: plugin.add_sort_method('label') for i in items.values(): yield i else: name = metadata["info"].get("name") or " / ".join( first(metadata["info"]["files"])["path"]) or "rutor.org" if plugin.get_setting("force_ace", bool) and ace_supported(): current_item["path"] = plugin.url_for("play_torrent_raw", raw=data, index=0, name=name) else: current_item["path"] = plugin.url_for( ["play", "play_with_pulsar"][int(pulsar)], uri=generate_magnet(metadata, name)) current_item["is_playable"] = True plugin.play_video(current_item) yield current_item
def rutor_play(tid, pulsar): from copy import deepcopy from contextlib import closing from bencode import bencode, bdecode from urlparse import urljoin from xbmctorrent.magnet import generate_magnet from xbmctorrent.utils import first, SafeDialogProgress, get_quality_from_name, get_current_list_item from xbmctorrent.acestream import ace_supported with closing(SafeDialogProgress(delay_close=0)) as dialog: dialog.create(plugin.name) dialog.update(percent=0, line1="Получение информации о раздаче...") torrent_url = urljoin(DOWNLOAD_URL, "download/%s" % tid) try: metadata = bdecode(url_get(torrent_url, headers=HEADERS)) except: import xbmcgui plugin.log.error("Unexpected error: %s" % sys.exc_info()[0]) xbmcgui.Dialog().ok(plugin.name, "Не удалось получить данные от сервера") return dialog.update(percent=100, line1="Готово") # Get currently selected item current_item = get_current_list_item() current_item.setdefault("stream_info", {}).update(get_quality_from_name(current_item['label'])) if "files" in metadata["info"] and ace_supported(): items = {} for index, info in enumerate(metadata["info"]["files"]): name = "/".join(info["path"]) if not _rutor_valid_file(name): continue items[index] = deepcopy(current_item) items[index].update({ "label" : name, "path" : plugin.url_for("torrent_play", url=torrent_url, index=index, name=name), "is_playable" : True }) items[index].setdefault("info",{}).update({ "title" : name, }) # start playback if torrent contains only one file if len(items) == 1: index, item = items.popitem() if not plugin.get_setting("force_ace", bool): item["path"] = plugin.url_for("play", uri=generate_magnet(metadata, item["label"])) plugin.play_video(item) yield item else: plugin.add_sort_method('label') for i in items.values(): yield i else: name = metadata["info"].get("name") or " / ".join(first(metadata["info"]["files"])["path"]) or "rutor.org" if plugin.get_setting("force_ace", bool) and ace_supported(): current_item["path"] = plugin.url_for("torrent_play", url=torrent_url, index=0, name=name) else: current_item["path"] = plugin.url_for(["play","play_with_pulsar"][int(pulsar)], uri=generate_magnet(metadata, name)) current_item["is_playable"] = True plugin.play_video(current_item) yield current_item
def get_magnet(url): from bencode import bdecode from xbmctorrent.utils import url_get return generate_magnet(bdecode(url_get(url, headers=HEADERS)))
def rutor_play(tid, pulsar): from copy import deepcopy from contextlib import closing from bencode import bencode, bdecode from urlparse import urljoin from xbmctorrent.magnet import generate_magnet from xbmctorrent.utils import first, SafeDialogProgress, get_quality_from_name, get_current_list_item from xbmctorrent.acestream import ace_supported with closing(SafeDialogProgress(delay_close=0)) as dialog: dialog.create(plugin.name) dialog.update(percent=0, line1="Получение информации о раздаче...") torrent_url = urljoin(DOWNLOAD_URL, "download/%s" % tid) try: metadata = bdecode(url_get(torrent_url, headers=HEADERS)) except: import xbmcgui plugin.log.error("Unexpected error: %s" % sys.exc_info()[0]) xbmcgui.Dialog().ok(plugin.name, "Не удалось получить данные от сервера") return dialog.update(percent=100, line1="Готово") # Get currently selected item current_item = get_current_list_item() current_item.setdefault("stream_info", {}).update( get_quality_from_name(current_item['label'])) if "files" in metadata["info"] and ace_supported(): items = {} for index, info in enumerate(metadata["info"]["files"]): name = "/".join(info["path"]) if not _rutor_valid_file(name): continue items[index] = deepcopy(current_item) items[index].update({ "label": name, "path": plugin.url_for("torrent_play", url=torrent_url, index=index, name=name), "is_playable": True }) items[index].setdefault("info", {}).update({ "title": name, }) # start playback if torrent contains only one file if len(items) == 1: index, item = items.popitem() if not plugin.get_setting("force_ace", bool): item["path"] = plugin.url_for("play", uri=generate_magnet( metadata, item["label"])) plugin.play_video(item) yield item else: plugin.add_sort_method('label') for i in items.values(): yield i else: name = metadata["info"].get("name") or " / ".join( first(metadata["info"]["files"])["path"]) or "rutor.org" if plugin.get_setting("force_ace", bool) and ace_supported(): current_item["path"] = plugin.url_for("torrent_play", url=torrent_url, index=0, name=name) else: current_item["path"] = plugin.url_for( ["play", "play_with_pulsar"][int(pulsar)], uri=generate_magnet(metadata, name)) current_item["is_playable"] = True plugin.play_video(current_item) yield current_item
def torrents3d_play(article): import re, xbmcgui from bs4 import BeautifulSoup from contextlib import closing from urlparse import urljoin from xbmctorrent.magnet import generate_magnet from xbmctorrent.utils import SafeDialogProgress article = int(article) with closing(SafeDialogProgress(delay_close=0)) as dialog: dialog.create(plugin.name) dialog.update(percent=0, line1=u"Получение информации о релизе...", line2="", line3="") url = urljoin(BASE_URL, "article/%d" % article) try: html_data = url_get(url, headers=HEADERS) soup = BeautifulSoup(html_data, "html5lib") torrent_href = soup.find("a", class_="genmed") if not torrent_href: dialog.update(percent=50, line2=u"Требуется авторизация. Авторизация...") if not plugin.get_setting( "t3d_login") and not plugin.get_setting("t3d_passwd"): plugin.notify("Проверьте настройки авторизации.", delay=15000) return html_data = _torrents3d_login(url) soup = BeautifulSoup(html_data, "html5lib") torrent_href = soup.find("a", class_="genmed") if not torrent_href: xbmcgui.Dialog().ok( plugin.name, "Авторизация неудалась. Проверьте настройки авторизации.") return dialog.update(percent=100, line2=u"Обработка данных.") from bencode import bencode, bdecode title = "[%s] %s" % _torrents3d_cleantitle( soup.find("a", class_="tt-text").text) torrent_data = url_get(torrent_href["href"], headers=HEADERS) metadata = bdecode(torrent_data) plugin.redirect( plugin.url_for("play", uri=generate_magnet(metadata, uenc(title)))) except: plugin.log.error("Cannot get data from remote server") xbmcgui.Dialog().ok(plugin.name, u"Не удалось получить данные от сервера") return
def rutracker_play(tid, pulsar): from copy import deepcopy from contextlib import closing from bencode import bencode, bdecode from urlparse import urljoin from xbmctorrent.magnet import generate_magnet from xbmctorrent.utils import first, SafeDialogProgress, get_quality_from_name, get_current_list_item from xbmctorrent.acestream import ace_supported with closing(SafeDialogProgress(delay_close=0)) as dialog: dialog.create(plugin.name) dialog.update(percent=0, line1="Получение информации о раздаче...") torrent_url = urljoin("http://dl.rutracker.org/forum/", "dl.php?t=%s" % tid) try: plugin.log.debug("loading data from uri: " + torrent_url) params = {"t": tid} import os, xbmc, cookielib cookie = cookielib.Cookie(version=0, name='bb_dl', value=tid, port=None, port_specified=False, domain='.rutracker.org', domain_specified=False, domain_initial_dot=False, path='/', path_specified=True, secure=False, expires=None, discard=True, comment=None, comment_url=None, rest={'HttpOnly': None}, rfc2109=False) data = url_get(torrent_url, headers=HEADERS, post=params, cookie=cookie) metadata = bdecode(data) plugin.log.debug("Metadata received " + str(metadata)) except: import xbmcgui plugin.log.error("Unexpected error: %s " % format_exc().split('\n')[-2]) xbmcgui.Dialog().ok(plugin.name, "Не удалось получить данные от сервера") return dialog.update(percent=100, line1="Готово") # Get currently selected item current_item = get_current_list_item() current_item.setdefault("stream_info", {}).update(get_quality_from_name(current_item['label'])) if "files" in metadata["info"] and ace_supported(): items = {} for index, info in enumerate(metadata["info"]["files"]): name = "/".join(info["path"]) if not _rutracker_valid_file(name): continue items[index] = deepcopy(current_item) items[index].update({ "label": name, "path": plugin.url_for("play_torrent_raw", raw=data, index=index, name=name), "is_playable": True }) items[index].setdefault("info", {}).update({ "title": name, }) # start playback if torrent contains only one file if len(items) == 1: index, item = items.popitem() if not plugin.get_setting("force_ace", bool): item["path"] = plugin.url_for("play", uri=generate_magnet(metadata, item["label"])) plugin.play_video(item) yield item else: plugin.add_sort_method('label') for i in items.values(): yield i else: name = metadata["info"].get("name") or " / ".join(first(metadata["info"]["files"])["path"]) or "rutor.org" if plugin.get_setting("force_ace", bool) and ace_supported(): current_item["path"] = plugin.url_for("play_torrent_raw", raw=data, index=0, name=name) else: current_item["path"] = plugin.url_for(["play","play_with_pulsar"][int(pulsar)], uri=generate_magnet(metadata, name)) current_item["is_playable"] = True plugin.play_video(current_item) yield current_item