biblegateway/app.py
2026-02-25 15:46:55 -08:00

80 lines
2.8 KiB
Python

from flask import Flask, request, render_template, current_app, send_file
import json
from io import BytesIO
import zipfile
from weasyprint import HTML, CSS
from bs4 import BeautifulSoup
import requests
def read_css_file():
with current_app.open_resource('templates/passage.css') as f:
content = f.read().decode('utf-8')
return content
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
reference = ''
version = ''
verse_html = ''
error = 'No error.'
if request.method == 'POST':
reference = request.form.get('scripture_reference')
version = request.form.get('version')
# Map version to ESV Bible ID
bible_id = {
'NRSV': 'nrsv',
'NIV': 'niv',
'NLT': 'nlt'
}.get(version)
if bible_id and reference:
webfriendlyref=reference.replace(' ','%20').replace(':','%3A')
url = f'https://www.biblegateway.com/passage/?search={webfriendlyref}&version={bible_id}'
print(url)
try:
response = requests.get(url)
#response.raise_for_status()
verse = response.text
except request.RequestException as e:
error = f"Error fetching from Bible Gateway: {str(e)}"
else:
error = "Please provide both a reference and a version."
soup = BeautifulSoup(verse, 'html.parser')
verse_html = ''
verse_text = ''
for sp in soup.find_all('div',class_='footnotes'):
sp.decompose()
for sp in soup.find_all('sup',class_='footnote'):
sp.decompose()
for sp in soup.find_all('sup',class_='crossreference'):
sp.decompose()
for sp in soup.find_all('a',class_='full-chap-link'):
sp.decompose()
for sp in soup.find_all('div',class_='crossrefs'):
sp.decompose()
for sp in soup.find_all('div',class_='passage-content'):
verse_html = verse_html + sp.prettify()
verse_text = verse_text + sp.get_text()
#verse_html = "<!DOCTYPE html><html lang=en><head><meta charset='utf-8'><style>{}</style></head><body>".format(read_css_file()) + verse_html + '</body></html>'
verse_html = "<!DOCTYPE html><html lang=en><head><meta charset='utf-8'></head><body>"+ verse_html + '</body></html>'
print(verse_html)
HTML(string=verse_html).write_pdf(
"custom_size.pdf",
stylesheets=[CSS(string=read_css_file())]
)
print(f"Reference: {reference}, Version: {version}, Text: {verse_text}, Error: {error}")
return render_template('index.html', reference=reference, version=version, verse_html=verse_html, error=error)
if __name__ == '__main__':
app.run()