Exemplo n.º 1
0
    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)))
Exemplo n.º 2
0
    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)))
Exemplo n.º 3
0
    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)))
Exemplo n.º 4
0
    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)))
Exemplo n.º 5
0
    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))
Exemplo n.º 6
0
    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)))
Exemplo n.º 7
0
    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
Exemplo n.º 8
0
    def test_actualizar_diario(self):
        k = Kiosco()

        i = Infobae()
        #i.etiqueta = 'test_todos'
        i.leer()

        k.actualizar_diario(i)
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
    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)))
Exemplo n.º 11
0
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)
Exemplo n.º 12
0
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
Exemplo n.º 13
0
    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)))
Exemplo n.º 14
0
    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)))
Exemplo n.º 15
0
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')
Exemplo n.º 16
0
    def test_subir_historicos(self):
        k = Kiosco()

        k.subir_historicos('/home/manu/Documentos/discursos_historico.json')
Exemplo n.º 17
0
    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])
Exemplo n.º 18
0
    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])