Basic functionality and API call to ESV.org is complete along with the parsing of the returned object to something more presentable.

This commit is contained in:
Norm Rasmussen
2025-01-24 13:28:46 -05:00
commit dbd8ccbe5d
5 changed files with 212 additions and 0 deletions

153
verse-time-display.py Normal file
View File

@ -0,0 +1,153 @@
import requests
from Levenshtein import distance as lev
import time
import re
import random
import timeit
from timeout import timeout
import datetime
VERSION = "en-lsv"
APIKEY = "Token f562cf2d890151d682065696dacdc0f86938a18e"
HEADERS = {"Authorization": APIKEY}
BIBLE_BOOKS = [
"Genesis",
"Exodus",
"Leviticus",
"Numbers",
"Deuteronomy",
"Joshua",
"Judges",
"Ruth",
"1 Samuel",
"2 Samuel",
"1 Kings",
"2 Kings",
"1 Chronicles",
"2 Chronicles",
"Ezra",
"Nehemiah",
"Esther",
"Job",
"Psalm",
"Proverbs",
"Ecclesiastes",
"Song of Solomon",
"Isaiah",
"Jeremiah",
"Lamentations",
"Ezekiel",
"Daniel",
"Hosea",
"Joel",
"Amos",
"Obadiah",
"Jonah",
"Micah",
"Nahum",
"Habakkuk",
"Zephaniah",
"Haggai",
"Zechariah",
"Malachi",
"Matthew",
"Mark",
"Luke",
"John",
"Acts",
"Romans",
"1 Corinthians",
"2 Corinthians",
"Galatians",
"Ephesians",
"Philippians",
"Colossians",
"1 Thessalonians",
"2 Thessalonians",
"1 Timothy",
"2 Timothy",
"Titus",
"Philemon",
"Hebrews",
"James",
"1 Peter",
"2 Peter",
"1 John",
"2 John",
"3 John",
"Jude",
"Revelation",
]
def get_time():
gettime = datetime.datetime.now()
time = gettime.strftime("%H:%M")
return time
def choose_book():
rand_book = random.choice(BIBLE_BOOKS)
return rand_book
# @timeout(15)
def get_verse():
curr_time = get_time()
extract = ""
distance = lev(extract, curr_time)
while True:
book = choose_book()
time.sleep(2)
url = f"https://api.esv.org/v3/passage/text/?q={book} {curr_time}"
response = requests.get(url, headers=HEADERS)
query = response.json()["query"]
print(query)
chap_verse = re.search(r"(\d{1,3}:\d{1,3})", query)
try:
extract = chap_verse.group(0)
except AttributeError as a:
print(a)
distance = lev(extract, curr_time)
if "0" in curr_time and not curr_time.endswith("0"):
curr_time = curr_time.replace("0", "")
print(curr_time)
if distance < 1:
print(f"{extract} is equal to {curr_time}!")
break
return response
def parse_verse():
response = get_verse()
passage = response.json()["passages"]
verse = response.json()["query"]
pass_extract = re.split(r"\[\d{1,3}\]", str(passage[0]))
simplified = re.sub(r"(^\s|\s{2,}|\s\(ESV\)$)", "", pass_extract[1])
simplified2 = re.sub(r"(\\n|,[a-zA-Z])", " ", simplified)
if "(1)Footnotes" in simplified2:
new_list = simplified2.split("(1)Footnotes")[0]
print(new_list)
else:
new_list = simplified2
double_close = new_list.count('')
double_open = new_list.count('')
single_open = new_list.count("'")
single_open = new_list.count("")
single_closed = new_list.count('')
char_tuple = (double_open, double_close, single_open, single_closed)
if char_tuple == (1, 0, 0, 0):
new_list += ''
elif char_tuple == (1, 1, 1, 0):
new_list += ''
elif char_tuple == (1, 0, 1, 0):
new_list += '”’'
print(new_list)
print(verse)
if __name__ == "__main__":
parse_verse()