Blogalia. Un web para todos

Publicación de historias en Blogalia (0.3)

#!/usr/bin/python2.2
"""Publicación de historias en blogalia 
Autor:   Fernando Tricas 
Fecha:   14/V/2002 
Versión: 0.3 
Contacto: fernand0 (en) hotpop.com 
 
La historia que se ha de enviar es un fichero de texto, que contiene en la  
primera línea el título, y el resto de se considera el cuerpo de la 
historia. Los saltos de línea serán tal cual aparezcan en el fichero, 
se recomienda usar un editor que no inserte saltos de línea. 
Seguramente fuera conveniente que se consideraran saltos de línea cuando 
aparezca un espacio en blanco o algo así (como LaTeX). 
 
TODO: 
- Añadir opción para generar fichero ~/.blogalia 
- Añadir opción para publicar en la primera bitácora 
- ... 
borrarHistoria() 
traerPlantilla() 
actualizarPlantilla() 
 
Cambios entre la 0.2 y la 0.3: 
        Ahora el programa comprueba la existencia de un fichero llamado 
        ~/.blogalia y trata de leer el usuario y la clave allí 
        Formato del fichero      
----------------------- Empieza a partir de aquí 
[DEFAULT] 
 
usuario = elUsuario 
clave = laClave 
----------------------- Fin 
        Si el fichero no existe pregunta el usuario y la clave por teclado. 
        Comprueba cuántas bitácoras tiene el usuario, y permite elegir en  
        cuál de ellas se escribirá la historia. 
 
        Busca y guarda el identificador de la historia. 
 
        Guarda la historia en un fichero cuyo nombre es historia-aaaammddhhmmss 
        que contendrá, además de la historia, la url donde salió (con el 
        identificador generado por globalia. 

"""

import urllib,urllib2,re,sys

baseURL='http://www.blogalia.com/'

def usuario():
                # Usuario y Clave. Modificar el escrí.  
                # Fichero de configuración /home/ftricas/.blogalia 

                import os
                path = os.path.join(os.path.expanduser('~') , '.blogalia')
                # .blogalia en el 'home' del usuario, sea lo que sea eso en Win 
                # en MacOS anteriores al X, nada. 
                print path

                if (os.path.isfile(path)):
                                import ConfigParser
                                diccionarioConf = ConfigParser.ConfigParser()
                                diccionarioConf.read(path)

                                usuario = diccionarioConf.defaults()['usuario']
                                clave = diccionarioConf.defaults()['clave']
                else:
                                usuario = raw_input ('Usuario>> ')
                                import getpass
                                clave = getpass.getpass('Clave>> ')


                return usuario, clave

def seleccionarBitacora():
                parametros = usuario()
                datosPOST = 'iniciales='+parametros[0]+'&clave='+parametros[1]
                # Cargamos la página inicial de blogalia 
                # Seguramente bastará coger el PHPSESSID de entrar.php 
                url=baseURL+'entrar.php'
                f=urllib2.urlopen(url)

                # En la info está la galletita, entre otras cosas la PHPSESSID 
                # Echar un ojo a ClientCookie, 
                # http://wwwsearch.sourceforge.net/ClientCookie/ 
                #print f.info() 
                #print f.info()['Set-Cookie'] 
                C = f.info()['Set-Cookie']
                # Nos interesa sólo la primera parte, que es la que tiene el 
                # identificador de sesión. La añadimos a la lista de parámetros, 
                # eliminando lo que sobra. 
                datosPOST = re.sub(r';.*',r'',C)+ "&"+datosPOST

                # La url sigue siendo entrar.php con los datos del POST 
                f=urllib2.urlopen(url, datosPOST)
                # Voilà, tenemos la página de edición de historias. 
                doc = f.read()
                res =  re.findall(r'(bitacora\.historias\.php\?id=[0-9]*)([^>]*>)([^<]*)', doc)
                #print res 
                print "Bitácoras de las que es propietario"
                i = 1
                for titulo in res:
                        print i,')', titulo[2]
                        i = i + 1
                if (int(i)>1):
                        i = raw_input ('Seleccione una: ')
                else:
                        i = 1

                aDonde = res[int(i)-1][2]
                aURL = res[int(i)-1][0]
                return aDonde, aURL, C

