From 1700c43a330e73edbbb2f018910cba2441c96da8 Mon Sep 17 00:00:00 2001 From: Alhaziel01 Date: Thu, 21 May 2020 16:15:41 +0200 Subject: [PATCH] Fix Mega --- lib/megaserver/client.py | 15 ++++++------- lib/megaserver/cursor.py | 15 ++++++++----- lib/megaserver/file.py | 5 ----- lib/megaserver/handler.py | 34 ++++++++++++++++-------------- lib/megaserver/server.py | 16 ++++++++------ servers/mega.py | 44 +++++++++++++++++++-------------------- 6 files changed, 67 insertions(+), 62 deletions(-) diff --git a/lib/megaserver/client.py b/lib/megaserver/client.py index a39c6cb0..525942ba 100644 --- a/lib/megaserver/client.py +++ b/lib/megaserver/client.py @@ -1,9 +1,10 @@ -import base64 -import json -import random -import struct -import time -import urllib +import base64, json, random, struct, time, sys, traceback +if sys.version_info[0] >= 3: + import urllib.request as urllib + xrange = range +else: + import urllib + from core import httptools from threading import Thread @@ -102,7 +103,7 @@ class Client(object): return files except: - print(traceback.format_exc()) + logger.info(traceback.format_exc()) pass return files diff --git a/lib/megaserver/cursor.py b/lib/megaserver/cursor.py index 37eeab2b..3a3f2693 100644 --- a/lib/megaserver/cursor.py +++ b/lib/megaserver/cursor.py @@ -1,5 +1,10 @@ -import urllib2 -import traceback +import sys, traceback +from platformcode import logger +if sys.version_info[0] >= 3: + from urllib.request import Request, urlopen +else: + from urllib2 import Request, urlopen + class Cursor(object): def __init__(self, file): @@ -18,14 +23,14 @@ class Cursor(object): file = self._file._client.api_req({'a': 'g', 'g': 1, 'p': self._file.file_id}) self._file.url= file["g"] - req = urllib2.Request(self._file.url) + req = Request(self._file.url) req.headers['Range'] = 'bytes=%s-' % (offset) try: - self.conn = urllib2.urlopen(req) + self.conn = urlopen(req) try: self.prepare_decoder(offset) except: - print(traceback.format_exc()) + logger.error(traceback.format_exc()) except: self.mega_request(offset, True) diff --git a/lib/megaserver/file.py b/lib/megaserver/file.py index 2299eedb..e91fe1f8 100644 --- a/lib/megaserver/file.py +++ b/lib/megaserver/file.py @@ -28,8 +28,3 @@ class File(object): self.cursor = True self.cursors.append(c) return c - - - - - diff --git a/lib/megaserver/handler.py b/lib/megaserver/handler.py index 404fca12..323ef8a2 100644 --- a/lib/megaserver/handler.py +++ b/lib/megaserver/handler.py @@ -1,13 +1,16 @@ -import BaseHTTPServer -import urlparse -import time -import urllib -import types -import os -import re +import time, os, re, sys + +if sys.version_info[0] >= 3: + from http.server import BaseHTTPRequestHandler + import urllib.request as urllib + import urllib.parse as urlparse +else: + from BaseHTTPServer import BaseHTTPRequestHandler + import urlparse + import urllib -class Handler(BaseHTTPServer.BaseHTTPRequestHandler): +class Handler(BaseHTTPRequestHandler): protocol_version = 'HTTP/1.1' def log_message(self, format, *args): @@ -68,19 +71,19 @@ class Handler(BaseHTTPServer.BaseHTTPRequestHandler): if self.server._client.file and urllib.unquote(url)[1:].decode("utf-8") == self.server._client.file.name: range = False - self.offset=0 + self.offset = 0 size, mime = self._file_info() start, end = self.parse_range(self.headers.get('Range', "")) self.size = size - - if start <> None: + + if start != None: if end == None: end = size - 1 self.offset=int(start) self.size=int(end) - int(start) + 1 range=(int(start), int(end), int(size)) else: range = None - + self.send_resp_header(mime, size, range) return True @@ -98,7 +101,7 @@ class Handler(BaseHTTPServer.BaseHTTPRequestHandler): def send_resp_header(self, cont_type, size, range=False): - + if range: self.send_response(206, 'Partial Content') else: @@ -108,15 +111,14 @@ class Handler(BaseHTTPServer.BaseHTTPRequestHandler): self.send_header('Accept-Ranges', 'bytes') if range: - if isinstance(range, (types.TupleType, types.ListType)) and len(range)==3: + if isinstance(range, (tuple, list)) and len(range)==3: self.send_header('Content-Range', 'bytes %d-%d/%d' % range) self.send_header('Content-Length', range[1]-range[0]+1) else: raise ValueError('Invalid range value') else: self.send_header('Content-Length', size) - + self.send_header('Connection', 'close') self.end_headers() - \ No newline at end of file diff --git a/lib/megaserver/server.py b/lib/megaserver/server.py index 667d4166..35319951 100644 --- a/lib/megaserver/server.py +++ b/lib/megaserver/server.py @@ -1,14 +1,18 @@ -import traceback -import BaseHTTPServer +import sys, traceback +if sys.version_info[0] >= 3: + from http.server import HTTPServer +else: + from BaseHTTPServer import HTTPServer from SocketServer import ThreadingMixIn from threading import Thread +from platformcode import logger -class Server(ThreadingMixIn, BaseHTTPServer.HTTPServer): +class Server(ThreadingMixIn, HTTPServer): daemon_threads = True timeout = 1 def __init__(self, address, handler, client): - BaseHTTPServer.HTTPServer.__init__(self,address,handler) + HTTPServer.__init__(self,address,handler) self._client = client self.running=True self.request = None @@ -21,7 +25,7 @@ class Server(ThreadingMixIn, BaseHTTPServer.HTTPServer): try: self.handle_request() except: - print traceback.format_exc() + logger.error(traceback.format_exc()) def run(self): t=Thread(target=self.serve, name='HTTP Server') @@ -30,4 +34,4 @@ class Server(ThreadingMixIn, BaseHTTPServer.HTTPServer): def handle_error(self, request, client_address): if not "socket.py" in traceback.format_exc(): - print traceback.format_exc() \ No newline at end of file + logger.error(traceback.format_exc()) \ No newline at end of file diff --git a/servers/mega.py b/servers/mega.py index ee94c61d..fff94f31 100755 --- a/servers/mega.py +++ b/servers/mega.py @@ -12,9 +12,8 @@ from platformcode import platformtools, logger files = None def test_video_exists(page_url): - types= "Archivo" - gen = "o" - msg = "El link tiene algún problema." + types= "File" + msg = "The link has a problem." id_video = None get = "" seqno = random.randint(0, 0xFFFFFFFF) @@ -29,25 +28,24 @@ def test_video_exists(page_url): get = "&n=" + f_id post = {"a":"f","c":1,"r":0} isfolder = True - types= "Carpeta" - gen = "a" + types= "Folder" if id_video: #Aqui ya para hacer un check se complica, no hay una manera directa aún teniendo la id del video dentro de la carpeta return True, "" - - codes = {-1: 'Se ha producido un error interno en Mega.nz', - -2: 'Error en la petición realizada, Cod -2', - -3: 'Un atasco temporal o malfuncionamiento en el servidor de Mega impide que se procese su link', - -4: 'Ha excedido la cuota de transferencia permitida. Vuelva a intentarlo más tarde', - -6: types + ' no encontrad' + gen + ', cuenta eliminada', - -9: types + ' no encontrad'+ gen, - -11: 'Acceso restringido', - -13: 'Está intentando acceder a un archivo incompleto', - -14: 'Una operación de desencriptado ha fallado', - -15: 'Sesión de usuario expirada o invalida, logueese de nuevo', - -16: types + ' no disponible, la cuenta del uploader fue baneada', - -17: 'La petición sobrepasa su cuota de transferiencia permitida', - -18: types + ' temporalmente no disponible, intentelo de nuevo más tarde' + + codes = {-1: 'An internal error has occurred in Mega.nz', + -2: 'Error in the request made, Cod -2', + -3: 'A temporary jam or malfunction in the Mega server prevents your link from being processed', + -4: 'You have exceeded the allowed transfer fee. Try it again later', + -6: types + ' not find deleted account', + -9: types + ' not find', + -11: 'Restricted access', + -13: 'You are trying to access an incomplete file', + -14: 'Decryption operation failed', + -15: 'User session expired or invalid, log in again', + -16: types + ' not available, the uploader account was banned', + -17: 'The request exceeds your allowable transfer fee', + -18: types + ' temporarily unavailable, please try again later' } api = 'https://g.api.mega.co.nz/cs?id=%d%s' % (seqno, get) req_api = httptools.downloadpage(api, post=json.dumps([post])).data @@ -65,16 +63,16 @@ def test_video_exists(page_url): return False, msg else: #Comprobación limite cuota restante - from megaserver import Client + from lib.megaserver import Client + global c c = Client(url=page_url, is_playing_fnc=platformtools.is_playing) global files files = c.get_files() if files == 509: - msg1 = "[B][COLOR tomato]El video excede el limite de visionado diario que Mega impone a los usuarios Free." - msg1 += " Prueba en otro servidor o canal.[/B][/COLOR]" + msg1 = "The video exceeds the daily viewing limit." return False, msg1 elif isinstance(files, (int, long)): - return False, "Error codigo %s" % str(files) + return False, "Error code %s" % str(files) return True, ""