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: 1046
Mastodon Mastodon
We use cookies

We use cookies on our website. Some of them are essential for the operation of the site, while others help us to improve this site and the user experience (tracking cookies). You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.