Files
Bible-Verse-Clock/verse-time-display.py

155 lines
3.3 KiB
Python
Raw Permalink Normal View History

import requests
from Levenshtein import distance as lev
import time
import re
import random
from timeout import timeout
import datetime
import apikey
VERSION = "en-lsv"
APIKEY = apikey.KEY
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 "Footnotes" in simplified2:
new_list = simplified2.split("(1)Footnotes")[0]
new_list = new_list.replace("(1)", " ")
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()