-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.py
103 lines (86 loc) · 3.19 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
from flask import Flask, request, jsonify, render_template
from flask_cors import CORS
import csv
import random
import os
app = Flask(__name__)
CORS(app)
@app.route("/", methods=['GET'])
def index():
return jsonify({
"body": "Welcome to Anime Quotes API!",
"How to use": {
"/random": "Get a random anime quote",
"/search?anime=<name>": "Search for quotes by anime name",
"/search?character=<name>": "Search for quotes by character name"
},
"example": {
"random_quote": "/random",
"search_anime": "/search?anime=Naruto",
"search_character": "/search?character=Itachi"
},
"Author": "Himanshu Jain",
"version": "1.0",
"repository": "https://github.com/himanshujain112/Anime-Quotes-API"
})
def generateRandom():
try:
with open('data/AnimeQuotes.csv', mode='r', encoding="UTF-8") as file:
reader = list(csv.DictReader(file))
if reader:
return random.choice(reader)
else:
return {"error": "No quotes available."}
except Exception as e:
return {"error": f"Error reading the file: {str(e)}"}
def generateQuote(searchBy=None, query=None):
results = []
try:
with open('data/anime-quotes.csv', mode='r', encoding="UTF-8") as file:
reader = list(csv.DictReader(file))
# Search by anime
if searchBy == "anime" and query:
for row in reader:
if query.lower() in row[searchBy].lower():
results.append(row)
if not results:
return {"error": "No quotes found for the given anime."}
# Search by character
elif searchBy == "character" and query:
for row in reader:
if query.lower() in row[searchBy].lower():
results.append(row)
if not results:
return {"error": "No quotes found for the given character."}
return results
except Exception as e:
return {"error": f"Error opening file: {str(e)}"}
@app.route('/random', methods=['GET'])
def generate():
quote = generateRandom()
if "error" in quote:
return jsonify(quote), 400
return jsonify(quote)
@app.route("/search", methods=['GET'])
def generateBySearch():
animeQuery = request.args.get("anime")
characterQuery = request.args.get('character')
# Ensure only one query parameter is specified
if animeQuery and characterQuery:
return jsonify({"error": "Please specify only one search parameter: 'anime' or 'character'."}), 400
if animeQuery:
# Search by anime name
quote = generateQuote('anime', animeQuery)
elif characterQuery:
# Search by character name
quote = generateQuote('character', characterQuery)
else:
return jsonify({"error": "Either 'anime' or 'character' parameter is required!"}), 400
if "error" in quote:
return jsonify(quote), 404
return jsonify(quote)
@app.route("/example", methods=['GET'])
def example():
return render_template("example/example.html")
if __name__ == "__main__":
app.run(debug=True, port=os.environ.get("PORT", 5000))