Javi Moreno Apuntes Fichas de Lectura Archivo Sobre mi
Blog Logo

Javi


9 minutos de lectura

Hace poco me puse con una tarea que tenía pendiente desde el verano: automatizar la descarga de informes del iTunes Connect.

El 30 de Agosto, en el Apple Developer Connection (en el iOS Developer News también) publicaron esto: Automatically Download iTunes Connect Reports. Lo que nos contaban ahí es que habían desarrollado una nueva herramienta para poder descargar los informes de ventas del iTunes Connect sin tener que acceder a dicho portal. Esto está muy bien, primero porque la descarga de varios informes es bastante tediosa, segundo porque es normal que no te acuerdes de entrar a descargarlos y puedes automatizar la descarga y tercero porque las herramientas para el seguimiento de las ventas brillan por su ausencia así que si empiezan a hacer alguna es una buena señal.

A los cuatro días ya podía encontrarse en la web este enlace: A Bash script to download all available reports using Apple's ‘Auto-Ingest’ Tool for iTunes Connect Sales & Trends Reports

Voy a insistir un poco más en la importancia de la planificación de estas descargas: tanto con esta herramienta como desde el portal solo puedes descargarte los últimos 14 informes diarios y los últimos 13 informes semanales (de ventas, no los que echan en la primera de TVE los sábados por la noche). Si planificas una tarea de descarga diaria, mal se tiene que dar para que al menos una vez en 14 días tu Mac no esté encendido a la/s hora/s planificada/s. En el enlace de iPad DevZone nos mostraban un Bash script para ejecutar la descarga, con comprobación de existencia de fichero descargado para no repetir además de los pasos a seguir para planificar este script correctamente.

Lo que escribo a continuación es, básicamente, la traducción del contenido de ese post con alguna aclaración más para los que no tengan ni idea de lo que es un script bash ni de como se planifica (yo era uno de esos hasta hace quince días).

1.- Creamos un directorio para nuestros scripts, por ejemplo: ~/bin/itc (para los no familiarizados con esta notación esto es crear una carpeta que se llame "bin" dentro de nuestra carpeta de usuario que, a su vez, contenga otra carpeta llamada "itc")

2.- Con nuestro editor de texto favorito (yo lo hice con TextWrangler) creamos un archivo llamado "downloaditcreportssh" y lo guardamos en la carpeta "itc" que hemos creado antes. A continuación copiamos uno de los scripts que están al final de este post, lo pegamos y modificamos los parámetros de la sección de "Configuration" con nuestros propios datos. USERNAME es nuestro usuario de acceso al iTC, USERPASSWD la contraseña, VENDORID el código de compañía y DIR_DEST el directorio donde vamos a descargar los informes. En mi caso particular, el directorio de descarga está dentro de la carpeta de DropBox que tengo en el Mac y así tengo el backup de los informes automatizado... ;-)

3.- En la misma carpeta donde dejamos este fichero, tenemos que tener la herramienta de descarga automática que no es otra cosa que una clase Java. Si no la has descargado todavía puedes hacerlo desde este enlace. Tendrás que tener Java instalado para poder utilizar esta herramienta. Los siguientes pasos ya hay que darlos en el Terminal.

4.- Si queremos ejecutar manualmente el script, escribimos en el terminal lo siguiente:

$ ~/bin/itc/download_itc_reports.sh

5.- Para planificarlo tendremos que usar otra herramienta escondida dentro del Terminal: Crontab

6.- Para editar las entradas de Crontab escribimos lo siguiente en el terminal:

$ crontab -e

7.- En una nueva linea en blanco (o en la primera si no tenemos nada) escribimos lo siguiente

0 13,14,16 * * * ~/bin/itc/download_itc_reports.sh

8.- Breve explicación sobre crontab. Cada registro consta de seis argumentos: minutos, horas, día del mes, mes, día de la semana y comando a ejecutar. Varios valores para el mismo argumento se separan por comas. El ejemplo se entiende como: "en el minuto cero de las 13, 14 y 16 horas de cualquier día, de cualquier mes y cualquier día de la semana ejecutar el comando ~/bin/itc/downloaditcreports.sh. Puedes encontrar más información de crontab en este enlace.

9.- Si ya hemos creado otro script (por ejemplo: uno para informes diarios y otro para los semanales) habría que incluir otra linea con la planificación deseada y el nombre del script.

10.- Una vez que hemos terminado de editar, guardamos y comprobamos nuestro trabajo escribiendo en el terminal:

$ crontab -l

11.- Y ya está, si el Mac está encendido a las horas planificadas se ejecutarán los scripts.

Los informes son ficheros planos que pueden ser importados a cualquier hoja de cálculo o base de datos que nos hayamos creado. Yo uso una aplicación que se llama AppStar Lite que permite importar estos informes y visualizarlos de una forma agradable.

Actualmente podemos descargarnos dos tipos de informe: Diarios y Semanales. A continuación hay un script para cada uno. Además, cada tipo de informe tiene dos subtipos: Summary y Opt-In. No tengo muy clara la diferencia entre los primeros y los segundos. Los scripts están escritos para descargar los Summary, para descargar los Opt-In simplemente habría que cambiar una palabra por la otra.

