Skip to content

Instantly share code, notes, and snippets.

@parzibyte
Created January 22, 2018 23:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save parzibyte/0cab5c504468e938fbbe6452705069cf to your computer and use it in GitHub Desktop.
Save parzibyte/0cab5c504468e938fbbe6452705069cf to your computer and use it in GitHub Desktop.
from wordpress_xmlrpc import Client, WordPressPost
from wordpress_xmlrpc.methods import posts
from wordpress_xmlrpc.methods.users import GetUserInfo
import os
import re
comando_para_limpiar_pantalla = "cls" #Si estás en otro sistema cámbialo al comando correcto (en Linux es clear)
def limpiar_pantalla():
os.system(comando_para_limpiar_pantalla)
def limpiar_html(html):
cleanr = re.compile('<.*?>')
cleantext = re.sub(cleanr, '', html).strip()
return cleantext
def pedir_datos_nueva_entrada():
limpiar_pantalla()
nueva_entrada = WordPressPost()
nueva_entrada.title = input("Ingresa el título de la entrada: ")
nueva_entrada.content = input("Ingresa todo el contenido de la entrada: ")
etiquetas = []
categorias = []
eleccion = input("¿Deseas agregar etiquetas? [S/N] ")
if eleccion.lower() == "s":
etiquetas = input("Ingresa las etiquetas separadas con comas: ").split(",")
eleccion = input("¿Deseas agregar categorías? [S/N] ")
if eleccion.lower() == "s":
categorias = input("Ingresa las categorías separadas con comas: ").split(",")
nueva_entrada.terms_names = {
'post_tag': etiquetas,
'category': categorias,
}
print("Publicando entrada...")
id_entrada_publicada = cliente.call(posts.NewPost(nueva_entrada))
limpiar_pantalla()
print("Correcto! Se guardó la entrada como borrador, y su id es {}".format(id_entrada_publicada))
eleccion = input("¿Publicar inmediatamente? [S/N] ")
if eleccion.lower() == "s":
print("Publicando entrada...")
nueva_entrada.post_status = 'publish'
resultado = cliente.call(posts.EditPost(id_entrada_publicada, nueva_entrada))
if resultado is True:
input("Entrada publicada")
else:
input("Algo salió mal")
imprimir_menu_opciones()
def mostrar_todas_las_entradas():
offset = 0
increment = 20
while True:
limpiar_pantalla()
print("Mostrando entradas desde {} hasta {}".format(offset + 1, increment))
entradas = cliente.call(posts.GetPosts({'number': increment, 'offset': offset}))
if len(entradas) == 0:
break # no more posts returned
mostrar_tabla_posts(entradas)
eleccion = input("¿Ver más? [S/N] ")
if eleccion.lower() != "s":
break
offset = offset + increment
imprimir_menu_opciones()
def mostrar_tabla_posts(entradas):
print("+{:-<20}+{:-<30}+{:-<50}+".format("", "", "", "", ""))
print("|{:<20}|{:<30}|{:<50}|".format("ID", "Título", "Contenido"))
print("+{:-<20}+{:-<30}+{:-<50}+".format("", "", "", "", ""))
for entrada in entradas:
print("|{:<20}|{:<30}|{:<50}|".format(entrada.id, entrada.title[0:30], limpiar_html(entrada.content)[0:50]))
print("+{:-<20}+{:-<30}+{:-<50}+".format("", "", "", "", ""))
def pedir_id_para_eliminar():
limpiar_pantalla()
id_entrada_eliminar = int(input("Introduce el ID de la entrada que deseas eliminar [-1 para salir] "))
if id_entrada_eliminar != -1:
print("Eliminando entrada con el id {}".format(id_entrada_eliminar))
resultado = cliente.call(posts.DeletePost(id_entrada_eliminar))
if resultado is True:
input("Eliminado correctamente")
else:
input("Algo salió mal")
imprimir_menu_opciones()
def pedir_id_para_editar():
limpiar_pantalla()
id_entrada_editar = int(input("Introduce el ID de la entrada que deseas editar [-1 para salir] "))
if id_entrada_editar != -1:
entrada_para_editar = cliente.call(posts.GetPost(id_entrada_editar))
entrada_original = entrada_para_editar
entrada_para_editar.title = input("Introduce el nuevo título: [vacío si no quieres cambiarlo] ") or entrada_original.title
entrada_para_editar.content = input("Introduce el nuevo contenido: [vacío si no quieres cambiarlo] ") or entrada_original.content
print("Guardando cambios...")
resultado = cliente.call(posts.EditPost(id_entrada_editar, entrada_para_editar))
if resultado is True:
input("Cambios guardados")
else:
input("Algo salió mal")
imprimir_menu_opciones()
def imprimir_menu_opciones():
limpiar_pantalla()
eleccion = int(input("""Elige una opción:
[ 1 ] - Agregar nueva entrada
[ 2 ] - Ver todas las entradas
[ 3 ] - Eliminar entrada
[ 4 ] - Editar entrada
[ -1 ] - Salir
"""))
if eleccion == 1:
pedir_datos_nueva_entrada()
elif eleccion == 2:
mostrar_todas_las_entradas()
elif eleccion == 3:
pedir_id_para_eliminar()
elif eleccion == 4:
pedir_id_para_editar()
else:
exit()
usuario = input("Nombre de usuario: ") or "usuario por defecto"
contraseña = input("Contraseña: ") or "Contraseña por defecto"
sitio = input("Sitio completo (con http(s) y xmlrpc.php al final): ") or "sitio por defecto"
cliente = Client(sitio, usuario, contraseña)
#Obtener la información del usuario para lanzar una excepción si la autenticación falla
cliente.call(GetUserInfo())
imprimir_menu_opciones()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment