@ agnasg

Por qué hacerlo fácil si lo podemos hacer difícil v 2.0

24-09-2022 7:06 PM

He estado viendo la forma como mis ingresos de mi actividad de freelancing se han ido transformando y mermando en cierta forma con el tiempo. La pandemia, el descubrimiento por parte de los freelancers que haciendo un plugin de WordPress puede generar $150 en una mañana, otras razones, ha generado este declive. Si tu colocas “quiero un sitio hecho en WordPress” en upwork, freelancer.com y otros sitios, te van a aparecer 80-120 ofertas al instante. Hace 10 años yo hacía 2-3 proyectos mensuales de web scrapping (extracción de datos de un sitio web). Hoy en día con 3-4 líneas de python eso lo puede hacer cualquiera. Tengo 5-6 años que no hago un proyecto de este tipo.

Otro detalle que he notado es que la cantidad de ciertos proyectos varía a lo largo del año. Generé una hipótesis y me propuse comprobarla. Si los resultados son los que sospecho los próximos dos meses hay ciertas actividades que debería hacer, o quizás mejor no. Así que me dispose a analizar los correos con “You have been paid by” que tengo en mi cuenta, agregarles la fecha, pasarlos a un .csv y hacer un analítico. google gmail tiene una herramienta para bajar todos los correos, o, en este caso, los que tienen una etiqueta en particular. Los correos que me interesan ya están. etiquetados. La herramienta se llama Takeout y se puede acceder dentro de tu cuenta google. La ejecuté y me generó un archivo _Work.mbox de 300 mb con datos desde el 2004. En google “convertir mbox to csv” está lleno de herramientas, no un procedimiento. Abrí el archivo con vim y es un simple archivo de texto con los correos uno detrás de otro en cualquier orden.

Esto es una tarea para awk. Luego de 15 minutos mi script de awk lucía así:

awk -F, 'BEGIN {prev = ""} index(prev, "Date: ") != 0 && index($0, "You have been paid by") != 0 {print prev, $0 }  {prev = $0}' OFS=', ' _Work.mbox

¿Por qué estoy usando awk si con PHP esto se puede hacer mucho más fácil? Hace 15 años procesar un archivo de texto y tomar acciones basado en el contenido de cada línea se resolvía con awk. Pues ya no, con PHP o python esto se hace rápidamente. Fue una reacción instintiva de mi parte. supongo

5 minutos después este es el script PHP resultante:

$fin = fopen("_Work.mbox", "r");
$fout = fopen("result.csv", "w");
$prev = "";
if ($fin) {
    while (($line = fgets($fin)) !== false) {
        if (strstr ($prev, "Date: ") !== false &&
	     strstr ($line, "You have been paid by") !== false) {
                $date = substr ($prev, 5, 26);
		$end = strpos ($date, "-0");
		if ($end !== false) {
			$date = substr ($date, 0, $end);
		}
		$begin = strpos ($line, " by ") + 4;
		$end = 	strpos ($line, " on ");
		if ($end === false) {
			$end = 	strpos ($line, " at ");
		}
		$by = substr ($line, $begin, $end - $begin);
		fwrite ($fout, "$date;$by\n");
	}
	$prev = $line;
    }

    fclose($fout);
    fclose($fin);
}

Tuve que hacer algunas manipulaciones para eliminar texto inútil y otros maquillajes. El resultado fue desalentador porque solo obtuve 200 registros, y estaba esperando más de 1000, tuve que regresar a Takeout repetir el proceso, blah, blah. Cuando el .csv se parecía a lo que esperaba comencé a batallar con excel. 45 minutos después el resultado fue una gráfica que confirmó que mi sospecha era correcta: los dos próximos meses debe haber una actividad significativa. Me quedé sospechando que había perdido el tiempo, pero también que quizas todo este ejercicio tiene una utilidad que todavía no he descubierto. Es como cuando estás haciendo una demostración matemática y llegas a que 1 == 2. Obviamente estás haciendo algo mal, lo que hay que descubrir es qué.