Script para descarga de informes diarios:

#!/usr/bin/env bash
#
# Copyright 2011, Shark Intelligence, s.r.o.
# Released under the MIT license
#
#-------------------------------------------------------------------------------
# Configuration
#-------------------------------------------------------------------------------
# ITC user name
USER_NAME="user name"
# ITC user password
USER_PASSWD="user password"
# vendorid: find it at: https://reportingitc.apple.com/subdashboard.faces
VENDOR_ID="vendor Id"
# directory where the reports are downloaded; Current dir is used if empty;
DIR_DEST=~/projects/XXX/reports-sales
# number of days beginning with yesterday which the reports are downloaded for
NUM_OF_DAYS_TO_DOWNLOAD=14
# Currently only Sales reports are supported
REPORT_TYPE="S"
# Currently only Daily report frequency is supported
REPORT_FREQ="D"
#-------------------------------------------------------------------------------
# Program start
#-------------------------------------------------------------------------------
# Adjust input vars
#
if [ -z "$DIR_DEST" ]; then DIR_DEST=`pwd -P`; fi
# Print info
#
echo Downloading ITC sales reports for $NUM_OF_DAYS_TO_DOWNLOAD days into destination: $DIR_DEST
# set CLASSPATH which should point the this script location
#
THIS_SCRIPT=$0
cd `dirname $THIS_SCRIPT`
CLASSPATH=`pwd -P`
# set dir where the reports are downloaded to
#
cd $DIR_DEST
# loop for requested NUM_OF_DAYS_TO_DOWNLOAD
#
for (( DAY=NUM_OF_DAYS_TO_DOWNLOAD; DAY>0; DAY-- ))
do
DT_CUR_STR="date -v-${DAY}d +%Y%m%d"
DT_CUR=`$DT_CUR_STR`
FILE_CUR="${REPORT_TYPE}_${REPORT_FREQ}_${VENDOR_ID}_${DT_CUR}.txt.gz"
if [ $(find . -name $FILE_CUR -maxdepth 1 -type f | wc -l) == "0" ]
then
# Report is missing so download one
#
echo $DT_CUR: MISSING! Download initiated...
java -cp $CLASSPATH Autoingestion $USER_NAME $USER_PASSWD $VENDOR_ID Sales Daily Summary $DT_CUR
else
# Report is found
#
echo "$DT_CUR: already here"
fi
done

Script para descarga de informes semanales:

#!/usr/bin/env bash
#
# Copyright 2011, Shark Intelligence, s.r.o.
# Released under the MIT license
#
#-------------------------------------------------------------------------------
# Configuration
#-------------------------------------------------------------------------------
# ITC user name
USER_NAME="user name"
# ITC user password
USER_PASSWD="user password"
# vendorid: find it at: https://reportingitc.apple.com/subdashboard.faces
VENDOR_ID="vendor Id"
# directory where the reports are downloaded; Current dir is used if empty;
DIR_DEST=~/projects/XXX/reports-sales
# number of days beginning with yesterday which the reports are downloaded for
NUM_OF_WEEKS_TO_DOWNLOAD=13
# Currently only Sales reports are supported
REPORT_TYPE="S"
# Currently only Daily report frequency is supported
REPORT_FREQ="W"
#-------------------------------------------------------------------------------
# Program start
#-------------------------------------------------------------------------------
# Adjust input vars
#
if [ -z "$DIR_DEST" ]; then DIR_DEST=`pwd -P`; fi
# Print info
#
echo Downloading ITC sales reports for $NUM_OF_WEEKS_TO_DOWNLOAD days into destination: $DIR_DEST
# set CLASSPATH which should point the this script location
#
THIS_SCRIPT=$0
cd `dirname $THIS_SCRIPT`
CLASSPATH=`pwd -P`
# set dir where the reports are downloaded to
#
cd $DIR_DEST
# loop for requested NUM_OF_WEEKS_TO_DOWNLOAD
#
for (( WEEK=NUM_OF_WEEKS_TO_DOWNLOAD; WEEK>0; WEEK-- ))
do
# set value for last sunday
#
DT_DAY_OF_WEEK=`date +%w`
let DAYS=(WEEK-1)*7+DT_DAY_OF_WEEK
DT_CUR_STR="date -v-${DAY}d +%Y%m%d"
DT_CUR=`$DT_CUR_STR`
FILE_CUR="${REPORT_TYPE}_${REPORT_FREQ}_${VENDOR_ID}_${DT_CUR}.txt.gz"
if [ $(find . -name $FILE_CUR -maxdepth 1 -type f | wc -l) == "0" ]
then
# Report is missing so download one
#
echo $DT_CUR: MISSING! Download initiated...
java -cp $CLASSPATH Autoingestion $USER_NAME $USER_PASSWD $VENDOR_ID Sales Daily Summary $DT_CUR
else
# Report is found
#
echo "$DT_CUR: already here"
fi
done