Buscando autos con python y chileautos

Un compañero de trabajo paul beltran anda en búsqueda de un toyota yaris, pero como muchos saben este es un auto muy cotizado, y cuando llega a llamar ya el auto se vendió
.
Yo le dije que usara buskautos , ya que ellos por cada publicación de autos, envían un tweet a todos sus seguidores en twitter.
Por ultimo me parecido bastante interesante, tratar de hacer una aplicación que busque autos en la pagina de chileautos y encontrar las publicaciones nuevas. esto se puede hacer, por que los parámetros de búsqueda en su sitio son pasados por las urls.
Bueno aquí el buscador.
##
## python buscador.py
##
import urllib, os, re, getpass, smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import COMMASPACE
import os.path
current_path = "/buscardorDeAutos/yaris"
xml_dir = current_path + "\\xmlFiles\\"
URL = "http://www2.chileautos.cl/cemagic.asp?pag=1&dea=50&sort=vcrec&ciudad=37&tipo=TODOS&modelo=yaris&ai=1928&af=2011&pi=4000000&pf=5000000&disp=1&formulario=Busqueda_Avanzada";
mail_to = ['vhspiceros@gmail.com','paulbeltran@gmail.com']
mail_subject = '[toyota Yaris] Nueva publicacion en chileautos!!'
def create_ditectory():
if os.path.isdir(xml_dir) == False:
os.mkdir(xml_dir)
def save_url(filename):
os.chdir(xml_dir)
dirs = os.listdir(xml_dir)
urllib.urlretrieve(URL,filename)
def get_content_file(filename):
try:
f = open(filename, "r")
content = f.read()
f.close()
return content
except:
return ""
def filter_content(filename):
content = get_content_file(filename)
beginWord = "<table align='center' border=1 class=\"tbl_Principal\">"
endWord = "<div class='prevnextlinks'>"
content = content[content.find(beginWord):len(content)] ##sacamos el inicio del documento
content = content[0:content.find(endWord)]
return content
def save_file(filename,content):
f = open(filename, "w")
f.write(content)
f.close()
def path_Filename():
dirs = os.listdir(xml_dir)
return xml_dir + str(len(dirs))+'.html'
def path_previus_Filename():
dirs = os.listdir(xml_dir)
return xml_dir + str(len(dirs)-1)+'.html'
def get_id_cars(content):
# TODO: hacer que traiga el precio, para ver variaciones de precio.
return re.findall("codauto\x3D([0-9]*)",content)
def get_diferences(previus,actual):
dif = []
for x in actual:
if x not in previus:
dif.append(x)
return dif
def send_mail(diff):
sender = smtplib.SMTP('smtp.gmail.com')
sender.ehlo()
sender.starttls()
usuario_gmail = 'vhspiceros'
sender.login(usuario_gmail, "******")
msg = MIMEMultipart()
msg['Subject'] = mail_subject
msg['From'] = "vhspiceros@gmail.com"
msg['To'] = COMMASPACE.join(mail_to)
list = ["http://www3.chileautos.cl/auto.asp?codauto=" + x for x in diff]
body = "< br />".join(list)
part1 = MIMEText(body, 'html')
msg.attach(part1)
sender.sendmail(msg['From'], msg['To'],msg.as_string() )
sender.close()
def main():
create_ditectory()
filename = path_Filename()
previus_Filename = path_previus_Filename()
save_url(filename)
content = filter_content(filename)
save_file(filename,content)
previus_content = get_content_file(previus_Filename);
previues_cars = get_id_cars(previus_content)
actual_cars = get_id_cars(content)
dif = get_diferences(previues_cars,actual_cars)
if len(dif) > 0:
send_mail(dif)
if __name__ == "__main__":
main()
A esta aplicación se le pueden hacer mejoras obviamente, pero ya envía por correo con los links de las nuevas publicaciones, en el futuro se podría hacer que detecte los aumentos o disminuciones de precios. Ya terminado este desarrollo, que es bastante ocioso la vedad, ahora solo me queda configurarlo en el "programador de tareas" de windows para que se ejecute unas 2 veces al día :D. 

 Ahora mi amigo Paul, podrá ser uno de los primeros en enterarse cuando se publique un nuevo auto :D. 

--
Atte.
Víctor Hugo Saavedra
http://vhspiceros.blogspot.com

Comentarios

  1. jajaja La necesidad hace al Maestro jajaj
    Muy buena idea y muy buen script

    Kudos!!!!

    ResponderEliminar
  2. Y no sería más rápido usando BeautifulSoup???

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Buscar columnas en todas las tablas SQL SERVER

"is not null" o "<> Null" en Sql Server

Install Oracle 19C in local with Docker