Пример #1
0
def DropLinks():
    try:
        Escrever('Drop de todos links. Havia: {}'.format(QtLinks()))
        db.Links.drop()
        Escrever('Sucesso no drop! Conferindo quantidade: {}'.format(
            QtLinks()))
    except Exception as e:
        Escrever('Exceção no drop: {}'.format(str(e)))
Пример #2
0
def InsertPostMany(posts):
    try:
        qt = len(posts)
        Escrever('Posts recebidos para salvar: {}'.format(qt))
        result = db.Posts.insert_many(posts)
        qtResult = len(result.inserted_ids)
        Escrever('{} posts salvos com sucesso! Qt equivalente: {}'.format(
            qtResult, str(qt == qtResult)))
    except Exception as e:
        Escrever('Exceção no insert post many: {}'.format(str(e)))
Пример #3
0
def InsertLinkMany(links):
    try:
        qt = len(links)
        Escrever('Links recebidos para salvar: {}'.format(qt))
        result = db.Links.insert_many(links)
        qtResult = len(result.inserted_ids)
        Escrever('{} links salvos com sucesso! Qt equivalente: {}'.format(
            qtResult, str(qt == qtResult)))
    except Exception as e:
        Escrever('Exceção no insert link many: {}'.format(str(e)))
Пример #4
0
def GetPage(link, nivel):
    Escrever('Get Page: {}'.format(link), nivel)
    response = requests.get(link)
    Escrever(
        'Código do status de resultado: {}. Ok: {}'.format(
            response.status_code, response.ok), nivel)
    if response.ok:
        return response
    else:
        Escrever('Página não recuperada...', nivel)
        return None
Пример #5
0
def InsertTelegramConversation(nome, user, id):
    try:
        db.TelegramBot.insert_one({
            "nome": nome,
            "user": user,
            "id": id,
            "status": 1,
            "criadoEm": GetDate()
        })

        Escrever('ID Telegram salvo com sucesso: {} ({}) - {}!'.format(
            nome, user, id))
    except Exception as e:
        Escrever('Exceção no InsertTelegramConversation: {}'.format(str(e)))
Пример #6
0
def InsertLink_(linkObj):
    try:
        db.Links.insert_one({
            "fonte": linkObj.fonte,
            "titulo": linkObj.titulo,
            "postUrl": linkObj.postUrl,
            "link": linkObj.link,
            "tipo": linkObj.tipo,
            "criadoEm": GetDate()
        })
        Escrever('Link ({}) {}: {} de {} salvo com sucesso!'.format(
            linkObj.tipo, linkObj.titulo, linkObj.link, linkObj.fonte))

    except Exception as e:
        Escrever('Exceção no insert de link: {}'.format(str(e)))
Пример #7
0
def InsertPost_(Post):
    try:
        db.Posts.insert_one({
            "titulo": Post.title,
            "link": Post.link,
            "data": Post.data,
            "tags": Post.tags,
            "origem": Post.origem,
            "criadoEm": GetDate()
        })
        Escrever('Post {} do {} salvo com sucesso!'.format(
            Post.title, Post.origem))

    except Exception as e:
        Escrever('Exceção no insert de post: {}'.format(str(e)))
Пример #8
0
def InsertLog(logObj):
    try:
        db.Logs.insert_one(logObj)
        EscreverTela('Log salvo com sucesso!')

    except Exception as e:
        Escrever('Exceção no InsertLog: {}'.format(str(e)))
Пример #9
0
def ReadPost():
    try:
        posts = db.Posts.find()
        EscreverTela('Lendo todos posts salvos:')
        for p in posts:
            EscreverTela('{} de {}. Em {}'.format(p.title, p.origem, p.data))

    except Exception as e:
        Escrever('Exceção no read: {}'.format(str(e)))
Пример #10
0
def ReadPostsDaOrigem(origem):
    try:
        posts = db.Posts.find({'origem': origem})
        EscreverTela('Lendo todos posts com origem:' + origem)
        for p in posts:
            EscreverTela('{} de {}. Em {}'.format(p.title, p.origem, p.data))

    except Exception as e:
        Escrever('Exceção no readOrigem: {}'.format(str(e)))
Пример #11
0
def Crawler(fonteTitulo, postItem, nivel):
    # Escrever('Crawler da fonte {}'.format(fonteTitulo), nivel)

    if 'CocaTech' in fonteTitulo:
        response = GetPage(postItem.link, nivel)
        if response is not None:
            # Escrever('Link da página: {}'.format(response.url), nivel)
            linkAjustado = response.url.split('?', 1)[0]
            Escrever('Link Ajustado: {}'.format(linkAjustado), nivel)

            soup = BeautifulSoup(response.content, 'html.parser')
            Escrever('Página recuperada: {}'.format(soup.title.text), nivel)
            return GetCocaTech(linkAjustado, soup, nivel + 1)
        else:
            return None
    else:
        soup = BeautifulSoup(postItem['content'][0].value, 'html.parser')
        return LinksDefault(fonteTitulo, postItem.link, soup, nivel + 1)
Пример #12
0
def UpdatePost(link, Post):
    try:
        db.Posts.update_one({"link": link}, {
            "$set": {
                "titulo": Post.title,
                "data": Post.data,
                "tags": Post.tags,
                "origem": Post.origem
            }
        })
        EscreverTela("Atualizado!")

    except Exception as e:
        Escrever('Exceção no update: {}'.format(str(e)))
Пример #13
0
def NovoPostEncontrado(titulo, postItem, lstPosts, lstLinks, nivel):
    try:
        Escrever(
            'Novo post encontrado de {}. Titulo: {}. Link: {}'.format(
                titulo, postItem.title, postItem.link), nivel)

        links = Crawler(titulo, postItem, nivel + 1)
        if links is not None:
            lstLinks.extend(links)

            if 'tags' in postItem:
                post_tags = []
                for tag in postItem.tags:
                    post_tags.append(tag['term'])
                tags = "; ".join(post_tags)
            else:
                tags = None

            if 'published' in postItem:
                pubDate = postItem.published
            elif 'pubDate' in postItem:
                pubDate = postItem.pubDate
            else:
                pubDate = None

            EnviarViaTelegramBot(titulo, postItem.link, postItem.title, links)
            postItem = PostFeed(postItem.title, tags, postItem.link, pubDate,
                                titulo)
            lstPosts.append(postItem.toJSON())
            return True
        else:
            Escrever('Crawler não retornou links', nivel)
            return False

    except Exception as e:
        Erro('Exceção no novo post encontrado. Erro: {}'.format(str(e)))
        return False
Пример #14
0
def UsuarioAtivo(id):
    try:
        return bool(db.TelegramBot.find_one({'id': id, 'ativo': 1}))
    except Exception as e:
        Escrever('Exceção no exists: {}'.format(str(e)))
        return False
Пример #15
0
def DeletePost(link):
    try:
        db.Posts.delete_many({"link": link})
        EscreverTela('Apagado!')
    except Exception as e:
        Escrever('Exceção no delete: {}'.format(str(e)))
Пример #16
0
def ReadAllPosts():
    try:
        return list(db.Posts.find())
    except Exception as e:
        Escrever('Exceção no readAll: {}'.format(str(e)))
Пример #17
0
def PostExists(link):
    try:
        return bool(db.Posts.find_one({'link': link}))
    except Exception as e:
        Escrever('Exceção no exists: {}'.format(str(e)))
Пример #18
0
def InativarTelegramConversation(id):
    try:
        db.TelegramBot.delete_one({"id": id})
        EscreverTela('Apagado!')
    except Exception as e:
        Escrever('Exceção no delete: {}'.format(str(e)))
Пример #19
0
def ReadAllTelegramUsers():
    try:
        return list(db.TelegramBot.find())
    except Exception as e:
        Escrever('Exceção no ReadAllTelegramUsers: {}'.format(str(e)))
Пример #20
0
    EscreverTela('Qt de posts existentes: {}'.format(ConnectionDB.QtPosts()))
    EscreverTela('Qt de links existentes: {}'.format(ConnectionDB.QtLinks()))

    Inicio()
    novoPostSalvo = False
    lstLinks = []
    lstPosts = []

    with open('Fontes.txt') as txt:
        fontes = txt.readlines()
        # remove whitespace characters like '\n' at the end of each line
        fontes = [x.strip() for x in fontes]

    for fonte in fontes:
        nivel = 0
        Escrever('Acessando a fonte: {}'.format(fonte), nivel)

        try:
            nivel += 1
            novoPostNesseFeed = False
            rss = feedparser.parse(fonte)
            Escrever('Resultado do parse: {}'.format(rss.status), nivel)
            rssTitle = rss.feed.title
            if 'updated' in rss:
                updated = rss.updated
            elif 'updated' in rss.feed:
                updated = rss.feed.updated
            elif 'published' in rss.feed:
                updated = rss.feed.published

            qtEntries = len(rss.entries)