
¿Qué tal si pudiéramos sustituir el botón que proporciona Facebook por una única y sencilla imagen del mismo botón que muestre en todo momento el número actualizado de seguidores de nuestra página de Facebook? Sería fantástico de cara a la optimización del rendimiento web o WPO, pues tan sólo sería necesaria una única petición adicional al servidor, y además ésta se podría servir rápidamente desde una CDN muy próxima a la localización geográfica del usuario, cacheándose además durante un tiempo. De este modo podríamos conseguir que la velocidad de carga de nuestra web continuara siendo muy alta y sin penalizaciones en el rendimiento.
¿Cómo puede conseguirse esto? Parece una solución win-win demasiado buena para ser cierta… Pues puede conseguirse de una forma mucho más sencilla de lo que crees gracias a la librería Imagemagick y un simple script en Bash. Sigue leyendo…
1.- Descargar imágenes fuente sin ningún número de seguidores:
Estas son las imágenes fuente que usaremos como base para generar otras imágenes equivalentes, pero con el número de seguidores relleno:
Son 2 imágenes porque una la usaremos cuando el número de seguidores de la página sea igual o inferior a 9.999, y otra cuando la página tenga hasta 99.999 seguidores.
Las imágenes que generará el script como resultado a partir de ellas serán similares a éstas:
2.- Obtener token de acceso a la página de Facebook
Además de estas imágenes, será necesario obtener un token de acceso a nuestra página de Facebook. En el siguiente enlace explico con más detalle cómo hacerlo:
Lectura recomendada:
Cómo obtener un token o identificador de acceso permanente a una página de Facebook
3.- Ejecutar script de generación de imagen «Me gusta» con número de seguidores relleno:
#! /bin/bash
# Directorio donde se almacenarán las imágenes en nuestro sitio web
imgDir="/var/www/vhosts/example.com/httpdocs/images/facebook-like-button"
# Token de acceso página de Facebook
accessToken="EAAUAA6XzH3sBAByxmeRXoivAX8DamdhghHUNWEYBxdXnQZAZAUPbDpBrmS3PexVeka2JTL9Vxn8eQe6wBLNlPbsN06nBPhxQhp0TKNrdZALXIEHgVANOb4U2eIz3BRHqTCAjSoFxqVZBWjc9K3qHyyRcGczccU7NRWjj5OkzxbAZDZD"
# Obtener número de likes desde la API de Facebook
likesCount=`curl -X GET "https://graph.facebook.com/v2.8/4x4proyect?fields=fan_count&access_token=${accessToken}" | cut -f 2 -d ':' | cut -f 1 -d ','`
# Nos aseguramos de que el valor obtenido sea un número
re='^[0-9]+$'
if ! [[ $likesCount =~ $re ]] ; then
echo "error: Not a number" >&2; exit 1
fi
if [[ $likesCount -ge 0 ]] && [[ $likesCount -le 9999 ]];then
maxCount=9999
elif [[ $likesCount -ge 10000 ]] && [[ $likesCount -le 99999 ]];then
maxCount=99999
else
echo "error: Number not between 0 and 99999" >&2; exit 1
fi
# Formateamos el número de likes con separador de miles
likesCount=`echo $likesCount | sed ':a;s/\B[0-9]\{3\}\>/.&/;ta'`
# Generamos la imagen de Facebook con el número de likes
/usr/bin/convert -gravity East -weight 400 -pointsize 55 -fill white -annotate +20+5 "$likesCount" "$imgDir"/facebook-btn-transparent-"${maxCount}".png "$imgDir"/facebook-btn-filled.png
/usr/bin/convert -resize 110x -quality 100 "$imgDir"https://cdn.daniloaz.com/facebook-btn-filled.png "$imgDir"/facebook-btn-final.png
# Limpiamos la cache de mod_pagespeed para que aparezca el nuevo número de likes en el botón. Sustituir por
# cualquier otro método de invalidación de la caché que utilicemos, o comentar esta línea si no usamos ninguno.
touch /var/cache/mod_pagespeed/cache.flush
echo "Generada imagen con número de likes igual a $likesCount"
exit 0
4.- Añadir entrada en el cron
Para que el script anterior se ejecute periódicamente de forma desatendida añadiremos la siguiente entrada en el cron:
# Actualizar imagen del botón de facebook de la web www.example.com con el número actualizado de likes 0 2 * * * /bin/bash /root/scripts/update-example-com-fb-page-likes-count.sh



Deja una respuesta