def leer(self): kiosco = Kiosco() entradas = self.entradas_feed()[0:40] print("leyendo " + str(len(entradas)) + " noticias de '" + self.etiqueta + "'...") i = 0 for url, fecha in entradas: i += 1 # if url in urls_existentes: if kiosco.contar_noticias(diario=self.etiqueta, url=url): print("noticia " + str(i) + "/" + str(len(entradas)) + " ya descargada") continue print("descargando noticia " + str(i) + "/" + str(len(entradas))) seccion, titulo, texto = self.parsear_noticia(url=url) if texto == None: continue if seccion not in self.secciones: continue self.noticias.append( Noticia(fecha=fecha, url=url, diario=self.etiqueta, seccion=seccion, titulo=titulo, texto=self.limpiar_texto(texto)))
def leer(self): kiosco = Kiosco() entradas = self.getTuplas()[0:70] print("leyendo " + str(len(entradas)) + " noticias de '" + self.etiqueta + "'...") i = 0 for url, fecha, seccion in entradas: i += 1 # if url in urls_existentes: if kiosco.contar_noticias(diario=self.etiqueta, url=url): print("noticia " + str(i) + "/" + str(len(entradas)) +" ya descargada") continue print("descargando noticia " + str(i) + "/" + str(len(entradas))) titulo, texto = self.parsearNoticia(url) if seccion == "futbol": seccion = "deportes" if seccion not in self.secciones: seccion = "varios" self.noticias.append(Noticia(fecha=fecha, url=url, diario=self.etiqueta, seccion=seccion, titulo=titulo, texto=self.limpiar_texto(texto)))
def leer_todo(self): kiosco = Kiosco() print("leyendo '" + self.etiqueta + "'...") tag_regexp = re.compile(r'<[^>]+>') entradas = [] url_feed_template = self.feeds['todo'] + "&start=" index = 0 feed = fp.parse(url_feed_template + str(index)) while len(feed.entries) > 0: entradas.extend(feed.entries) index += 40 feed = fp.parse(url_feed_template + str(index)) urls_existentes = kiosco.urls(diario = self.etiqueta) for entrada in entradas: titulo = entrada.title texto = bs(re.sub(tag_regexp,' ',entrada.summary), features="lxml").text fecha = dateutil.parser.parse(entrada.published) url = entrada.link if url in urls_existentes: continue self.noticias.append(Noticia(fecha=fecha, url=url, diario=self.etiqueta, seccion='todo', titulo=titulo, texto=self.limpiar_texto(texto)))
def leer(self): kiosco = Kiosco() print("leyendo noticias de '" + self.etiqueta + "'...") tag_regexp = re.compile(r'<[^>]+>') for tag, url_feed in self.feeds.items(): i = 0 feed = fp.parse(url_feed) entradas = feed.entries[0:5] print(" " + str(len(entradas)) + " noticias de '" + self.etiqueta + "/" + tag + "'...") for entrada in entradas: i += 1 titulo = str(entrada.title) texto = str(bs(re.sub(tag_regexp,' ',entrada.summary), features="lxml").text) fecha = dateutil.parser.parse(entrada.published) # seccion = fecha.strftime('%H%M%S') seccion = 'alberto' url = str(entrada.link) # si ya se existe la noticia, no la descargo if kiosco.contar_noticias(diario=self.etiqueta, url=url): print(" noticia " + str(i) + "/" + str(len(entradas)) +" ya parseada") continue print(" parseando noticia " + str(i) + "/" + str(len(entradas))) self.noticias.append(Noticia(fecha=fecha, url=url, diario=self.etiqueta, seccion=seccion, titulo=titulo, texto=self.limpiar_texto(texto)))
def leer(self): kiosco = Kiosco() print("leyendo noticias de '" + self.etiqueta + "'...") for seccion, url_feed in self.feeds.items(): i = 0 entradas = self.entradas_feed(url_feed=url_feed)[0:5] print(" " + str(len(entradas)) + " noticias de '" + self.etiqueta + "/" + seccion + "'...") for url, fecha, titulo in entradas: i += 1 # if url in urls_existentes: if kiosco.contar_noticias(diario=self.etiqueta, url=url): print(" noticia " + str(i) + "/" + str(len(entradas)) + " ya descargada") continue print(" descargando noticia " + str(i) + "/" + str(len(entradas))) texto = self.parsear_noticia(url=url) if texto == None: continue self.noticias.append( Noticia(fecha=fecha, url=url, diario=self.etiqueta, seccion=seccion, titulo=titulo, texto=texto))
def leer(self): kiosco = Kiosco() tag_regexp = re.compile(r'<[^>]+>') # recupero las urls del dia de hoy, con la diferencia horario del servidor. # si no hay de hoy, me trae de ayer. entradas = fp.parse(self.feed_noticias).entries[0:70] print("leyendo " + str(len(entradas)) + " noticias de '" + self.etiqueta + "'...") i = 0 for entrada in entradas: i += 1 url = str(entrada.link) seccion = '' try: seccion = str(url.split('/')[3]) except: continue if seccion == "america": seccion = "internacional" if seccion == "teleshow": seccion = "espectaculos" if seccion == "deportes-2": seccion = "deportes" #if url in urls_existentes: if kiosco.contar_noticias(diario=self.etiqueta, secciones=seccion, url=url): print("noticia " + str(i) + "/" + str(len(entradas)) + " ya descargada") continue print("parseando noticia " + str(i) + "/" + str(len(entradas))) titulo = str(entrada.title) texto = str(re.sub(tag_regexp, ' ', entrada.content[0].value)) fecha = dateutil.parser.parse( entrada.published, ignoretz=True) - datetime.timedelta(hours=3) if seccion not in self.secciones: continue self.noticias.append( Noticia(fecha=fecha, url=url, diario=self.etiqueta, seccion=seccion, titulo=titulo, texto=self.limpiar_texto(texto))) print(self.etiqueta + " leyo " + str(len(self.noticias)))
def test_urls(self): k = Kiosco() fecha = datetime.datetime(year=2020, month=8, day=26) #fecha = {'desde' : datetime.datetime(year = 2020, month = 8, day = 22), 'hasta' : datetime.datetime(year = 2020, month = 8, day = 24)} #seccion = ['economia', 'internacional'] urls = k.urls(diario='clarin') urls
def test_actualizar_diario(self): k = Kiosco() i = Infobae() #i.etiqueta = 'test_todos' i.leer() k.actualizar_diario(i)
def test_contar_noticias(self): k = Kiosco() notis = k.noticias(diario='clarin') #fecha = datetime.datetime(year = 2020, month = 8, day = 25) fecha = { 'desde': datetime.datetime(year=2020, month=8, day=22), 'hasta': datetime.datetime(year=2020, month=8, day=24) } seccion = ['economia', 'internacional'] conteo = k.contar_noticias(fecha=fecha, diario='test_todos', secciones=seccion) conteo
def leer_editoriales(self): kiosco = Kiosco() tag_regexp = re.compile(r'<[^>]+>') i = 0 for pagina in range(1, 17): entradas = fp.parse( 'https://ledoymipalabra.com/category/editoriales/feed?paged=' + str(pagina)).entries print("leyendo " + str(len(entradas)) + " noticias de la pagina numero " + str(pagina) + " de las editoriales de '" + self.etiqueta + "'...") for entrada in entradas: i += 1 url = str(entrada.id) seccion = 'editorial' #if url in urls_existentes: if kiosco.contar_noticias(diario=self.etiqueta, secciones=seccion, url=url): print("noticia " + str(i) + "/" + str(len(entradas)) + " ya descargada") continue print("parseando noticia " + str(i) + "/" + str(len(entradas))) titulo = str(entrada.title) texto = str( re.sub(tag_regexp, ' ', str(entrada.content[0].value))) fecha = dateutil.parser.parse( entrada.published, ignoretz=True) - datetime.timedelta(hours=3) self.noticias.append( Noticia(fecha=fecha, url=url, diario=self.etiqueta, seccion=seccion, titulo=titulo, texto=self.limpiar_texto(texto))) print(self.etiqueta + " leyo " + str(len(self.noticias)))
def resultados_editoriales(): resultados = Resultados() freqs = Frecuencias() k = Kiosco() total = 0 agregados = 0 diario='diariodeleuco' seccion='editorial' editoriales = k.noticias(diario=diario, secciones=seccion) buffer_resultado = [] for e in editoriales: f_ter_tit, f_ver_tit, f_per_tit, f_ter_txt, f_ver_txt, f_per_txt = freqs.tituloytexto2freqs(e.titulo,e.texto) buffer_resultado.append({'diario':diario, 'seccion': seccion, 'fecha': e.fecha.strftime('%Y%m%d%H%M%S'), 'url':e.url, 'f_ter_tit': f_ter_tit, 'f_ver_tit': f_ver_tit, 'f_per_tit': f_per_tit, 'f_ter_txt': f_ter_txt, 'f_ver_txt': f_ver_txt, 'f_per_txt': f_per_txt}) resultados.bd.frecuencias.insert_many(buffer_resultado)
def leer_medio(medio): try: medio.leer() except: print('error leyendo ' + medio.etiqueta + ': ' + str(sys.exc_info()[0])) return False try: kiosco = Kiosco() kiosco.actualizar_diario(medio) except: print('error actualizando noticias de ' + medio.etiqueta + ': ' + str(sys.exc_info()[0])) return False return True
def leer(self): kiosco = Kiosco() tag_regexp = re.compile(r'<[^>]+>') # recupero las urls del dia de hoy, con la diferencia horario del servidor. # si no hay de hoy, me trae de ayer. entradas = fp.parse(self.feed_noticias).entries[0:70] print("leyendo " + str(len(entradas)) + " noticias de '" + self.etiqueta + "'...") i = 0 for entrada in entradas: i += 1 url = str(entrada.id) seccion = 'todo' for tag in entrada.tags: if tag['term'] == 'Le doy Mi Palabra': seccion = 'editorial' #if url in urls_existentes: if kiosco.contar_noticias(diario=self.etiqueta, url=url): print("noticia " + str(i) + "/" + str(len(entradas)) + " ya descargada") continue print("parseando noticia " + str(i) + "/" + str(len(entradas))) titulo = str(entrada.title) texto = str(re.sub(tag_regexp, ' ', str(entrada.content[0].value))) fecha = dateutil.parser.parse( entrada.published, ignoretz=True) - datetime.timedelta(hours=3) self.noticias.append( Noticia(fecha=fecha, url=url, diario=self.etiqueta, seccion=seccion, titulo=titulo, texto=self.limpiar_texto(texto))) print(self.etiqueta + " leyo " + str(len(self.noticias)))
def leer(self): kiosco = Kiosco() tag_regexp = re.compile(r'<[^>]+>') entradas = fp.parse(self.feed_noticias).entries[0:70] print("leyendo " + str(len(entradas)) + " noticias de '" + self.etiqueta + "'...") i = 0 for entrada in entradas: i += 1 url = str(entrada.link) seccion = str(url.split('/')[3]) if seccion == "show": seccion = "espectaculos" if seccion not in self.secciones: continue # if url in urls_existentes: if kiosco.contar_noticias(diario=self.etiqueta, url=url): print("noticia " + str(i) + "/" + str(len(entradas)) +" ya descargada") continue print("parseando noticia " + str(i) + "/" + str(len(entradas))) titulo = str(entrada.title) texto = str(re.sub(tag_regexp,' ',entrada.content[0].value)) fecha = dateutil.parser.parse(entrada.published, ignoretz=True) - datetime.timedelta(hours=3) self.noticias.append(Noticia(fecha=fecha, url=url, diario=self.etiqueta, seccion=seccion, titulo=titulo, texto=self.limpiar_texto(texto))) print(self.etiqueta + " leyo " + str(len(self.noticias)))
def subir_historicos(path_discursos_historicos): buffer_kiosco = [] buffer_resultado = [] resultados = Resultados() freqs = Frecuencias() k = Kiosco() bd = k.bd total = 0 agregados = 0 with open(path_discursos_historicos) as f: for linea in f: total += 1 jdiscurso = json.loads(linea) texto = jdiscurso['texto'] if not texto: continue diario = jdiscurso['diario'] url = jdiscurso['url'] titulo = jdiscurso['titulo'] fecha = datetime.datetime.strptime(jdiscurso['fecha']['$date'], '%Y-%m-%dT%H:%M:%SZ') # if fecha.strftime('%Y%m%d%H%M%S') > '20071206233745': # continue sfecha = fecha.strftime('%Y%m%d') seccion = "" if sfecha >= "20191210": seccion = "alberto" if sfecha < "20191210" and sfecha >= "20151210": seccion = "macri" if sfecha < "20151210" and sfecha >= "20071210": seccion = "cristina" if sfecha < "20071210": seccion = "nestor" # if self.contar_noticias(diario=diario, secciones=seccion, url=url): # continue if seccion != "nestor": continue if resultados.bd.frecuencias.find_one({'diario': diario, 'seccion': seccion, 'fecha': fecha.strftime('%Y%m%d%H%M%S'), 'url':url}): continue while resultados.bd.frecuencias.find_one({'diario': diario, 'seccion': seccion, 'fecha': fecha.strftime('%Y%m%d%H%M%S')}): fecha += datetime.timedelta(seconds=10) while existe_fecha(fecha, buffer_resultado): fecha += datetime.timedelta(seconds=10) # buffer_kiosco.append({'diario': diario, 'cat':seccion, 'fecha': fecha, 'url':url, 'titulo':titulo, 'texto':texto}) # if len(buffer_kiosco) >= 100: # self.bd.noticias.insert_many(buffer_kiosco) # agregados += 100 # buffer_kiosco = [] # print('total procesados: ' + str(total) + '. agregados ' + str(agregados) + ' en total en Kiosco') f_ter_tit, f_ver_tit, f_per_tit, f_ter_txt, f_ver_txt, f_per_txt = freqs.tituloytexto2freqs(titulo,texto) buffer_resultado.append({'diario':diario, 'seccion': seccion, 'fecha': fecha.strftime('%Y%m%d%H%M%S'), 'url':url, 'f_ter_tit': f_ter_tit, 'f_ver_tit': f_ver_tit, 'f_per_tit': f_per_tit, 'f_ter_txt': f_ter_txt, 'f_ver_txt': f_ver_txt, 'f_per_txt': f_per_txt}) if len(buffer_resultado) >= 100: resultados.bd.frecuencias.insert_many(buffer_resultado) agregados += 100 buffer_resultado = [] print('total procesados: ' + str(total) + '. agregados ' + str(agregados) + ' en total en Resultados') if len(buffer_resultado): bd.noticias.insert_many(buffer_resultado) print('total procesados: ' + str(total) + '. agregados ' + str(agregados+len(buffer_kiosco)) + ' en total en Resultados') print('fin')
def test_subir_historicos(self): k = Kiosco() k.subir_historicos('/home/manu/Documentos/discursos_historico.json')
def postear_en_discursoshistoricos(self, cuenta, fecha=None): resultados = Resultados() kiosco = Kiosco() visu = Visualizador() tolkien = Escritor() presidente, subfijopng, hashtag = self.info_cuenta(cuenta) # recupero frecuencias al azar freqs = resultados.bd.frecuencias_discursos.aggregate([{ '$match': { 'presidente': presidente } }, { '$sample': { 'size': 1 } }]) if not bool(freqs): return cm = CM() for freq in freqs: # recupero texto del discurso discurso = kiosco.noticias(diario='casarosada', url=freq['url'])[0] # armo tweet con el discurso en imagenes texto = " ".join( re.split("\s+", discurso['texto'], flags=re.UNICODE)) paths_imagenes = visu.texto_en_imagenes( texto, 'calibri.ttf', 17, 800, 600, os.getcwd() + "/imagenes/intro" + subfijopng) # TODO: la fecha esta MAL. pasar de date a string. tw_intro = { 'texto': "Discurso del " + tolkien.separar_fecha(fecha=freq['fecha']) + " de " + hashtag + ". Hilo 👇", 'media': paths_imagenes } # armo textos del tweet txt_sustantivos = tolkien.texto_tweet_sustantivos_discurso( freq['sustxt']) txt_adjetivos = tolkien.texto_tweet_adjetivos_discurso( freq['adjtxt']) # armo tweet con top 15 de terminos path_imagen_sustantivos = os.getcwd( ) + '/imagenes/sustantivos_discurso' + subfijopng + '.png' etiquetas_sustantivos = [ nombre for nombre, m in freq['sustxt'].items() ][:15] data_sustantivos = [m for nombre, m in freq['sustxt'].items()][:15] visu.lollipop(path=path_imagen_sustantivos, colormap=visu.cmap_del_dia(), titulo="Frecuencia de sustantivos", etiquetas=etiquetas_sustantivos, unidad="cantidad de apariciones", valfmt="{x:.0f}", data=data_sustantivos) tw_terminos = { 'texto': txt_sustantivos, 'media': [path_imagen_sustantivos] } # armo tweet con top 15 de verbos path_imagen_adjetivos = os.getcwd( ) + '/imagenes/adjetivos_discurso' + subfijopng + '.png' etiquetas_adjetivos = [ nombre for nombre, m in freq['adjtxt'].items() ][:15] data_adjetivos = [m for nombre, m in freq['adjtxt'].items()][:15] visu.lollipop(path=path_imagen_adjetivos, colormap=visu.cmap_del_dia(), titulo="Frecuencia de adjetivos", etiquetas=etiquetas_adjetivos, unidad="cantidad de apariciones", valfmt="{x:.0f}", data=data_adjetivos) tw_verbos = { 'texto': txt_adjetivos, 'media': [path_imagen_adjetivos] } # el CM twittea cm.twittear_hilo(cuenta, [tw_intro, tw_terminos, tw_verbos])
def postear_en_discursosdeaf(self, fecha): resultados = Resultados() kiosco = Kiosco() visu = Visualizador() tolkien = Escritor() # recupero frecuencias del discurso freqs = resultados.bd.frecuencias_discursos.aggregate([{ '$match': { 'presidente': 'alberto', 'fecha': fecha } }]) if not bool(freqs): return cm = CM() for freq in freqs: # recupero texto del discurso discurso = kiosco.noticias(diario='casarosada', url=freq['url'])[0] # armo tweet con el discurso en imagenes texto = " ".join( re.split("\s+", discurso['texto'], flags=re.UNICODE)) paths_imagenes = visu.texto_en_imagenes( texto, 'calibri.ttf', 17, 800, 600, os.getcwd() + "/imagenes/introaf") tw_intro = { 'texto': "Discurso del " + tolkien.separar_fecha(fecha=freq['fecha']) + " de #AlbertoFernández. Hilo 👇", 'media': paths_imagenes } # armo textos del tweet txt_sustantivos = tolkien.texto_tweet_sustantivos_discurso( freq['sustxt']) txt_adjetivos = tolkien.texto_tweet_adjetivos_discurso( freq['adjtxt']) # armo tweet con top 15 de terminos path_imagen_sustantivos = os.getcwd( ) + '/imagenes/sustantivos_discursoaf.png' etiquetas_sustantivos = [ nombre for nombre, m in freq['sustxt'].items() ][:15] data_sustantivos = [m for nombre, m in freq['sustxt'].items()][:15] visu.lollipop(path=path_imagen_sustantivos, colormap=visu.cmap_del_dia(), titulo="Frecuencia de sustantivos", etiquetas=etiquetas_sustantivos, unidad="cantidad de apariciones", valfmt="{x:.0f}", data=data_sustantivos) tw_terminos = { 'texto': txt_sustantivos, 'media': [path_imagen_sustantivos] } # armo tweet con top 15 de verbos path_imagen_adjetivos = os.getcwd( ) + '/imagenes/adjetivos_discursoaf.png' etiquetas_adjetivos = [ nombre for nombre, m in freq['adjtxt'].items() ][:15] data_adjetivos = [m for nombre, m in freq['adjtxt'].items()][:15] visu.lollipop(path=path_imagen_adjetivos, colormap=visu.cmap_del_dia(), titulo="Frecuencia de adjetivos", etiquetas=etiquetas_adjetivos, unidad="cantidad de apariciones", valfmt="{x:.0f}", data=data_adjetivos) tw_verbos = { 'texto': txt_adjetivos, 'media': [path_imagen_adjetivos] } # el CM twittea cm.twittear_hilo('discursosdeaf', [tw_intro, tw_terminos, tw_verbos])