Hola, muy buenos días.
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:
#-*-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
Con un par de líneas de código se puede hacer que el usuario que ingrese sea visitante.
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.