beanbox-apis / app.py
johnpaulbin's picture
Update app.py
fff5a8f
raw
history blame
3.61 kB
from flask import Flask, request, jsonify
import asyncio
from hypercorn.asyncio import serve
from hypercorn.config import Config
import os
os.environ['CURL_CA_BUNDLE'] = ''
from googletranslate import translate
import json
import random
import re
app = Flask(__name__)
@app.route('/', methods=['GET'])
def home():
return "HI! Use /translate POST"
# Load the JSON data into memory
def load_json_data(file_path):
with open(file_path, 'r') as file:
data = json.load(file)
return data
# Assuming your JSON structure is a list of dictionaries
json_data = load_json_data('englishspanishpairs.json')
@app.route('/spanish')
def random_spanish_pair1():
# Select a random English-Spanish pair
random_pair = random.choice(json_data)
return jsonify(random_pair)
def is_word(s):
"""
Check if the string 's' is a word (contains only alphabetic characters).
"""
return s.isalpha()
# Lists to store English and Spanish words separately
english_words = set()
spanish_words = set()
# Populate the word lists
for pair in json_data:
if "english" in pair:
# Extract words from the English sentence and filter out numbers
english_words.update(filter(is_word, re.findall(r'\b\w+\b', pair.get("english", ""))))
if "spanish" in pair:
# Extract words from the Spanish sentence and filter out numbers
spanish_words.update(filter(is_word, re.findall(r'\b\w+\b', pair.get("spanish", ""))))
def get_distractors(target_word, all_words, num_distractors=3):
"""
Get distractor words from the same language.
"""
distractors = set()
while len(distractors) < num_distractors:
distractor = random.choice(list(all_words))
if distractor.lower() != target_word.lower():
distractors.add(distractor)
return list(distractors)
@app.route('/fillgame')
def random_spanish_pair2():
# Select a random English-Spanish pair
random_pair = random.choice(json_data)
# Choose either English or Spanish for the fill-in-the-blank game
if random.choice([True, False]):
sentence = random_pair.get('english', "")
language = 'english'
word_set = english_words
else:
sentence = random_pair.get('spanish', "")
language = 'spanish'
word_set = spanish_words
# Split the sentence into words and filter out non-words
words = filter(is_word, re.findall(r'\b\w+\b', sentence))
# Choose a random word to replace with blank
blank_word = random.choice(list(words))
sentence_with_blank = sentence.replace(blank_word, "_____")
# Get distractors from the same language
distractors = get_distractors(blank_word, word_set)
# Combine correct word with distractors and shuffle
options = [blank_word] + distractors
random.shuffle(options)
# Return the sentence with a blank, options, and the correct word
return jsonify({
'sentence': sentence_with_blank,
'options': options,
'correctWord': blank_word,
'language': language
})
@app.route('/translate', methods=['POST'])
def dotranslate():
data = request.get_json()
txt = data.get('txt')
src = data.get('src', 'en')
dest = data.get('dest', 'es')
if txt:
translation = translate(txt, dest=dest, src=src)
return jsonify({'translation': translation}), 200
else:
return jsonify({'error': 'No text provided'}), 400
if __name__ == "__main__":
config = Config()
config.bind = ["0.0.0.0:7860"] # You can specify the host and port here
asyncio.run(serve(app, config))