Tabnews, agora em código executável

Há PWA (Progressive Web App), aplicativos nativos para Android, IOS e via Terminal. Então desenvolvi o projeto feito em python usando duas bibliotecas. pywebview e pyinstaller. A primeira biblioteca faz com que use o usuário use website dentro de uma aplicação customizável. Isto é, você mantém o site original para visualizar apenas. Já a segunda biblioteca compila um programa em python em executável independente do sistema operacional usado.

Código fonte:

import webview

class Api:
    def __init__(self):
        webview.settings['ALLOW_DOWNLOADS'] = True
        webview.settings['OPEN_EXTERNAL_LINKS_IN_BROWSER'] = False
        webview.settings['OPEN_DEVTOOLS_IN_DEBUG'] = False

    def read_cookies(self, window):
        cookies = window.get_cookies()
        for c in cookies:
            print(c.output())

    def clear_cookies(self, window):
        window.clear_cookies()
        print('Cookies cleared')

if __name__ == '__main__':
    api = Api()

    window = webview.create_window(
        'TabNews',
        'https://tabnews.com.br',
        js_api=api,
        confirm_close=True
    )

    webview.start(api.read_cookies, window, user_agent='Chrome/51.0.2704.103', private_mode=False)

Segue a documentação para baixar o pywebview: https://pywebview.flowrl.com/

Vamos explicar o que eu fiz até aqui. Acompanhe:

Em caso de salvar algum arquivo pelo TabNews, será perguntado ao seu sistema onde salvar, do contrário, seria salvo sem seu consentimento.

webview.settings['ALLOW_DOWNLOADS'] = True

Aqui permite você acessar quaisquer link dentro da aplicação, do contrário, ira-se abrir o seu navegador a cada link acessado.

webview.settings['OPEN_EXTERNAL_LINKS_IN_BROWSER'] = False

Para um leigo é suficiente o acesso à página. Então bloqueei o DevToos, por segurança.

webview.settings['OPEN_DEVTOOLS_IN_DEBUG'] = False

Essa parte, está relacionado aos cookies, simulando como navegador tradicional. Do contrário, a escolha do usuário para tema "dark" ou crendenciais não seriam salvos. Também não é bom manter todo o tempo os cookies, por segurança ou perfomance.

def read_cookies(self, window):
        cookies = window.get_cookies()
        for c in cookies:
            print(c.output())

    def clear_cookies(self, window):
        window.clear_cookies()
        print('Cookies cleared')

Por fim, eu estou simulando um "user_agent", não se faz nercessário neste caso. Porque ele funciona normal. Etretanto, por prevenção, quis inserir por compatibilidade.

user_agent='Chrome/51.0.2704.103',

O restante do trecho não explicado, já se percebe à lógica. Como 'https://tabnews.com.br', ou seja, destino que quero visualizar e seja carregado o site para mim. Exclusive, fiz esse post através da minha própria aplicação. =)

Observação: Para instalar como código executável, segue os seguintes comandos após clonar o repositório: pip install pyinstaller pyinstaller -F tabnews.py Use -i para inserir um ícone de sua escolha. pyinstaller -i logo.ico -F tabnews.py

Imagens:

Escrito por Jeiel Lima Miranda

caramba que legal, me parece um bom portólio