
Buenas gente. Este post tal vez sea interesante para aquellos que les guste programar o les gustaria hacerlo. Muchos conocen PosT!NGA, y sabran que esta hecho en Java. Pero a todos no nos gusta Java, especialmente porque es bastante ineficiente.
Motivado por esto decidi implementar las 2 clases mas importantes de PosT!NGA pero en Python. No voy a portar completamente la aplicacion a python, solo dejo esto como base para el que quiera portar el proyecto a este lenguaje.
Implementé 2 clases. Una la encargada de la generacion de tags de bbcode y la funcion pegado inteligente y la otra, de ser el nexo entre la aplicacion y taringa, es decir, la encargada de loguearse, postear, etc.
La clase analizador tiene metodos del tipo esSwf, esImagen, esLink,etc que dado una url chequea si es del tipo que corresponde al metodo. Luego encontrarán metodos como agregarXXXX donde XXXX es el tipo de contenido que quieren generar retornando un string con los tags bbcode aplicados a la cadena de entrada.
Por ejemplo para generar el bbode de un video de youtube hay que llamar al metodo
agregarYoutube("http://www.youtube.com/watch?v=X7UmRRs6DCs",True,True)
y les retorna el string
[ align=center][ swf=http://www.youtube.com/v/X7UmRRs6DCs?fs=1&hd=1?version=2]
Link: [url=http://www.youtube.com/watch?v=X7UmRRs6DCs ]http://www.youtube.com/watch?v=X7UmRRs6DCs[/url ][/align ]
La otra clase, encargada de postear y demas. Cuenta con los metodos:
login(usuario,password)
usuario y password son string con usuario y contraseña de Taringa. Devuelve True si se logueo correctamente, False caso contrario
getUserKey(usuario,password)
Cada usuario en Taringa cuenta con un userKey unico y es necesario para realizar acciones como postear, guardar borradores, comentar, etc.
postear(usuario,password,titulo,contenido,fuentes,privado,sinComentarios,categoria,propio,tags)
Aca quiero aclarar que esta clase no hace ningun tipo de validacion de datos de entrada. Por ejemplo, que los tags sean al menos 4 o que el titulo sea menor a 60 caracteres. Esos controles deben hacerse antes de llamar al metodo postear
Titulo es el string del titulo del post, contenido es el bbcode del post.
Fuentes es una lista de strings con las fuentes de informacion. Algo de la forma
["www.fuente1.com,"www.fuente2.com"...,"www.fuente5.com"]
Aca tampoco se controla que sean como mucho 5
Si el contenido es de su autoria deben pasar True como parametro propio y pueden dejar fuentes como una lista vacia. Taringa exige que si no es contenido propio (false) haya al menos una fuente de informacion
Privado y sinComentarios son valores logicos que setean si el post es privado y si se permiten comentarios
La categoria es el numero que corresponde a la categoria
Por ultimo tags es el string que contiene al menos los 4 tags
"tag1,tag2,tag3,tag4"
Este metodo puede devolver:
1. "No puedes realizar tantas acciones en tan poco tiempo. Vuelve a intentarlo en unos instantes"
2. "OK"
3. "Captcha"
4. "El codigo de la imagen es incorrecto"
Si la respuesta es OK, el post fue agregado, si devuelve captcha eso indica que taringa solicita el reconocimiento de un captcha
Si se recibe "Captcha" es necesario volver a ejecutar otro metodo llamado postearConCaptcha(...) que es igual al anterior pero agrega 3 parametros.
Challenge, captcha1 y captcha2
¿Que es eso del challenge?

Cada captcha tiene un id de identificacion que es el challenge y es algo de la forma:
03AHJ_VuvkqItKCKsg0aZ37N5oX1vEgKAM4rbxor22IeYMx-7M4EdiqmS5BWv_xDRikcZJSNIxSttD0y_VR-0HN0UXTlMayh4IQ1v6rvF1M_XN1Lz7iYY4XJfwCa6QGPkAsTxnzkQUkY4H0fiyKc_147VN2nEmRFehqw
getCaptcha() devuelve una lista con 2 parametros. Un challenge y el link de la imagen del captcha.
['03AHJ_VuvkqItKCKsg0aZ37N5oX1vEgKAM4rbxor22IeYMx-7M4EdiqmS5BWv_xDRikcZJSNIxSttD0y_VR-0HN0UXTlMayh4IQ1v6rvF1M_XN1Lz7iYY4XJfwCa6QGPkAsTxnzkQUkY4H0fiyKc_147VN2nEmRFehqw', 'http://www.google.com/recaptcha/api/image?c=03AHJ_VuvkqItKCKsg0aZ37N5oX1vEgKAM4rbxor22IeYMx-7M4EdiqmS5BWv_xDRikcZJSNIxSttD0y_VR-0HN0UXTlMayh4IQ1v6rvF1M_XN1Lz7iYY4XJfwCa6QGPkAsTxnzkQUkY4H0fiyKc_147VN2nEmRFehqw']
La imagen pueden verla en el navegador pegando el segundo parametro en él. Para el ejemplo anterior ese challenge correponde a esta imagen

Resumiendo:

Para postear primero hay que llamar al metodo postear(...) si devuelve captcha hay que llamar a getCaptcha, y guardar el challenge que luego lo vamos a necesitar. Con el link de la imagen pueden acceder a ella y obtener las 2 palabras
Ahora llamar el metodo postearConCaptcha con los mismos parametro que antes pero agregando, el challenge, el texto de la primera palabra del captcha y el texto de la segunda palabra
Si todo fue bien el post fue publicado
Esas son las principales clases y metodos para que puedan hacer su PosT!NGA en python a medida

Las 2 clases de PosT!NGA-py la dejo en el siguiente link.
Con un poco de pilas pueden hacer un postinga mucho mas elegante que el actual
Interfaz creada por @abrahametalero
Espero que les sirva. Saludos!
