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

154 lines
3.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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()