def perfil(parametros): fecha = parametros['fecha'] medios = set(parametros['medios']) twittear = parametros['twittear'] if len(medios) == 0: medios = set([ 'clarin', 'lanacion', 'infobae', 'paginadoce', 'eldestape', 'telam', 'perfil', 'ambito', 'tn' ]) string_fecha = "" if type(fecha) is dict: string_fecha = fecha['desde'].strftime( "%d.%m.%Y") + " al " + fecha['hasta'].strftime("%d.%m.%Y") else: string_fecha = fecha.strftime("%d.%m.%Y") with open('medios/diarios/config.yaml', 'r') as stream: try: config = yaml.safe_load(stream) except yaml.YAMLError as exc: print(exc) etiqueta_medios = [] k = Kiosco() for diario in config['diarios']: tag = diario['tag'] categorias = k.categorias_existentes(diario=tag) etiqueta_medios = [diario['twitter']] if tag not in medios: continue lista_medio = [] total = k.contar_noticias(diario=tag, fecha=fecha) if total == 0: continue for cat in categorias: n = k.contar_noticias(diario=tag, categorias=[cat], fecha=fecha) lista_medio.append(n) data = [] data.extend([n * 100 / total for n in lista_medio]) path_imagen = "perfil-" + tag + ".jpg" utiles.lollipop(path=path_imagen, colormap=utiles.cmap_del_dia(), titulo="Resumen de " + diario['twitter'] + " - " + string_fecha, etiquetas=categorias, unidad="cantidad de noticias", valfmt="{x:.0f}", data=lista_medio) if twittear: texto = "Suma de noticias de #" + tag + " del " + string_fecha + ", en cada una de sus secciones." utiles.twittear(texto=texto, path_imagen=path_imagen, cuenta="dlm")
def leer(self): kiosco = Kiosco() print("leyendo '" + self.etiqueta + "'...") for url, fecha, titulo, categoria in self.entradas_feed(): if kiosco.contar_noticias( diario=self.etiqueta, url=url): # si existe ya la noticia (url), no la decargo continue texto = self.parsear_noticia(url=url) if texto == None: continue self.noticias.append( Noticia(fecha=fecha, url=url, diario=self.etiqueta, categoria=categoria, titulo=titulo, texto=texto))
def leer(self): kiosco = Kiosco() print("leyendo '" + self.etiqueta + "'...") tag_regexp = re.compile(r'<[^>]+>') for entrada in fp.parse(self.feed_noticias).entries: url = entrada.link if kiosco.contar_noticias( diario=self.etiqueta, url=url): # si existe ya la noticia (url), no la decargo continue titulo = entrada.title texto = re.sub(tag_regexp, ' ', entrada.content[0].value) fecha = dateutil.parser.parse( entrada.published) - datetime.timedelta(hours=3) categoria = url.split('/')[3] if categoria == "america": categoria = "internacional" if categoria == "teleshow": categoria = "espectaculos" if categoria == "deportes-2": categoria = "deportes" if categoria not in self.categorias: continue self.noticias.append( Noticia(fecha=fecha, url=url, diario=self.etiqueta, categoria=categoria, titulo=titulo, texto=self.limpiar_texto(texto)))
# recupero el indice indice_twittero = k.bd.temp.find_one({'clave':'indice-twittero'}) if indice_twittero: idx = indice_twittero['idx'] if idx < len(tuplas_tag_cat): # actualizo el indice de la bd: lo incremento en 1 k.bd.temp.update_one({'clave':'indice-twittero'}, {'$inc':{'idx':1}}) else: # si ya recorrio todas las tuplas, entonces quiere decir que ya twitteo todo. espero a que vuelvan a reinicar el idx. exit # si ya supero el numero total de tuplas, entonces lo reseteo a 0 # k.bd.temp.replace_one({'clave':'indice-twittero'}, {'clave':'indice-twittero', 'idx':1}, upsert=True) # idx = 0 else: # si no existe el indice entonces lo reseteo a 0 k.bd.temp.replace_one({'clave':'indice-twittero'}, {'clave':'indice-twittero', 'idx':1}, upsert=True) idx = 0 tupla = tuplas_tag_cat[idx] fecha = datetime.datetime.now().date() - datetime.timedelta(days=1) while k.contar_noticias(fecha=fecha, diario=tupla[0], categorias=tupla[1]) < 3: # chequeo que hayan por lo menos 2 noticias para que el analisis sea representativo. k.bd.temp.update_one({'clave':'indice-twittero'}, {'$inc':{'idx':1}}) idx += 1 tupla = tuplas_tag_cat[idx] parametros = {'medios':[tupla[0]], 'top_max':100, 'fecha':fecha, 'twittear':True, 'solo_titulos':False, 'categorias':[tupla[1]]} dlm.top_todo(parametros)
def intensidad(parametros): fecha = parametros['fecha'] medios = set(parametros['medios']) categorias = parametros['categorias'] twittear = parametros['twittear'] if len(categorias) == 0: categorias = [ 'politica', 'economia', 'sociedad', 'internacional', 'deportes', 'espectaculos', 'cultura' ] if len(medios) == 0: medios = set([ 'clarin', 'lanacion', 'infobae', 'paginadoce', 'eldestape', 'telam', 'perfil', 'ambito', 'tn' ]) string_fecha = "" if type(fecha) is dict: string_fecha = fecha['desde'].strftime( "%d.%m.%Y") + " al " + fecha['hasta'].strftime("%d.%m.%Y") else: string_fecha = fecha.strftime("%d.%m.%Y") data = [] k = Kiosco() with open('medios/diarios/config.yaml', 'r') as stream: try: config = yaml.safe_load(stream) except yaml.YAMLError as exc: print(exc) etiqueta_medios = [] for diario in config['diarios']: tag = diario['tag'] etiqueta_medios.append(diario['twitter']) if tag not in medios and len(medios) > 0: continue lista_medio = [] total = k.contar_noticias(diario=tag, fecha=fecha) if total == 0: continue for cat in categorias: n = k.contar_noticias(diario=tag, categorias=[cat], fecha=fecha) lista_medio.append(n) data.append([n * 100 / total for n in lista_medio]) conteo = np.array(data) fig, ax = plt.subplots() im, cbar = utiles.heatmap(conteo, etiqueta_medios, categorias, ax=ax, cmap=utiles.cmap_del_dia(), cbarlabel=string_fecha, cbar_format="{x:.0f}%") texts = utiles.annotate_heatmap(im, valfmt="{x:.1f}") path_imagen = "intensidad.jpg" fig.tight_layout() plt.savefig(path_imagen, bbox_inches='tight', dpi=100) if len(categorias) > 0: hashtags_categorias = " #" + " #".join( [" #".join(categorias[:-1]), categorias[-1]] if len(categorias) > 2 else categorias) medios = list(medios) if len(medios) > 0: hashtags_medios = " #" + " #".join( [" #".join(medios[:-1] ), medios[-1]] if len(medios) > 2 else medios) if twittear: texto = "Porcentaje de noticias x categorÃa." + hashtags_medios + hashtags_categorias + "." utiles.twittear(texto=texto, path_imagen=path_imagen, cuenta="dlm")