php - piggyback - pixel de facebook
Desarrollar un pĂxel de seguimiento (5)
Intento crear un píxel que rastree la URL actual en la que se encuentra el usuario cuando lo visita. Puedo usar JS (preferido) o un píxel de imagen 1x1. Con JS estoy asumiendo que necesitaría ejecutar una solicitud AJAX a un script PHP para capturar la información que necesito y con un píxel de imagen tengo problemas para obtener el URL actual.
También pensé en la URL que codifica la URL actual con JS y colocar dinámicamente el píxel de la imagen con la URL actual codificada como una cadena de consulta para un script PHP, pero eso me puede llegar a ser muy largo.
Si voy a utilizar la ruta AJAX, ¿qué biblioteca AJAX puedo usar? JQuery está demasiado hinchado para este propósito.
¿Alguna otra idea?
Aquí hay otra implementación de PHP de un píxel de seguimiento, del proyecto Open Web Analytics , que intenta básicamente ser un clon PHP de Google Analytics.
Devuelve una imagen GIF transparente 1x1 (sin usar una biblioteca de imágenes PHP), con un encabezado sin memoria caché (importante para un seguimiento preciso) y vacía la salida para que pueda continuar procesando los análisis sin bloquear la respuesta HTTP (rendimiento). Parece una implementación bastante avanzada, vale la pena probarlo.
<?php
ignore_user_abort(true);
// turn off gzip compression
if ( function_exists( ''apache_setenv'' ) ) {
apache_setenv( ''no-gzip'', 1 );
}
ini_set(''zlib.output_compression'', 0);
// turn on output buffering if necessary
if (ob_get_level() == 0) {
ob_start();
}
// removing any content encoding like gzip etc.
header(''Content-encoding: none'', true);
//check to ses if request is a POST
if ($_SERVER[''REQUEST_METHOD''] === ''POST'') {
// the GIF should not be POSTed to, so do nothing...
echo '' '';
} else {
// return 1x1 pixel transparent gif
header("Content-type: image/gif");
// needed to avoid cache time on browser side
header("Content-Length: 42");
header("Cache-Control: private, no-cache, no-cache=Set-Cookie, proxy-revalidate");
header("Expires: Wed, 11 Jan 2000 12:59:00 GMT");
header("Last-Modified: Wed, 11 Jan 2006 12:59:00 GMT");
header("Pragma: no-cache");
echo sprintf(''%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%'',71,73,70,56,57,97,1,0,1,0,128,255,0,192,192,192,0,0,0,33,249,4,1,0,0,0,0,44,0,0,0,0,1,0,1,0,0,2,2,68,1,0,59);
}
// flush all output buffers. No reason to make the user wait for OWA.
ob_flush();
flush();
ob_end_flush();
// DO ANALYTICS TRACKING HERE
Aquí hay un píxel de seguimiento extremadamente simplificado escrito en PHP.
riceball.com/tracking-pixel-works
Un píxel de seguimiento es como el faro más primitivo posible, y funciona explotando un hecho de las páginas web: las imágenes son una solicitud separada de la página.
Si ya puede ejecutar su código JS en la página de otra persona, simplemente debe ENVIAR los datos a su servidor. No es necesario mostrar un pequeño píxel que solo obtendrá el mismo tipo de datos.
Es un problema similar con este efecto, ya que una llamada a una función para ejecutar una marca de cuándo se vio o se abrió el correo electrónico se introdujo en la altura del píxel, pero no arroja la acción correctamente.
<img src="https://datafeeds.baruwa.com/1x1spacer.gif" width="1" height="1" alt="Web Bug from https://devorpenguin.des1.net/module/cartabandonmentpro/FrontCartAbandonment?token_cart=87c83b8f77318a54fdd6be91aacc3574&id_cart=1002&action=visualize&wichRemind=1">
public static function visualize()
{
$wichRemind = Tools::getValue(''wichRemind'');
$id_cart = Tools::getValue(''id_cart'');
$token = Tools::getValue(''token_cart'');
if ($token == md5(_COOKIE_KEY_.''recover_cart_''.$id_cart)) {
$query = "UPDATE "._DB_PREFIX_."cartabandonment_remind SET visualize = 1 WHERE wich_remind = ".(int)$wichRemind." AND id_cart = ".(int)$id_cart;
Db::getInstance()->Execute($query);
}
header(''Content-Type: image/png'');
echo base64_decode(''iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII='');
}
Salida 1px x 1px de esta manera:
header(''Content-type: image/png'');
echo gzinflate(base64_decode(''6wzwc+flkuJiYGDg9fRwCQLSjCDMwQQkJ5QH3wNSbCVBfsEMYJC3jH0ikOLxdHEMqZiTnJCQAOSxMDB+E7cIBcl7uvq5rHNKaAIA''));
Puede escribir una secuencia de comandos que crea y devuelve una imagen .gif
, .jpeg
o .png
utilizando PHP para fines de seguimiento utilizando la biblioteca GD (que a menudo se distribuye con PHP en las versiones modernas). Si no tiene acceso a GD, siempre puede recompilar PHP con GD habilitado.
Ejemplo:
pixel.php
(comentado a los efectos de la explicación):
<?php
// Create an image, 1x1 pixel in size
$im=imagecreate(1,1);
// Set the background colour
$white=imagecolorallocate($im,255,255,255);
// Allocate the background colour
imagesetpixel($im,1,1,$white);
// Set the image type
header("content-type:image/jpg");
// Create a JPEG file from the image
imagejpeg($im);
// Free memory associated with the image
imagedestroy($im);
?>
En un ejemplo simple, puede llamar a este píxel de seguimiento utilizando el siguiente URL de ejemplo en un correo electrónico u otra página:
<img src="http://example.com/pixel.php?a=value1&b=value2&c=value3">
Usando variables:
Dentro de tu pixel.php
puedes analizar e interpretar cualquier variable $_GET
que se le pase dentro de la etiqueta de la imagen, de manera simplista:
if (isset($_GET[''a''])) {
// (Do|log) act on a
}
if (isset($_GET[''b''])) {
// (Do|log) act on b
}
if (isset($_GET[''c''])) {
// (Do|log) act on c
}
Aplica y repite lo que necesites, pero puedes ser bastante sofisticado sobre lo que haces y especialmente dado que tienes acceso a mucha información sobre el usuario al poder establecer vars en la cadena $_GET
.
Un ejemplo más aplicable podría ser:
<img src="http://example.com/pixel.php?userid=98798&campaign=302&last=8">
Rastreando más que solo $ _GET variables:
También puede recoger mucha más información usando PHP, como por ejemplo:
// Server variables
$ip = $_SERVER[''REMOTE_ADDR''];
$referer = $_SERVER[''HTTP_REFERER''];
$useragent = $_SERVER[''HTTP_USER_AGENT''];
$browser = get_browser(null, true);
etc...
y luego tal vez insertarlo en una tabla de seguimiento en su base de datos:
$sql = "INSERT INTO campaign_tracking
(''when'',''campaign'',''last'',''ip'',''useragent'')
VALUES
(NOW(),''$campaign'',''$last'',''$ip'',''$useragent'')";
Este es un (el) método básico utilizado ampliamente para el seguimiento de campañas de marketing por correo electrónico y, específicamente, en PHP, pero el mismo método es aplicable a otros lenguajes de scripting / programación y bibliotecas, y para otros fines también.
Información adicional y útil sobre GD:
- Referencia GD - en php.net