Rodando um webserver localmente em Python

Categoria: Python Publicado: Sexta, 26 Março 2021 Escrito por Helio Loureiro Imprimir

Toda vez que gravamos o Unix Load On (Canal Unix Load On), eu acabo fazendo uma seleção tosca do que vamos falar.  Isso sempre me deu uma coceira de resolver.  E nada melhor que o bom e velho Python.

Hoje eu coloquei as mangas de fora e fiz funcionar.  No bom e velho modo script: rodo num shell, e pego o resultado.  Mas cheguei no ponto em que gostaria de que isso estivesse disponível em modo web, pra eu poder mostrar durante o programa diretamente no browser.

O Python fornece o módulo SimpleHTTPServer, que aliás parece que no Python3 virou uma classe de http.serve.  Mas tem.  Ele mostra o filesystem via interface http a partir de onde você chama o módulo.  Não deveria ser complicado fazer o output do meu script ir pra uma interface http.  E realmente foi o que fiz.


def start():

    class Handler(BaseHTTPRequestHandler):
        def do_GET(self):
            self.send_response(200)
            self.send_header("Content-type", "text/html")
            self.end_headers()
            client_ip, client_port = self.client_address
            reqpath = self.path.rstrip()
            print(f"request from {client_ip}:{client_port} for {reqpath}")
            article = get_final_article()
            title = get_title(article)
            link = get_link(article)
            response = f"""
<h1>Title: <a href="/{link}">{title}
<h2>Link: <a href="/{link}">{link}</a></h2>
""" 
            content = bytes(response.encode("utf-8"))
            self.wfile.write(content)

Se leu com atenção vai ver que a linha do artigo eu pego em "article = get_final_article()".  Isso retorna algo como:

* [Linux developers get ready to wield the secateurs against elderly microprocessors • The Register](https://www.theregister.com/2021/01/11/linux_olld_cpus/)

Dai o restante é sanitizar cada um pra mostrar corretamente.

O script todo pode ser visto aqui: https://github.com/helioloureiro/homemadescripts/blob/master/random_article.py

O resultado no console é algo parecido com isso aqui:


./random_article.py 
127.0.0.1 - - [26/Mar/2021 21:31:27] "GET /newarticle? HTTP/1.1" 200 -
request from 127.0.0.1:46060 for /newarticle?
 = Articles =
 * /helioloureiro/canalunixloadon/blob/master/pautas/2016030.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2016040.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2016041.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2016050.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2016051.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2016090.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2016100.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2016110.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2016120.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2017010.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2017020.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2017030.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2017040.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2017060.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2017061.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2017070.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2017080.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2017110.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2018030.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2018050.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2018060.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2018080.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2018100.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2019020.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2019040.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2019070.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/2019110.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20200717.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20200807.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20201001.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20201015.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20201029.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20201115.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20201204.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20210121.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20210205.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20210215.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20210312.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20210325.md
 * /helioloureiro/canalunixloadon/blob/master/pautas/20210410.md
Latest: /helioloureiro/canalunixloadon/blob/master/pautas/20210410.md
https://raw.githubusercontent.com/helioloureiro/canalunixloadon/blob/master/pautas/20210410.md
Article selected: * [Linux developers get ready to wield the secateurs against elderly microprocessors • The Register](https://www.theregister.com/2021/01/11/linux_olld_cpus/)
title: Linux developers get ready to wield the secateurs against elderly microprocessors • The Register
article: * [Linux developers get ready to wield the secateurs against elderly microprocessors • The Register](https://www.theregister.com/2021/01/11/linux_olld_cpus/)
Acessos: 349