Created
January 22, 2018 23:13
-
-
Save parzibyte/0cab5c504468e938fbbe6452705069cf to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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