mirror of https://github.com/searxng/searxng.git
commit
7e83818879
|
@ -5,7 +5,8 @@
|
||||||
|
|
||||||
from lxml.html import fromstring
|
from lxml.html import fromstring
|
||||||
from json import loads
|
from json import loads
|
||||||
from searx.utils import extract_text, match_language, eval_xpath
|
from searx.utils import extract_text, match_language, eval_xpath, dict_subset
|
||||||
|
from searx.poolrequests import get
|
||||||
|
|
||||||
# about
|
# about
|
||||||
about = {
|
about = {
|
||||||
|
@ -35,6 +36,7 @@ language_aliases = {
|
||||||
|
|
||||||
# search-url
|
# search-url
|
||||||
url = 'https://html.duckduckgo.com/html'
|
url = 'https://html.duckduckgo.com/html'
|
||||||
|
url_ping = 'https://duckduckgo.com/t/sl_h'
|
||||||
time_range_dict = {'day': 'd',
|
time_range_dict = {'day': 'd',
|
||||||
'week': 'w',
|
'week': 'w',
|
||||||
'month': 'm'}
|
'month': 'm'}
|
||||||
|
@ -65,27 +67,27 @@ def request(query, params):
|
||||||
|
|
||||||
params['url'] = url
|
params['url'] = url
|
||||||
params['method'] = 'POST'
|
params['method'] = 'POST'
|
||||||
params['data']['b'] = ''
|
|
||||||
params['data']['q'] = query
|
params['data']['q'] = query
|
||||||
params['data']['df'] = ''
|
params['data']['b'] = ''
|
||||||
|
|
||||||
region_code = get_region_code(params['language'], supported_languages)
|
region_code = get_region_code(params['language'], supported_languages)
|
||||||
if region_code:
|
if region_code:
|
||||||
params['data']['kl'] = region_code
|
params['data']['kl'] = region_code
|
||||||
params['cookies']['kl'] = region_code
|
params['cookies']['kl'] = region_code
|
||||||
if params['time_range'] in time_range_dict:
|
|
||||||
params['data']['df'] = time_range_dict[params['time_range']]
|
|
||||||
|
|
||||||
|
params['data']['df'] = time_range_dict.get(params['time_range'], '')
|
||||||
return params
|
return params
|
||||||
|
|
||||||
|
|
||||||
# get response from search-request
|
# get response from search-request
|
||||||
def response(resp):
|
def response(resp):
|
||||||
|
# ping
|
||||||
|
headers_ping = dict_subset(resp.request.headers, ['User-Agent', 'Accept-Encoding', 'Accept', 'Cookie'])
|
||||||
|
get(url_ping, headers=headers_ping)
|
||||||
|
|
||||||
|
# parse the response
|
||||||
results = []
|
results = []
|
||||||
|
|
||||||
doc = fromstring(resp.text)
|
doc = fromstring(resp.text)
|
||||||
|
|
||||||
# parse results
|
|
||||||
for i, r in enumerate(eval_xpath(doc, result_xpath)):
|
for i, r in enumerate(eval_xpath(doc, result_xpath)):
|
||||||
if i >= 30:
|
if i >= 30:
|
||||||
break
|
break
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import sys
|
import sys
|
||||||
from time import time
|
from time import time
|
||||||
from itertools import cycle
|
from itertools import cycle
|
||||||
from threading import RLock, local
|
from threading import local
|
||||||
|
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
|
@ -88,10 +88,12 @@ class SessionSinglePool(requests.Session):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
# reuse the same adapters
|
# reuse the same adapters
|
||||||
with RLock():
|
self.adapters.clear()
|
||||||
self.adapters.clear()
|
|
||||||
self.mount('https://', next(https_adapters))
|
https_adapter = threadLocal.__dict__.setdefault('https_adapter', next(https_adapters))
|
||||||
self.mount('http://', next(http_adapters))
|
http_adapter = threadLocal.__dict__.setdefault('http_adapter', next(http_adapters))
|
||||||
|
self.mount('https://', https_adapter)
|
||||||
|
self.mount('http://', http_adapter)
|
||||||
|
|
||||||
def close(self):
|
def close(self):
|
||||||
"""Call super, but clear adapters since there are managed globaly"""
|
"""Call super, but clear adapters since there are managed globaly"""
|
||||||
|
|
Loading…
Reference in New Issue