96 lines
3.5 KiB
Python
Executable File
96 lines
3.5 KiB
Python
Executable File
# -*- coding: utf-8 -*-
|
|
import sys
|
|
PY3 = False
|
|
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int
|
|
|
|
import json
|
|
import random
|
|
from core import httptools
|
|
from core import scrapertools
|
|
from platformcode import platformtools, logger
|
|
|
|
files = None
|
|
|
|
def test_video_exists(page_url):
|
|
# from core .support import dbg;dbg()
|
|
types= "File"
|
|
msg = "The link has a problem."
|
|
id_video = None
|
|
get = ""
|
|
seqno = random.randint(0, 0xFFFFFFFF)
|
|
url = page_url.split("#")[1]
|
|
f_id = url.split("!")[1]
|
|
id_video = None
|
|
if "|" in url:
|
|
url, id_video = url.split("|")
|
|
post = {'a': 'g', 'g': 1, 'p': f_id}
|
|
isfolder = False
|
|
if "/#F!" in page_url:
|
|
get = "&n=" + f_id
|
|
post = {"a":"f","c":1,"r":0}
|
|
isfolder = True
|
|
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: '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
|
|
if isfolder:
|
|
req_api = json.loads(req_api)
|
|
else:
|
|
try:
|
|
req_api = json.loads(req_api)[0]
|
|
except:
|
|
req_api = json.loads(req_api)
|
|
logger.error(req_api)
|
|
if isinstance(req_api, (int, long)):
|
|
if req_api in codes:
|
|
msg = codes[req_api]
|
|
return False, msg
|
|
else:
|
|
#Comprobación limite cuota restante
|
|
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 = "The video exceeds the daily viewing limit."
|
|
return False, msg1
|
|
elif isinstance(files, (int, long)):
|
|
return False, "Error code %s" % str(files)
|
|
|
|
return True, ""
|
|
|
|
def get_video_url(page_url, premium=False, user="", password="", video_password=""):
|
|
page_url = page_url.replace('/embed#', '/#')
|
|
logger.debug("(page_url='%s')" % page_url)
|
|
video_urls = []
|
|
|
|
# si hay mas de 5 archivos crea un playlist con todos
|
|
# Esta función (la de la playlist) no va, hay que ojear megaserver/handler.py aunque la llamada este en client.py
|
|
if len(files) > 5:
|
|
media_url = c.get_play_list()
|
|
video_urls.append([scrapertools.get_filename_from_url(media_url)[-4:] + " [mega]", media_url])
|
|
else:
|
|
for f in files:
|
|
media_url = f["url"]
|
|
video_urls.append([scrapertools.get_filename_from_url(media_url)[-4:] + " [mega]", media_url])
|
|
|
|
return video_urls
|