Skip to content

Commit f928efd

Browse files
authored
Add files via upload
1 parent 454e89f commit f928efd

File tree

1 file changed

+54
-54
lines changed

1 file changed

+54
-54
lines changed

jokeapi/main.py

Lines changed: 54 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@
77
class Jokes:
88
def __init__(self):
99
self.http = urllib3.PoolManager()
10+
self.info = self.http.request('GET', "https://sv443.net/jokeapi/v2/info")
11+
self.info = data = json.loads(self.info.data.decode('utf-8'))["jokes"]
12+
print(self.info)
1013
print("Sv443's JokeAPI")
1114

1215
def build_request(
@@ -17,42 +20,40 @@ def build_request(
1720
type=None,
1821
search_string=None,
1922
id_range=None,
23+
amount=1,
24+
lang="en"
2025
):
2126
r = "https://sv443.net/jokeapi/v2/joke/"
2227

23-
if len(category) > 0:
28+
if len(category):
2429
for c in category:
25-
if not c.lower() in ["programming", "miscellaneous", "dark"]:
30+
if not c.lower() in self.info["categories"]:
2631
raise ValueError(
27-
'''Invalid category selected. Available categories are:
32+
f'''Invalid category selected.
33+
You selected {c}.
34+
Available categories are:
2835
"programming"
2936
"miscellaneous"
30-
"dark".
37+
"dark"
38+
"pun".
3139
Leave blank for any.'''
3240
)
33-
return
41+
3442
cats = ",".join(category)
3543
else:
3644
cats = "Any"
3745

3846
if len(blacklist) > 0:
3947
for b in blacklist:
40-
if b not in [
41-
"nsfw",
42-
"religious",
43-
"political",
44-
"racist",
45-
"sexist"
46-
]:
48+
if b not in self.info["flags"]:
4749
raise ValueError(
48-
'''\n\n
49-
You have blacklisted flags which are not available or you have not put the flags in an array.
50+
f'''
51+
52+
53+
You have blacklisted flags which are not available or you have not put the flags in a list.
5054
Available flags are:
51-
"racist"
52-
"religious"
53-
"political"
54-
"sexist"
55-
"nsfw"
55+
{"""
56+
""".join(self.info["flags"])}
5657
'''
5758
)
5859
return
@@ -81,13 +82,7 @@ def build_request(
8182
else:
8283
search_string = urllib.parse.quote(search_string)
8384
if id_range:
84-
85-
response = self.http.request(
86-
'GET',
87-
"https://sv443.net/jokeapi/v2/info"
88-
)
89-
dict = json.loads(response.data)
90-
range_limit = dict["jokes"]["totalCount"]
85+
range_limit = self.info["totalCount"]
9186

9287
if len(id_range) > 2:
9388
raise ValueError("id_range must be no longer than 2 items.")
@@ -102,45 +97,49 @@ def build_request(
10297

10398
r += cats
10499

105-
prev_flags = None
100+
r += f"?format={response_format}"
106101

107102
if blacklistFlags:
108-
r += f"?blacklistFlags={blacklistFlags}"
109-
prev_flags = True
110-
if prev_flags:
111-
r += f"&format={response_format}"
112-
else:
113-
r += f"?format={response_format}"
114-
prev_flags = True
115-
if prev_flags:
116-
r += f"&type={type}"
117-
else:
118-
r += f"?type={type}"
119-
prev_flags = True
103+
r += f"&blacklistFlags={blacklistFlags}"
104+
105+
106+
r += f"&type={type}"
107+
120108
if search_string:
121-
if prev_flags:
122-
r += f"&contains={search_string}"
123-
prev_flags = True
124-
else:
125-
r += f"?contains={search_string}"
109+
r += f"&contains={search_string}"
126110
if id_range:
127-
if prev_flags:
128-
r += f"&idRange={id_range[0]}-{id_range[1]}"
129-
else:
130-
r += f"?idRange={id_range[0]}-{id_range[1]}"
111+
r += f"i&dRange={id_range[0]}-{id_range[1]}"
112+
if amount > 10:
113+
raise ValueError(
114+
f"amount parameter must be no greater than 10. you passed {amount}."
115+
)
116+
r += f"&amount={amount}"
117+
118+
r += f"&lang={lang}"
131119

132120
return r
133121

134-
def send_request(self, request, response_format, return_headers, auth_token, user_agent):
122+
def send_request(self,
123+
request,
124+
response_format,
125+
return_headers,
126+
auth_token,
127+
user_agent
128+
):
135129
returns = []
136130

137131
if auth_token:
138-
r = self.http.request('GET', request, headers={'Authorization': str(
139-
auth_token), 'user-agent': str(user_agent)})
132+
r = self.http.request('GET',
133+
request,
134+
headers={'Authorization': str(auth_token),
135+
'user-agent': str(user_agent),
136+
#'accept-encoding': 'gzip'
137+
}
138+
)
140139
else:
141140
r = self.http.request('GET', request, headers={'user-agent': str(user_agent)})
142141

143-
data = r.data
142+
data = r.data.decode('utf-8')
144143

145144
if response_format == "json":
146145
try:
@@ -149,7 +148,6 @@ def send_request(self, request, response_format, return_headers, auth_token, use
149148
print(data)
150149
raise
151150
else:
152-
data = str(data)[2:-1].replace(r'\n', '\n').replace('\\', '')
153151
if len(' '.join(re.split("error", data.lower().replace("\n", "NEWLINECHAR"))[0:][1:]).replace(
154152
'<', '').replace('/', '').replace(' ', '').replace(':', '').replace('>', '').replace('NEWLINECHAR', '\n')) == 4:
155153
return [Exception(f"API returned an error. Full response: \n\n {data}")]
@@ -174,12 +172,14 @@ def get_joke(
174172
type=None,
175173
search_string=None,
176174
id_range=None,
175+
amount=1,
176+
lang=None,
177177
auth_token=None,
178178
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0",
179179
return_headers=False
180180
):
181181
r = self.build_request(
182-
category, blacklist, response_format, type, search_string, id_range
182+
category, blacklist, response_format, type, search_string, id_range, amount, lang
183183
)
184184

185185
response = self.send_request(r, response_format, return_headers, auth_token, user_agent)

0 commit comments

Comments
 (0)