16 sept 2014

Yowsup: Aplicaciones éticas y no tan éticas para WhatsApp. Parte 3

Buenas a todos, en el post de hoy vamos a continuar con la cadena sobre Yowsup, explicando como desarrollar nuestra propia aplicación en Python para extraer la foto de WhatsApp del usuario que nos interese apoyándonos en el API Yowsup, del que ya os hemos hablado en las dos anteriores entregas de esta cadena: http://www.flu-project.com/2014/09/yowsup-aplicaciones-eticas-y-no-tan.html

La extracción de la fotografía del perfil de cualquier usuario es tan sencillo como hacer una llamada  al método "contact_getProfilePicture", pasándole como argumento el número de móvil del usuario que queremos observar en formato WhatsApp.

A continuación os compartimos una posible aplicación finalizada, que extraerá el avatar de WhatsApp y la almacenará temporalmente en "/tmp", para después copiarla en el escritorio del usuario que queramos. Para utilizarla simplemente tendréis que pasarle con el parámetro "-n" el número de móvil de la siguiente manera:
  • python getWhatsAppPicture.py -n 6XXXXXXXX


getWhatsAppPicture.py:
from Yowsup.connectionmanager import YowsupConnectionManager
import time
import base64
from datetime import datetime
import shutil
from unidecode import unidecode
import datetime
import optparse
import sys
import os

#Configuracion movil whatsapp ************
user="34XXXXXXXXX" #SUSTITUIR POR NUMERO MOVIL
PASSWORD = "XXXXXXXXXXXX" #SUSTITUIR POR CONTRASEÑA
ruta="/home/XXXXXX/Desktop" #SUSTITUIR POR RUTA DONDE ALMACENAR LA FOTO
#***********************************************

def onAuthSuccess(username):
    methodsInterface.call("ready")
    methodsInterface.call("contact_getProfilePicture", ([number]))
    while True:
        input()

def onProfilePicture(jid,path,rest):
    shutil.move(rest,ruta)
    os.rename(rest,ruta+jid+".jpg")
    os._exit(0)

def onAuthFailed(username, err):
    print("Fallo en la autenticacion")

def onDisconnected(reason):
    print("Desconexion: %s" %reason)

if __name__ == '__main__':
    parser = optparse.OptionParser('usage %prog -n <number>')
    parser.add_option('-n', dest='number', type='string',    help='specify number')
    (options, args) = parser.parse_args()

    number = "34"+options.number+"@s.whatsapp.net"   

    y = YowsupConnectionManager()
    signalsInterface = y.getSignalsInterface()
    methodsInterface = y.getMethodsInterface()
    signalsInterface.registerListener("auth_success", onAuthSuccess)
    signalsInterface.registerListener("contact_gotProfilePicture", onProfilePicture)
    signalsInterface.registerListener("auth_fail", onAuthFailed)
    signalsInterface.registerListener("disconnected", onDisconnected)
    password = base64.b64decode(bytes(PASSWORD.encode('utf-8')))
    methodsInterface.call("auth_login", (user, password))
Imaginamos que se os ocurrirán mil y una utilidades a partir de esta sencilla herramienta. Si queréis compartir con nosotros nuevas soluciones derivadas a partir de este código, estaremos encantados de publicarlas en posteriores artículos de la cadena.

Saludos!

1 comentario: