NemLiNemLereiBot é um Reddit Bot inspirado no /u/autotldr que resume as notícias enviadas pelos usuários.
- Refatorar e organizar o código (Principalmente o pacote database)
- Tratar Exceptions
- Contar em porcentagem a redução do artigo em relação ao resumo.
Linux:
Instale a biblioteca libmysqlclient-dev (necessária para conexão com banco de dados MySQL).
sudo apt-get install libmysqlclient-devInstale as dependências:
pip install -r requirements.txtApós instalar as dependências, baixe os Punkt Tokenizer Models (necessário para a biblioteca sumy).
python3 -c "import nltk; nltk.download('punkt')" Renomeie o arquivo config.sample.yml para config.yml e preencha com as credenciais.
O bot é dividido em três partes, watch, fetch and reply. Os três executam em loop infinito.
Watch - Procura por novos posts (submissões) em um subreddit.
./Bot.py watchFetch - Extrai os metadados de um artigo de um site e resume.
./Bot.py fetchReply - Responde os posts (submissões) com o resumo.
./Bot.py replyAs extensões ajudam o bot a interpretar as páginas sem a necessidade de modificar o código principal do projeto. É extremamante recomentável utilizar a biblioteca BeautifulSoup para extrair os dados dos artigos. Segue o exemplo mais básico de um plugin.
""" Crie uma classe chamada Plugin """
class Plugin():
""" register_plugin é um método obrigatório, ele dirá ao gerenciador de plugins
qual o nome do plugin (mesmo nome do arquivo sem .py) e por qual padrão (regex)
de URL ele deve ser invocado para interpretar a página.
Defina com cautela o padrão regex, evite que o mesmo padrão caia em páginas como
blogs ou qualquer outra coisa do mesmo domínio, eles tendem a ter uma estrutura
em html diferente das outras e pode fazer com que o plugin não consiga interpretá-lo
da maneira correta.
"""
def register_plugin(self, PluginManager):
PluginManager.register_plugin(
'g1_globo_com', r"^https?://g1.globo.com((?!/google/amp/))(.*)/noticia/(.*).ghtml$")
""" get_article_metadata é um outro método obrigatório, este deverá retornar um
dicionário contendo as chaves 'subtitle', 'date_published' e 'content'.
Subtitle deverá conter o subtítulo da notícia, se houver.
Date_published deverá conter a data de publicação da notícia (em objeto datetime),
se houver.
Content deverá conter o conteúdo da notícia, por razões óbvias este é o único
dado obrigatório."""
def get_article_metadata(self, url):
...
return {'subtitle': self.get_title(),
'date_published': self.get_date(),
'content': self.get_content()}Sua ajuda será sempre bem-vinda, qualquer coisa só commitar ;)