def enviarHistoria(aDonde, aURL, galletita):
                print 'Página leida. Enviando historia a ', aDonde
                url = baseURL + aURL

                # Primero el título (primera línea del fichero historia) 
                f = open('historia', "r")
                # Conviene usar el urlencode para todo el lío del html, espacios, 
                # saltos, etc... 
                titular = f.readline().strip()
                cuerpo  = f.read()
                cuerpo  = cuerpo + '\n<!-- Publicado mediante blogalia.py -->\n'
                cuerpo  = cuerpo + '<!--¿Interesado en conseguirlo? Deje un mensaje en la última historia.-->\n'
                cuerpo  = cuerpo + '<!--Contacto: fernand0 (en) hotpop.com-->\n'

                datosPOST = urllib.urlencode({"registro[titulo]":titular,
                # Acción
                                        "accion":"Publicar",
                # Contenido (las demás líneas del fichero historia)
                                        "registro[contenido]=":cuerpo
                })
                # Ahora la sesión 
                # La cookie ya la tenemos en el formato adecuado. Mucho lío pasarla al 
                # diccionario y luego codificarla. 
                datosPOST = re.sub(r';.*',r'',galletita) + "&" + datosPOST

                #Vamos allá 
                f=urllib2.urlopen(url, datosPOST)
                print 'Historia enviada ...'

                doc=f.read()
                # Buscamos el identificador de la historia 
                res = re.search('(id_historia=)([0-9]*)',doc)

                import time # Para el nombre del fichero donde se guarda

                fArchivo = open('historia'+time.strftime("-%Y%m%d%H%M%S",time.localtime(time.time())),'w')
                fArchivo.write(titular)
                fArchivo.write(cuerpo)
                fArchivo.write('\n URL:')
                fArchivo.write(aDonde)
                fArchivo.write(' '+res.group(2))
                fArchivo.write('\n')
                fArchivo.close()

def borrarHistoria(aDonde, aURL, galletita):
                print 'Página leida. Borrando en ', aDonde
                url = baseURL + aURL
                print url
                datosPOST = re.sub(r';.*',r'',galletita)
                f=urllib2.urlopen(url, datosPOST)
                doc = f.read()
                bitacoraURL = re.search('(titular[^>]*>[^>]*>[^"]*")(http[^"]*)',doc)
                xmlURL =  doc[bitacoraURL.start(2):bitacoraURL.end(2)]+'rdf.xml'
                bitacoraXML = urllib2.urlopen(xmlURL)

                # Tengo el xml, no lo voy a analizar, porque creo que será 
                # suficiente con utilizar búsquedas de lo que necesitamos. 
                # Naturalmente, sería más elegante usar XML.py y todo eso... 

                contenidoXML = bitacoraXML.read()
                res = re.findall(r'(<title>)([^<]*)(</title>)([^<]*)(<link>)([^<]*)(</link>)', contenidoXML)
                i = 1
                for titulo in res:
                        if (i > 1):
                                print i-1,')', titulo[1], titulo[5]
                        i = i + 1
                i = raw_input ('Seleccione una: ')
                print 'Borraremos ... ',  res[int(i)][1], res[int(i)][5]
                #http://aeiou.blogalia.com/?/historias/1106 
                pos = re.search(r'/[0-9]+',res[int(i)][5])
                numerito = res[int(i)][5][pos.start()+1:pos.end()]
                print "El numerito -> ", numerito

                url = baseURL + '/bitacora.historias.php'
                datosPOST = urllib.urlencode({
                "registro[id_librinho]":numerito,
                "accion":"Borrar",
                "id_historia":numerito})
                # Ahora la sesión 
                # La cookie ya la tenemos en el formato adecuado. Mucho lío pasarla al 
                # diccionario y luego codificarla. 
                datosPOST = re.sub(r';.*',r'',galletita) + "&" + datosPOST

                #Vamos allá 
                f=urllib2.urlopen(url, datosPOST)
                print 'Historia borrada, espero no haber roto nada...'
                #/bitacora.historias.php?accion=Editar&id_historia=1106&PHPSESSID=a9fcaf6af1bdfec4020aa479fc73d72c 


if (__name__ == '__main__'):
        sel = raw_input (""" 
        Seleccione una:  
        n)ueva historia 
        b)orrar historia 
        -> """)
        print 'Ha elegido ', sel

        aDonde, aURL, galletita = seleccionarBitacora()
        if (sel == 'n'):
                enviarHistoria(aDonde, aURL, galletita)
        if (sel == 'b'):
                borrarHistoria(aDonde, aURL, galletita)





    


Noticias sobre el desarrollo de Blogalia

Histórico

<Febrero 2025
Lu Ma Mi Ju Vi Sa Do
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28    
             


Recursos

Proyectos

Otras bitácoras

Canal RDF






 
PostgreSQL

PHP

Python


© 2002-2003 Blogalia.com <blogalia@blogalia.com>


Blogalia