No vengo a hablaros de la empresa Vodafone, ni del concurso (que podéis entrar desde este enlace y no tenéis que ser de Vodafone). Es un concurso rasca y gana (aunque cada cierto tiempo hay concursos parecidos; en el que uno de los premios son SMS gratis.
Hasta ahí bien, el problema viene a la hora de gastar los SMS, y es que mientras entro en la web (todo hecho en flash), se carga la intro, me la salto, se carga la web, me identifico, pulso en enviar mensajes, escribo el número, el mensaje y envío echo unos 3 minutos, y para el SMS tardo menos desde el móvil.
He hecho un pequeño script para consola que lo hace todo solo, y además en unos 10 segundos (como mucho) está mandado el mensaje… esto también nos permitirá enviar muchos mensajes seguidos (y si queremos usarlo para felicitar las fiestas, nos vendrá genial).
Nota: Antes de postear el código, quiero decir una cosa (NO hago comprobación de las letras de los mensajes, que son algo menos de 160 caracteres), ni de los parámetros (explicados al final) devuelvo el texto de enviado y no enviado, aunque eso no significa que se haga de verdad (ya sabéis cómo andan los SMS incluso en este 2009); por otra parte, si Vodafone corta el servicio o introduce alguna modificación en la página… ¡mala suerte! se nos acabó esto, pero quise compartir este código (y tal vez podamos hacer más cosa en el futuro con él).
Nota 2: Requiere cURL (sin él habría sido una matanza de código)
Nota 3: No está muy comentado, pero si hay alguna duda, siempre tendremos los manuales de cURL, de bash, y los comentarios en este post 🙂
Ahí va:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | #!/bin/bash MOVIL_USR={mi movil} CLAVE_USR={mi clave club2020} function strpos() { str=${1/$2*/} if [[ -z "$1" ]]; then cad1l=0 else cad1l=`expr length "$1"` fi if [[ -z "$str" ]]; then donde=0; else donde=`expr length "$str"` fi if (( $donde < $cad1l )); then echo $donde else echo -1 fi } echo "Identificándonse en el sistema..." #Envio de datos login="accion=login&clave%5Fusr="$CLAVE_USR"&movil%5Fusr="$MOVIL_USR data=`curl -s -L -b cookies.txt -c cookies.txt "http://club2020.mi.vodafone.es/rascaygana/actuar.php?"$login` # Usé esto para obtener los datos a mano hace un rato #echo $data>tmp #data=`cat tmp` # Almacenamos en un array los datos que nos ha mandado la web i=1 datos[${i}]=`echo $data | cut -d"&" -f $i`; while [[ -n ${datos[${i}]} ]]; do let i=$i+1; datos[$i]=`echo $data | cut -d"&" -f $i`; done #Recorremos el array para mirar las opciones recibidas datosrecibidos=${#datos[*]} for ((i=0;i<$datosrecibidos;i++)); do if (( `strpos ${datos[${i}]} =` > -1 )); then combo=${datos[${i}]} clave=`echo $combo | cut -d"=" -f1` valor=`echo $combo | cut -d"=" -f2` if [[ $clave == "usuario" ]]; then usuario=$valor; elif [[ $clave == "nombre" ]]; then nombre=$valor; elif [[ $clave == "tarjetas" ]]; then tarjetas=$valor; elif [[ $clave == "mensajes" ]]; then mensajes=$valor; fi fi done echo "Hola "$nombre" te quedan "$mensajes" mensajes y tienes "$tarjetas" por rascar" mensaje=$2 destinatario=$1 echo "Enviando mensaje: "$mensaje" a "$destinatario"..." postdata="accion=mandarSms&mensaje="$mensaje"&destinatario="$destinatario"&firma="$usuario #Envio de datos result=`curl -s -L -b cookies.txt -c cookies.txt -d "$postdata" 'http://club2020.mi.vodafone.es/rascaygana/actuar.php'` #echo $result > tmp2 result="retorno"`cat tmp2` i=1 resdata[${i}]=`echo $result | cut -d"&" -f $i`; while [[ -n ${resdata[${i}]} ]]; do let i=$i+1; resdata[$i]=`echo $result | cut -d"&" -f $i`; done #Recorremos el array para mirar las opciones recibidas resdatarecibidos=${#resdata[*]} for ((i=0;i<$resdatarecibidos;i++)); do if (( `strpos "${resdata[${i}]}" =` > -1 )); then combo=${resdata[${i}]} clave=`echo $combo | cut -d"=" -f1` valor=`echo $combo | cut -d"=" -f2` if [[ $clave == "error" ]]; then error=$valor; elif [[ $clave == "mensajes" ]]; then mensajes=$valor; fi fi done echo "Resultado de la operación: "$error" Quedan "$mensajes" mensajes" echo "Cerrando sesión..." #Envio de datos curl -s -L -b cookies.txt -c cookies.txt 'http://club2020.mi.vodafone.es/rascaygana/actuar.php?accion=logout' >/dev/null |
Si guardamos este archivo como sms2020 y le damos permiso de ejecución, el primer parámetro es el móvil del destinatario, y el segundo el mensaje (entrecomilladlo si tiene espacios). Además, en la parte de arriba del archivo encontramos MOVIL_USR y CLAVE_USR, tendréis que poner vuestro número de móvil y vuestra clave del club2020 (para poder identificaros en el sistema).
Nota 4: Pude optimizar un poco el código, pero como había prisa y no sé lo que durará esto, no quise calentarme mucho el coco.
Nota 5: Para registrase: seguid este link (así me dais sms gratis a mí también, porque los demás premios nunca tocan).
Pingback: Bitacoras.com /