Você já parou para pensar que muito do que fazemos no dia a dia pode virar conteúdo? Seja uma pesquisa sobre tendências de nuvem, um estudo sobre novas features da Azure, ou até aquela visita aos fóruns da comunidade. Tudo isso pode ser transformado em pauta para artigos, palestras ou lives.
Quando decidi relançar o canal O Sertão será Cloud, queria evitar o problema clássico: "Sobre o que vou falar essa semana?". Minha resposta foi simples: automatizar a geração de pautas. E é exatamente sobre isso que vou compartilhar aqui: como construí uma solução que coleta conteúdos relevantes de várias fontes (RSS e Reddit), categoriza por tema e gera arquivos Markdown prontos para serem usados como roteiro.
🧾 ideia por trás do projeto
O objetivo é transformar o consumo diário de informação em algo útil para gerar conteúdo. Se estou lendo novidades sobre o Azure, AWS ou DevOps, por que não capturar automaticamente essas referências e organizá-las como possíveis tópicos de live?
Então defini alguns requisitos:
- Buscar notícias e artigos de blogs oficiais (Azure, AWS etc.).
- Ler feeds por tags em portais como Medium e Dev.to.
- Rastrear discussões quentes no Reddit por categoria (Cloud, Dev, Carreira, etc.).
- Agrupar tudo por categoria e gerar arquivos Markdown prontos para serem usados em pauta de live ou post de blog.
✅ Estrutura da solução
Implementei seguindo uma arquitetura simples, mas escalável:
- Adapters (Fontes de Dados): classes que conectam a diferentes fontes (RSS, Reddit).
- Use Case: um coletor que unifica tudo (
CollectPostsUseCase
). - Presenter: que salva os resultados no formato Markdown (
MarkdownPresenter
). - Domínio: um modelo simples
Post
que padroniza os dados.
Essa separação facilita expandir no futuro — por exemplo, posso adicionar um adapter para o X (Twitter) ou para o LinkedIn sem alterar o restante.
1. Coletando dados de RSS (Azure, AWS, Medium, Dev.to)
O RSSAdapter usa feedparser
para ler os feeds e BeautifulSoup
para limpar o HTML do resumo.
class RSSAdapter(DataSourcePort): def __init__(self, name: str, category: str, feed_url: str, top_n: int = 5): self.name = name self.category = category self.feed_url = feed_url self.top_n = top_n def fetch_posts(self): feed = feedparser.parse(self.feed_url) posts = [] for entry in feed.entries[:self.top_n]: resumo = BeautifulSoup(entry.get("summary", ""), "html.parser").get_text()[:300].strip() posts.append(Post( origem="rss", categoria=self.category, titulo=entry.get("title", "Sem título"), resumo=resumo, link=entry.get("link", ""), engajamento=0, hashtags=gerar_hashtags_por_categoria(self.category), )) return posts
Com isso, consigo capturar as últimas notícias do Azure Blog e do AWS News, além de posts relevantes por tags em Medium e Dev.to.
2. Buscando discussões no Reddit
Para conteúdos mais "comunitários", o RedditAdapter lê os posts mais quentes de subreddits como r/aws
, r/azure
e r/devops
. Além do título e resumo, guardo também um indicador simples de engajamento (ups + comentários):
class RedditAdapter(DataSourcePort): def __init__(self, subreddit: str, category: str, limit: int = 5): self.subreddit = subreddit self.category = category self.url = f"https://www.reddit.com/r/{subreddit}/hot.json?limit={limit}" self.headers = {"User-Agent": "trend-analyzer"} def fetch_posts(self): resp = requests.get(self.url, headers=self.headers, timeout=10) data = resp.json() posts = [] for child in data.get("data", {}).get("children", []): p = child.get("data", {}) if p.get("stickied"): continue posts.append(Post( origem="reddit", categoria=self.category, titulo=p.get("title", "Sem título"), resumo=p.get("selftext", "")[:300].strip(), link="https://reddit.com" + p.get("permalink", ""), engajamento=p.get("ups", 0) + p.get("num_comments", 0), hashtags=gerar_hashtags_por_categoria(self.category), )) return posts
3. Apresentando como Markdown
Aqui está o toque final: os posts são agrupados por categoria e salvos como arquivos .md
prontos para uso como pauta de live:
class MarkdownPresenter(PresenterPort): def __init__(self, output_dir: str = "pautas_md"): self.date_folder = datetime.now().strftime("%Y-%m-%d") self.output_dir = os.path.join(output_dir, self.date_folder) os.makedirs(self.output_dir, exist_ok=True) def present(self, posts: List[Post]): categories = {} for post in posts: categories.setdefault(post.categoria, []).append(post) for cat, items in categories.items(): path = f"{self.output_dir}/{cat.replace(' ', '_').lower()}.md" with open(path, "w", encoding="utf-8") as f: f.write(f"# Pautas: {cat}\n\n") for item in items: f.write(f"## {item.titulo}\n{item.resumo}\n\n🔗 [Acessar fonte]({item.link})\n\n{' '.join(item.hashtags)}\n\n---\n\n")
O resultado? Um diretório com arquivos Markdown organizados por data e categoria, como:
🏁 Transformando isso em pauta de live
Agora, toda vez que for preparar uma live do O Sertão será Cloud, basta abrir os arquivos do dia. Cada um contém:
- Títulos prontos para discussão
- Resumo do tema (perfeito para dar contexto)
- Links para a fonte original
- Hashtags sugeridas (ótimas para divulgar no LinkedIn e Twitter)
Em menos de 1 minuto, tenho um roteiro pronto para usar.
📚 Próximos passos
- Adicionar ranking por engajamento (ordenar os temas mais quentes primeiro).
- Exportar também em JSON para integração com ferramentas de automação (ex.: gerar cards automáticos no Trello).
- Integrar com IA: gerar automaticamente um resumo expandido e perguntas que posso usar ao vivo.
E você?
Já pensou em como o que você consome no dia a dia pode virar semanas de conteúdo?
No meu caso, automatizar essa coleta tornou o processo de criar pauta para o canal muito mais rápido e criativo.
👉 Quer que eu publique o código completo no GitHub para você adaptar?
💡Curtiu?
Se quiser trocar ideia sobre IA, cloud e arquitetura, me segue nas redes:
Publico conteúdos técnicos direto do campo de batalha. E quando descubro uma ferramenta que economiza tempo e resolve bem, como essa, você fica sabendo também.
Top comments (0)