Hace un rato me encontraba en uno de los peores momentos del ocio en mis 19 primaveras y pues me vino la idea (maybe bad) de poder navegar por un Foro SMF de una forma menos tradicional... Por consola.
La idea sería que podamos realizar acciones básicas-intermedias mediante la consola, por ejemplo, Leer mensajes privados, navegar por el index y sus subforos, posteriormente poder llegar a realizar cambios de contraseña o llegar a personalizar nuestro perfil, todo desde nuestra querida Shell.
Estuve unos minutos al pc antes de irme a clases y armé algo más o menos como una idea:
Código
Con un par de líneas de código se puede hacer que el usuario que ingrese sea visitante.
#-*-coding: utf-8 -*- # Contacto : Twitter @0x5d - Correo : 0000x5d@gmail.com import urllib, urllib2, re, os from HTMLParser import HTMLParser class Parseador(HTMLParser): def handle_data(self, data): print data def clear(): if os.name == "nt": os.system("cls") else: os.system("clear") parseando = Parseador() cookie = urllib2.HTTPCookieProcessor() opener = urllib2.build_opener(cookie) urllib2.install_opener(opener) try: print "Nota: Solo insertar http://www.elsitiosmf.com , sin /index.php" foro = raw_input("URL Foro SMF:") usuario = raw_input("Usuario:") clave = raw_input("Password:") datos = {"user":usuario, "passwrd":clave, "cookielength":"9000","hash_passwrd":""} login = urllib2.urlopen("%s/index.php?action=login2"%foro, urllib.urlencode(datos)).read() if "logout" in login: clear() var = urllib2.urlopen("%s/SSI.php?ssi_function=welcome"%foro).read() datos = re.findall("Hola, <strong>(.*)</strong>", var) print "Bienvenido", datos[0] while True: opciones_primarias = input(""" 1.- Ver MP's. 2.- Navegar en el index. Ingresa una opcion:""") if opciones_primarias == 1: guarda_id = [] guarda_asunto = [] view_mp = urllib2.urlopen("%s/index.php?action=pm"%foro).read() print "Formato \nID : ASUNTO " for id_msj, asunto_msj in re.findall("<a href=\"#msg(.*)\">(.*)</a>", view_mp): guarda_id.append(id_msj) guarda_asunto.append(asunto_msj) print id_msj, asunto_msj leer_id = raw_input("Ingrese el ID del mensaje a Leer:") clear() if leer_id in guarda_id: get_msj = re.findall("<div class=\"inner\" id=\"msg_%s\">(.*)</div>"%leer_id, view_mp) print "Asunto:%s \n\n\nContenido del mensaje:"%guarda_asunto[guarda_id.index(leer_id)] parseando.feed(get_msj[0]) else: print "No existe el ID ingresado" if opciones_primarias == 2: board_name_array = [] board_id_array = [] index = urllib2.urlopen("%s/index.php"%foro).read() print "Formato:\n Nombre del foro : BOARD ID" for nombre in re.findall("<a class=\"subject\"(.*)>(.*)</a>", index): for board_id in re.findall("name=\"b([0-9]*)\"", nombre[0]): print "Nombre:", nombre[1] , "| Board id:", board_id board_name_array.append(nombre[1]) board_id_array.append(board_id) opciones_index = input(""" 1.- Entrar en una categoria. 2.- Volver al menu principal. Ingresa tu opcion: """) if opciones_index == 1: board = raw_input("Inserta BOARD ID:") if board in board_id_array: enter_board = urllib2.urlopen("%s/index.php?board=%s"%(foro,board)).read() if "Subforos" in enter_board: respuesta_subforos = raw_input("Subforos detectados, mostrar nombres?(s/n)").lower() if respuesta_subforos == "n": print "No se mostraran subforos" else: print "SHOW CATEGORIES" #Aca se veran los subforos y posteriormente los mensajes en el foro + el ID else: print "Esta categoria no posee subforos" # Aca se muestran los mensajes en el foro junto a su ID else: print "No existe el Board ID Ingresado." else: print "Usuario o Clave mal ingresados" except: print "Not connected to %s"%foro
Le hice que podamos leer mensajes privados a partir de su ID, además poder ver los foros en el index e ingresar a algunos de ellos, si algún foro posee sub-foro, el programa debe avisar antes... En fin, ustedes lean el código y me dicen si no es tan mala la idea o si es pésima
PD: No he añadido control de errores vía try & except, ya que es una fase "beta" . Una vez puestas las pilas en el código no se escapará ni un error
Saludos, Javier.