Pequeñas cosas con WP-CLI: llamandolo desde php en línea de comandos para scrapear datos

WP-CLI es la caña, y muy útil para casos como éste: tenemos unos 11.000 usuarios en una instalación WordPress, sin avatar.

Este caso es un poco particular, porque el avatar lo vamos a sacar de una plataforma privada, sin API… pero el mismo modelo es aplicable, por ejemplo, si tenemos usuarios de twitter para cada user y queremos traernos su imagen.

TIP: Recuerda que Avatars.io simplifica mucho esto. Por ejemplo: https://avatars.io/twitter/arkangel

A lo que vamos: un par de comandos básicos de WP-CLI que nos servirán para recorrer una lista de usuarios, obtener un metadato, hacer cosas con él, y actualizar otro:
wp user list --field=ID
wp user meta get [999] id_personal
wp user meta update [999] avatar_url "dato a setear"

Podemos jugar con esto en un script bash, pero si estamos más cómodos con PHP7, no hay ningún problema (desde línea de comandos). Generamos un archivo en la raiz de nuestro servidor web: miscript.php, y colocamos dentro:


<? php

exec("wp user list --field=ID", $usuarios); //obtenemos la lista de ids de usuarios (aquí podriamos filtrar, por ejemplo, los que cumplan determinadas condiciones)

$total=count($usuarios);$i=1;

foreach ($investigadores as $idWP) {

echo "Procesando usuario $i de $total. ID=$idWP ...". PHP_EOL;

exec("wp user meta get $idWP nombre_del_campo", $nombre_del_campo); $resultadoproceso=MI_FUNCION_SUPERCHULA_QUEHACECOSAS_YMEDEVUELVE_ELDATO($nombre_del_campo[0]);

exec("wp user meta update $idWP avatar_url $resultadoproceso", $resultado);

$i++; }

?>

Para lanzar un script de este tipo (muy lento y pesado, porque en MI_FUNCION_SUPERCHULA_QUEHACECOSAS_YMEDEVUELVE_ELDATO hacemos un curl, esperamos, etc. es recomendable usar ionice (especialmente en servidores compartidos, o tu VPS en producción -sí, se pueden importar datos en producción):

ionice -c2 -n6 php miscript.php

Sin entrar demasiado en explicar los argumentos, le estamso diciendo a linux que ejecute el proceso «lo más rápido posible», pero con educación (sin ocupar demasiada cpu).

Dejar un comentario

Tu dirección de correo electrónico no será publicada.