quarta-feira, 12 de fevereiro de 2020

Python: gerando feed rss a partir de um arquivo txt

Olá, pessoal!
Hoje eu apresento para vocês um código simples em python + flask para que vocês possam criar um web app que gere um rss feed a partir de um arquivo txt. Indo direto ao ponto, o código está logo abaixo:

import os
from flask import Flask, jsonify, request, make_response, Response
from rfeed import *
import random
import datetime
import codecs
app = Flask(__name__)
@app.route('/')
def frases():
    random.randrange(0,23)
    arquivo = codecs.open("frases.txt", "r", encoding='utf-8')
    palavras = []
    for linha in arquivo:
        linha = linha.strip()
        palavras.append(linha)
    arquivo.close()
    numero = random.randrange(0, len(palavras))
    escolha = palavras[numero].upper()
    # Define o item do feed
    item1 = Item(
        title=escolha,
        link = "http://www.kalirio.com.br",
        description=escolha,
        author = "contato@kalirio.com.br",
        guid = Guid("http://www.kalirio.com.br"),
        pubDate = datetime.datetime.now())
    feed  = Feed(
        title = "Frases de Bruce Lee",
        link="https://www.kalirio.com.br",
        description="Frases de Bruce Lee",
        language="pt-BR",
        lastBuildDate = datetime.datetime.now(),
        items = [item1]
    )
    ##return feed.rss()
    return Response(feed.rss(), mimetype='text/xml')

if __name__ == "__main__":
    port = int(os.environ.get("PORT", 5000))
    app.run(host='0.0.0.0', port=port)

Eu escrevi esse programa com um objetivo simples: gerar um feed rss com apenas 1 frase de Bruce Lee que seria escolhida aleatoriamente a partir um arquivo com 24 frases. Entendendo o arquivo:

O primeiro passo é abrir o arquivo com as frases

random.randrange(0,23)
    arquivo = codecs.open("frases.txt", "r", encoding='utf-8')
    palavras = []
    for linha in arquivo:
        linha = linha.strip()
        palavras.append(linha)
    arquivo.close()
Em seguida eu escolho um número aleatório e seleciono qual a frase da vez:

numero = random.randrange(0, len(palavras))
    escolha = palavras[numero].upper()

O passo seguinte é adicionar as características do feed com a frase escolhida

 # Define o item do feed
    item1 = Item(
        title=escolha,
        link = "http://www.kalirio.com.br",
        description=escolha,
        author = "contato@kalirio.com.br",
        guid = Guid("http://www.kalirio.com.br"),
        pubDate = datetime.datetime.now())
    feed  = Feed(
        title = "Frases de Bruce Lee",
        link="https://www.kalirio.com.br",
        description="Frases de Bruce Lee",
        language="pt-BR",
        lastBuildDate = datetime.datetime.now(),
        items = [item1]

O último passo é especificar a saída do app:

return Response(feed.rss(), mimetype='text/xml')

Caso vocês queiram adaptar esse arquivo para fazer o deploy no Heroku, não se esqueçam de adicionar o arquivo Procfile

web: python rss.py

E o arquivo Pipfile

[[source]]
url = "https://pypi.python.org/simple"
verify_ssl = true

[packages]
Flask = "*"
rfeed = "*"
[requires]
python_version = "3.6"