83def response(resp):
84 results = []
85 text = resp.text
86
87 if is_alibaba_captcha(text):
88 raise SearxEngineCaptchaException(
89 suspended_time=900, message="Alibaba CAPTCHA detected. Please try again later."
90 )
91
92 if quark_category == 'images':
93 data = json.loads(text)
94 for item in data.get('data', {}).get('hit', {}).get('imgInfo', {}).get('item', []):
95 try:
96 published_date = datetime.fromtimestamp(int(item.get("publish_time")))
97 except (ValueError, TypeError):
98 published_date = None
99
100 results.append(
101 {
102 "template": "images.html",
103 "url": item.get("imgUrl"),
104 "thumbnail_src": item.get("img"),
105 "img_src": item.get("bigPicUrl"),
106 "title": item.get("title"),
107 "source": item.get("site"),
108 "resolution": f"{item['width']} x {item['height']}",
109 "publishedDate": published_date,
110 }
111 )
112
113 if quark_category == 'general':
114
115 source_category_parsers = {
116 'addition': parse_addition,
117 'ai_page': parse_ai_page,
118 'baike_sc': parse_baike_sc,
119 'finance_shuidi': parse_finance_shuidi,
120 'kk_yidian_all': parse_kk_yidian_all,
121 'life_show_general_image': parse_life_show_general_image,
122 'med_struct': parse_med_struct,
123 'music_new_song': parse_music_new_song,
124 'nature_result': parse_nature_result,
125 'news_uchq': parse_news_uchq,
126 'ss_note': parse_ss_note,
127
128 'ss_doc': parse_ss_doc,
129 'ss_kv': parse_ss_doc,
130 'ss_pic': parse_ss_doc,
131 'ss_text': parse_ss_doc,
132 'ss_video': parse_ss_doc,
133 'baike': parse_ss_doc,
134 'structure_web_novel': parse_ss_doc,
135 'travel_dest_overview': parse_travel_dest_overview,
136 'travel_ranking_list': parse_travel_ranking_list,
137 }
138
139 pattern = r'<script\s+type="application/json"\s+id="s-data-[^"]+"\s+data-used-by="hydrate">(.*?)</script>'
140 matches = re.findall(pattern, text, re.DOTALL)
141
142 for match in matches:
143 data = json.loads(match)
144 initial_data = data.get('data', {}).get('initialData', {})
145 extra_data = data.get('extraData', {})
146
147 source_category = extra_data.get('sc')
148
149 parsers = source_category_parsers.get(source_category)
150 if parsers:
151 parsed_results = parsers(initial_data)
152 if isinstance(parsed_results, list):
153
154 results.extend(parsed_results)
155 else:
156
157 results.append(parsed_results)
158
159 return results
160
161