# -*- coding: utf-8 -*- import re import urllib import urlparse from core import scrapertools from core import servertools from core.item import Item from platformcode import config, logger from platformcode import platformtools MAIN_HEADERS = [] MAIN_HEADERS.append(["Host", "mocosoftx.com"]) MAIN_HEADERS.append(["User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:8.0) Gecko/20100101 Firefox/8.0"]) MAIN_HEADERS.append(["Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"]) MAIN_HEADERS.append(["Accept-Language", "es-es,es;q=0.8,en-us;q=0.5,en;q=0.3"]) MAIN_HEADERS.append(["Accept-Charset", "ISO-8859-1,utf-8;q=0.7,*;q=0.7"]) MAIN_HEADERS.append(["Connection", "keep-alive"]) # Login: #
# pst: user=blablabla&passwrd=&cookielength=-1&hash_passwrd=78e88DSe408508d22f # doForm.hash_passwrd.value = hex_sha1(hex_sha1(doForm.user.value.php_to8bit().php_strtolower() + doForm.passwrd.value.php_to8bit()) + cur_session_id); def login(): # Averigua el id de sesión data = scrapertools.cache_page("http://mocosoftx.com/foro/login/") cur_session_id = scrapertools.get_match(data, 'form action="[^"]+" name="frmLogin" id="frmLogin" method="post" accept-charset="ISO-8859-1" onsubmit="hashLoginPassword\(this, \'([a-z0-9]+)\'') cur_session_id = "c95633073dc6afaa813d33b2bfeda520" logger.info("cur_session_id=" + cur_session_id) # Calcula el hash del password email = config.get_setting("mocosoftxuser", "mocosoftx") password = config.get_setting("mocosoftxpassword", "mocosoftx") logger.info("email=" + email) logger.info("password=" + password) # doForm.hash_passwrd.value = hex_sha1(hex_sha1(doForm.user.value.php_to8bit().php_strtolower() + doForm.passwrd.value.php_to8bit()) + cur_session_id); hash_passwrd = scrapertools.get_sha1(scrapertools.get_sha1(email.lower() + password.lower()) + cur_session_id) logger.info("hash_passwrd=" + hash_passwrd) # Hace el submit del email # post = "user="+email+"&passwrd=&cookieneverexp=on&hash_passwrd="+hash_passwrd post = urllib.urlencode({'user': email, "passwrd": password}) + "&cookieneverexp=on&hash_passwrd=" logger.info("post=" + post) headers = [] headers.append(["Host", "mocosoftx.com"]) headers.append(["User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36"]) headers.append(["Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"]) headers.append(["Accept-Language", "es-ES,es;q=0.8,en;q=0.6,gl;q=0.4"]) headers.append(["Accept-Encoding", "gzip, deflate"]) headers.append(["Connection", "keep-alive"]) headers.append(["Referer", "http://mocosoftx.com/foro/login/"]) headers.append(["Origin", "http://mocosoftx.com"]) headers.append(["Content-Type", "application/x-www-form-urlencoded"]) headers.append(["Content-Length", str(len(post))]) headers.append(["Cache-Control", "max-age=0"]) headers.append(["Upgrade-Insecure-Requests", "1"]) data = scrapertools.cache_page("http://mocosoftx.com/foro/login2/", post=post, headers=headers) logger.info("data=" + data) return True def mainlist(item): logger.info() itemlist = [] if config.get_setting("mocosoftxuser", "mocosoftx") == "": itemlist.append( Item(channel=item.channel, title="Habilita tu cuenta en la configuración...", action="settingCanal", url="")) else: if login(): item.url = "http://mocosoftx.com/foro/forum/" itemlist = foro(item) itemlist.append(Item(channel=item.channel, action="settingCanal", title="Configuración...", url="")) else: itemlist.append( Item(channel=item.channel, title="Cuenta incorrecta, revisa la configuración...", action="", url="", folder=False)) return itemlist def settingCanal(item): return platformtools.show_channel_settings() def foro(item): logger.info() itemlist = [] # Descarga la página data = scrapertools.cache_page(item.url, headers=MAIN_HEADERS) # Extrae los foros y subforos patron = '

]+>([^<]+)' matches = re.compile(patron, re.DOTALL).findall(data) scrapertools.printMatches(matches) for scrapedurl, scrapedtitle in matches: scrapedtitle = unicode(scrapedtitle, "iso-8859-1", errors="replace").encode("utf-8") title = ">> Foro " + scrapedtitle url = urlparse.urljoin(item.url, scrapedurl) # http://mocosoftx.com/foro/fotos-hentai/?PHPSESSID=nflddqf9nvbm2dd92 if "PHPSESSID" in url: url = scrapertools.get_match(url, "(.*?)\?PHPSESSID=") thumbnail = "" plot = "" itemlist.append(Item(channel=item.channel, title=title, action="foro", url=url, plot=plot, thumbnail=thumbnail, folder=True)) # Extrae los hilos individuales patron = '[^<]+' patron += '2 patronvideos = '\d+' matches = re.compile(patronvideos, re.DOTALL).findall(data) scrapertools.printMatches(matches) if len(matches) > 0: scrapedtitle = ">> Página siguiente" scrapedurl = urlparse.urljoin(item.url, matches[0]) if "PHPSESSID" in scrapedurl: scrapedurl = scrapertools.get_match(scrapedurl, "(.*?)\?PHPSESSID=") scrapedthumbnail = "" scrapedplot = "" itemlist.append(Item(channel=item.channel, title=scrapedtitle, action="foro", url=scrapedurl, plot=scrapedplot, thumbnail=scrapedthumbnail, folder=True)) return itemlist def findvideos(item): logger.info() itemlist = [] # Busca el thumbnail y el argumento data = scrapertools.cache_page(item.url) logger.info("data=" + data) try: thumbnail = scrapertools.get_match(data, '
.*?