Publicando artículos “viejunos” por social

Hace ya algún tiempo , que @punk y otras personas hablaron en las reuniones que seria buena idea, recordar algunos artículos “viejunos” que se han estado publicando en elbinario, desde sus inicios, para darlos a conocer, puesto que muchos de ellos todavía siguen estando en vigor y a mucha gente podría interesarles, así que pensando que podría ser interesante la idea nos pusimos a ello.:

Sacando los artículos que nos interesan de nuestro wp Para empezar no queremos publicar todos los artículos, solo los de algunas categorías concretas, por lo que lo primero que necesitamos es averiguar los id de esas categorías en nuestra BD, a partir de las version 2.3 wp introduce cambios en la manera de almacenar las categorías de los artículos, por lo que para buscar una categoría en concreto necesitamos realizar la siguiente consulta, dentro de nuestra BD:

select term_id,name,slug from wp_terms where slug='CATEGORIA';

donde CATEGORIA es el nombre de la categoría que estamos buscando

Nos tenemos que quedar con el “term_id” que sera el identificador que necesitaremos para cruzar con join, nuestras tablas wp_posts,wp_terms y wp_term_relationships, para obtener la lista de post que queramos filtrando por esa categoría, tenéis mas info, sobre el contenido de estas tablas en https://codex.wordpress.org/WordPress_Taxonomy

Ahora que tenemos claro cuales son los term_id que necesitamos(ojo cuando realizamos la anterior consulta no muestra solo las categorías, también los tags, por lo que si tenemos categorías con el mismo nombre que el tag, tendremos que hacer consultas a la tabla wp_term_taxonomy con el id para obtener el correcto, como podemos ver a continuación:

 select * from wp_term_taxonomy where term_id='19';

Si tenemos el valor “category” en el campo taxonomy vamos bien.

Ahora salimos de nuestra BD y ejecutamos desde el terminal la siguiente consulta:

 mysql -u USUARIO -p BASE-DATOS -e "select post_title, concat('https://URL_SITIO/',post_name) from wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) LEFT JOIN wp_term_taxonomy ON (wp_term_relationships.term_taxonomy_id = wp_term_taxonomy.term_taxonomy_id) WHERE 1 AND wp_term_taxonomy.term_id in(ID,ID,ID) and post_status='publish' and post_type='post'" > ARCHIVO_SALIDA

Esta consulta toma todos los posts publicados, y nos saca el titulo y la url completa en un archivo de texto, filtrando por las categorías que le hemos indicado. Para entender la consulta necesitamos comprender la relación de las tablas entre si, para saber como las hemos cruzado https://codex.wordpress.org/WordPress_Taxonomy para el ejemplo nos basta con saber que el campo ID de la tabla de posts(wp_posts) se cruza con el object_id de la tabla de (wp_term_relationships) y el id resultante lo consultamos en wp_term_taxonomy para sacar nuestra categoría.

Los parámetros en MAYUSCULAS tendréis que cambiarlos por los vuestros.

Borramos los repetidos

awk '!seen[$0]++' posts.txt >> posts_mod.txt

Ahora que tenemos todos los posts en un archivo, podemos por ejemplo publicarlos en social usando curl como indica la wiki http://wiki.gnusocial.net/doku.php?id=api_documentacion

Por ejemplo:

    #!/bin/bash
    origen="posts_mod.txt"
    quit=$(cat $origen |shuf |tail -1)
    publicador="$(curl --insecure -u usuario:password https://gnusocial.net/api/statuses/update.xml -d status="$quit")"
   echo $publicador

El comando shuf, lo que hace es “barajar” las lineas del fichero, para mostrarnos una de manera aleatoria.

Así que con este invento, desde la cuenta de @elbinario os recordaremos artículos “viejunos” que escribimos hace tiempo, por si os puedan interesar.

Leave a Reply

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax