uk
Feedback
Python Brasil

Python Brasil

Відкрити в Telegram

Canal para compartilhamento de links, cursos vagas e eventos sobre Python. @laenderoliveira

Показати більше

📈 Аналітичний огляд Telegram-каналу Python Brasil

Канал Python Brasil (@pythonbrasil) у мовному сегменті Португальська є активним учасником. На даний момент спільнота об'єднує 25 009 підписників, посідаючи 5 451 місце в категорії Технології та додатки та 1 957 місце у регіоні Бразилія.

📊 Показники аудиторії та динаміка

З моменту свого створення невідомо, проект продемонстрував стрімке зростання, зібравши аудиторію у 25 009 підписників.

За останніми даними від 19 червня, 2026, канал демонструє стабільну активність. Хоча за останні 30 днів спостерігається зміна кількості учасників на -169, а за останні 24 години на -6, загальне охоплення залишається високим.

  • Статус верифікації: Не верифікований
  • Рівень залученості (ER): Середній показник залученості аудиторії становить 7.61%. Протягом перших 24 годин після публікації контент зазвичай збирає N/A% реакцій від загальної кількості підписників.
  • Охоплення публікацій: В середньому кожен допис отримує 1 904 переглядів. Протягом першої доби публікація в середньому набирає 0 переглядів.
  • Реакції та взаємодія: Аудиторія активно підтримує контент: середня кількість реакцій на один пост – 8.
  • Тематичні інтереси: Контент зосереджений навколо ключових тем, таких як palestra, 22h, atividade, dado, programação.

📝 Опис та контентна політика

Автор описує ресурс як майданчик для висловлення суб'єктивної думки:
Canal para compartilhamento de links, cursos vagas e eventos sobre Python. @laenderoliveira

Завдяки високій частоті оновлень (останні дані отримано 20 червня, 2026), канал підтримує актуальність та високий рівень охоплення публікацій. Аналітика показує, що аудиторія активно взаємодіє з контентом, що робить його важливою точкою впливу в категорії Технології та додатки.

25 009
Підписники
-624 години
-297 днів
-16930 день
Архів дописів
RT @PythonJamaica: 🐍🇯🇲 #pyconjamaica2017 🐍🇯🇲 🐍🇯🇲 🐍November 16-18🐍🇯🇲 🐍 🐍🇯🇲 🐍🐍save the date🐍🐍🇯🇲 🐍

E como os itens são salvos no Firebase? Resposta: Recentemente o Firebase lançou uma API para acessar a SDK usando Python, então eu escrevi um item pipeline chamado scrapy-firebase (https://github.com/skhaz/scrapy-firebase) que usa essa API para escrever no banco de dados do Firebase, a cada item coletado do Scrapy, o método process_item (https://github.com/skhaz/scrapy-firebase/blob/master/scrapy_firebase.py#L35) do pipeline é incado, nesse método eu salvo no Firebase. class FirebasePipeline(BaseItemExporter): def load_spider(self, spider): self.crawler = spider.crawler self.settings = spider.settings def open_spider(self, spider): self.load_spider(spider) configuration = { 'credential': credentials.Certificate(filename), 'options': {'databaseURL': self.settings['FIREBASE_DATABASE']} } firebase_admin.initialize_app(**configuration) self.ref = db.reference(self.settings['FIREBASE_REF']) def process_item(self, item, spider): item = dict(self._get_serialized_fields(item)) child = self.ref.child('/'.join([item[key] for key in self.keys])) child.set(item) return item Próximos passos Ao mesmo tempo em que eu notifico o canal (https://t.me/RegisBittencourt) do Telegram, estou usando o Cloud Natural Language API (https://cloud.google.com/natural-language/) para classificar a notícia, e, em seguida, salvo no BigQuery (https://bigquery.cloud.google.com/). Após algum tempo, acredito que será possível usar o BigQuery para determinar quais trechos, quando e o quê costuma dar mais problemas à rodovia, através de data mining!

photo content

const buildUrl = require('build-url'); admin.initializeApp(functions.config().firebase); exports.notifyChannel = functions.database.ref('/news/{what}/{uid}') .onCreate(event => { const config = functions.config().telegram; const url = buildUrl('https://api.telegram.org', { path: `bot${config.bot.token}/sendMessage`, queryParams: { chat_id: config.channel.chat_id, } }); return request({ method: 'POST', uri: url, resolveWithFullResponse: true, body: { text: event.data.val().content }, json: true }).then(response => { if (response.statusCode === 200) { return response.body.id; } throw response.body; } ); }); Essa função é bem simples; basicamente, em qualquer evento de onCreate ela é chamada, eu faço uma chamada POST na API do Telegram com o nome do canal, token do bot e conteúdo, que no caso é o texto da notícia.

O primeiro passo é extrair as informações do site. Eu optei por utilizar o framework Scrapy (https://scrapy.org/), por alguns motivos que ficarão bem claros abaixo e por ter bastante experiência escrevendo web crawlers com o Scrapy, eu não pretendo escrever um tutorial a respeito neste artigo, isso ficará para uma próxima oportunidade. Antes de tudo eu preciso definir o que eu quero extrair; isso é feito definindo uma class com N campos (https://doc.scrapy.org/en/latest/topics/items.html#scrapy.item.Field) herdando de scrapy.Item (https://doc.scrapy.org/en/latest/topics/items.html) class Entry(Item): uid = Field() spider = Field() timestamp = Field() content = Field() Como é possível notar a aranha, ou crawler ficou bem simples, mas como pode ser visto abaixo, vou explicar cada parte a seguir. class RegisSpider(CrawlSpider): name = 'regis' allowed_domains = ['autopistaregis.com.br'] start_urls = ['http://www.autopistaregis.com.br/?link=noticias.todas'] rules = ( Rule(LinkExtractor(allow=r'\?link=noticias.?ver*'), callback='parse_news'), ) def parse_news(self, response): loader = EntryLoader(item=Entry(), response=response) loader.add_xpath('content', '//*[@id="noticia"]/p[not(position() > last() -3)]//text()') return loader.load_item() A propriedade start_urls indica onde a aranha vai iniciar a varredura de páginas Após isso, definimos algumas regras. Vou usar um LinkExtractor (https://doc.scrapy.org/en/latest/topics/link-extractors.html), que, como o próprio nome diz é um componente para extrair links seguindo uma regra das páginas encontradas. Nesse caso eu usei uma expressão regular que bate com todas as URLS de notícias do site, e defino um callback que será chamado para cada página chamado parse_news LinkExtractor(allow=r'\?link=noticias.?ver*'), callback='parse_news') Então é aqui que a mágica toda acontece: passei algum tempo analisando o código fonte da página e usando o inspetor web para poder gerar um xpath que bata com notícia, excluindo as informações extras na página. XPath O XPath (https://www.w3schools.com/xml/xml_xpath.asp) é uma forma de atravessar o html e extrair alguma informação específica. É uma linguagem bem poderosa, neste caso eu usei a expressão [not(position() > last() -3)] para excluir os últimos 3 parágrafos marcados pela tag , que o site sempre coloca como uma forma de rodapé. Infelizmente, nem sempre os sites seguem boas práticas, o que me facilitaria e muito a extração dos dados! loader.add_xpath('content', '//*[@id="noticia"]/p[not(position() > last() -3)]//text()') Os outros campos, como ID da noticía e timestamp são “extraídos” usando um middleware chamado scrapy-magicfields (https://github.com/scrapy-plugins/scrapy-magicfields), desta maneira: MAGIC_FIELDS = { 'uid': "$response:url,r'id=(\d+)'", 'spider': '$spider:name', 'timestamp': "$time", } O próximo passo é rodar o web crawler periodicamente. Eu usei o sistema de cloud do scrapinghub, que é a empresa que desenvolve o Scrapy e outras ferramentas de scraping, nele eu posso configurar para rodar de tempos em tempos o crawler. No meu caso eu configurei para rodar a cada 30 minutos, Mesmo que possível, eu não posso publicar diretamente, apenas as novas notícias, caso contrário toda vez que o crawler rodar eu estaria poluindo o canal com as notícias repetidas. Então eu decidi salvar num banco de dados intermediário para conseguir distinguir o que é novo do que já foi indexado. Persistência Eis que entra o Firebase (https://firebase.google.com/), e sua nova funcionalidade chamada de functions (https://firebase.google.com/docs/functions), com o qual, eu posso escrever uma função que reage a determinados eventos no banco de dados, como por exemplo, quando um novo dado é inserido. const functions = require('firebase-functions'); const admin = require('firebase-admin'); const request = require('request-promise');

photo content

Criando um bot de notícias para o Telegram usando Scrapy e Firebase http://feedproxy.google.com/~r/NullOnError/~3/tphk9yKZ8bE/ Problema Eu costumo pegar com frequência a rodovia Régis Bittencourt (http://www.autopistaregis.com.br/) e o que acontece com frequência é o trânsito parar completamente no meio do nada e sem acesso à internet, então eu fico sem a mínima noção do que está acontecendo e em quanto tempo conseguirei chegar ao meu destino. Pensando nisso, decidi escrever um pequeno bot para o Telegram que publica num canal as notícias da estrada! Como de costume no NULL on error, vou explicar como fiz. Web scraping

Olá, pessoal! A Myreks está aberta para quem quiser conhecer e fazer parte do time. Estamos com a posição para Operations Engineer aberta, para ajudar a construir nossa cultura devops, colaboração entre as pessoas e evolução contínua do produto. A descrição da vaga está aqui: https://www.myreks.com/v3/vagas....­ Quem quiser conversar, pode me procurar direto, andre@myreks.com, skype:andre.pastore, telegram:apast, twitter:apast, ou pode escrever nos canais do site.

RT @FilipeCifali: 8 dias galera!! Garanta já seu ingresso para a #PythonSul 2017 @catarse https://t.co/ltfAoj68F4 via @catarse

Primeiro lote acabando em 3...2...1. Corre que ainda dá tempo de aproveitar o primeiro lote! #uaipython #pybr13… https://t.co/NKs87fJMe3

RT @pythonbrasil: Não podia faltar ela...nossa querida pylady Paola Katherine( @pk_pacheco) também será keynote na #pybr13... https://t.co/

Não podia faltar ela...nossa querida pylady Paola Katherine( @pk_pacheco) também será keynote na #pybr13... https://t.co/zmoHOzrahH

Quem ainda não comprou passagem para a #pybr13, neste fim de semana Latam esta com promoção, Ida e volta saindo… https://t.co/wAbwNVoyw7

RT @taniaandrea_com: In memoriam @jeanferri. Thank you my friend... https://t.co/3m59akpOgB #muitoobrigada #amigos #python #pythonbrasil…

Ô sô, ainda não se inscreveu neste trem? Tem só mais um tiquim de dias o lote 1. #uaipython #pybr13… https://t.co/7G87npc8Og

Ô sô, ainda não se inscreveu neste trem? Tem só mais um tiquim de dias para adquirir o lote 1. Se inscreve uai!!!... https://t.co/79OSaqSRbO

Django project optimization guide (part 1) http://dizballanze.com/django-project-optimization-part-1/

50° Encontro do Grupo de Usuários Python de Pernambuco!!!!! 👏👏👏 #pugpe #python https://t.co/jHSUatr0qr