Example #1
0
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")
Example #2
0
    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))
Example #3
0
    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)
Example #5
0
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")