bt4g.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. # SPDX-License-Identifier: AGPL-3.0-or-later
  2. # lint: pylint
  3. """
  4. BT4G (Videos, Music, Files)
  5. """
  6. import re
  7. from datetime import datetime
  8. from urllib.parse import quote
  9. from lxml import etree
  10. from searx.utils import get_torrent_size
  11. # about
  12. about = {
  13. "website": 'https://bt4gprx.com',
  14. "use_official_api": False,
  15. "require_api_key": False,
  16. "results": 'XML',
  17. }
  18. # engine dependent config
  19. categories = ['files']
  20. paging = True
  21. time_range_support = True
  22. # search-url
  23. url = 'https://bt4gprx.com'
  24. search_url = url + '/search?q={search_term}&orderby={order_by}&category={category}&p={pageno}&page=rss'
  25. bt4g_order_by = 'relevance' # relevance, size, seeders, time
  26. bt4g_category = 'all' # all, audio, movie, doc, app, other
  27. def request(query, params):
  28. order_by = bt4g_order_by
  29. if params['time_range']:
  30. order_by = 'time'
  31. params['url'] = search_url.format(
  32. search_term=quote(query),
  33. order_by=order_by,
  34. category=bt4g_category,
  35. pageno=params['pageno'],
  36. )
  37. return params
  38. def response(resp):
  39. results = []
  40. search_results = etree.XML(resp.content)
  41. # return empty array if nothing is found
  42. if len(search_results) == 0:
  43. return []
  44. for entry in search_results.xpath('./channel/item'):
  45. title = entry.find("title").text
  46. link = entry.find("guid").text
  47. fullDescription = entry.find("description").text.split('<br>')
  48. filesize = fullDescription[1]
  49. filesizeParsed = re.split(r"([A-Z]+)", filesize)
  50. magnetlink = entry.find("link").text
  51. pubDate = entry.find("pubDate").text
  52. results.append(
  53. {
  54. 'url': link,
  55. 'title': title,
  56. 'magnetlink': magnetlink,
  57. 'seed': 'N/A',
  58. 'leech': 'N/A',
  59. 'filesize': get_torrent_size(filesizeParsed[0], filesizeParsed[1]),
  60. 'publishedDate': datetime.strptime(pubDate, '%a,%d %b %Y %H:%M:%S %z'),
  61. 'template': 'torrent.html',
  62. }
  63. )
  64. return results