sogou_images.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. """Sogou-Images: A search engine for retrieving images from Sogou."""
  3. import json
  4. import re
  5. from urllib.parse import quote_plus
  6. # about
  7. about = {
  8. "website": "https://pic.sogou.com/",
  9. "wikidata_id": "Q7554565",
  10. "use_official_api": False,
  11. "require_api_key": False,
  12. "results": "HTML",
  13. }
  14. # engine dependent config
  15. categories = ["images"]
  16. base_url = "https://pic.sogou.com"
  17. def request(query, params):
  18. params["url"] = f"{base_url}/pics?query={quote_plus(query)}"
  19. return params
  20. def response(resp):
  21. results = []
  22. match = re.search(r'window\.__INITIAL_STATE__\s*=\s*({.*?});', resp.text, re.S)
  23. if not match:
  24. return results
  25. data = json.loads(match.group(1))
  26. if "searchList" in data and "searchList" in data["searchList"]:
  27. for item in data["searchList"]["searchList"]:
  28. results.append(
  29. {
  30. "template": "images.html",
  31. "url": item.get("url", ""),
  32. "thumbnail_src": item.get("picUrl", ""),
  33. "img_src": item.get("picUrl", ""),
  34. "content": item.get("content_major", ""),
  35. "title": item.get("title", ""),
  36. "source": item.get("ch_site_name", ""),
  37. }
  38. )
  39. return results