77class 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