update_firefox_version.py 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. #!/usr/bin/env python
  2. # SPDX-License-Identifier: AGPL-3.0-or-later
  3. import json
  4. import requests
  5. import re
  6. from os.path import dirname, join
  7. from urllib.parse import urlparse, urljoin
  8. from distutils.version import LooseVersion, StrictVersion
  9. from lxml import html
  10. from searx import searx_dir
  11. URL = 'https://ftp.mozilla.org/pub/firefox/releases/'
  12. RELEASE_PATH = '/pub/firefox/releases/'
  13. NORMAL_REGEX = re.compile('^[0-9]+\.[0-9](\.[0-9])?$')
  14. # BETA_REGEX = re.compile('.*[0-9]b([0-9\-a-z]+)$')
  15. # ESR_REGEX = re.compile('^[0-9]+\.[0-9](\.[0-9])?esr$')
  16. #
  17. useragents = {
  18. # fmt: off
  19. "versions": (),
  20. "os": ('Windows NT 10.0; Win64; x64',
  21. 'X11; Linux x86_64'),
  22. "ua": "Mozilla/5.0 ({os}; rv:{version}) Gecko/20100101 Firefox/{version}",
  23. # fmt: on
  24. }
  25. def fetch_firefox_versions():
  26. resp = requests.get(URL, timeout=2.0)
  27. if resp.status_code != 200:
  28. raise Exception("Error fetching firefox versions, HTTP code " + resp.status_code)
  29. else:
  30. dom = html.fromstring(resp.text)
  31. versions = []
  32. for link in dom.xpath('//a/@href'):
  33. url = urlparse(urljoin(URL, link))
  34. path = url.path
  35. if path.startswith(RELEASE_PATH):
  36. version = path[len(RELEASE_PATH):-1]
  37. if NORMAL_REGEX.match(version):
  38. versions.append(LooseVersion(version))
  39. list.sort(versions, reverse=True)
  40. return versions
  41. def fetch_firefox_last_versions():
  42. versions = fetch_firefox_versions()
  43. result = []
  44. major_last = versions[0].version[0]
  45. major_list = (major_last, major_last - 1)
  46. for version in versions:
  47. major_current = version.version[0]
  48. if major_current in major_list:
  49. result.append(version.vstring)
  50. return result
  51. def get_useragents_filename():
  52. return join(join(searx_dir, "data"), "useragents.json")
  53. useragents["versions"] = fetch_firefox_last_versions()
  54. with open(get_useragents_filename(), "w") as f:
  55. json.dump(useragents, f, indent=4, ensure_ascii=False)