From d026a97e42dce14bb187ea79682b9a303cd91e9e Mon Sep 17 00:00:00 2001 From: Kirill Isakov Date: Fri, 25 Mar 2016 19:30:32 +0600 Subject: Add Reddit search engine --- searx/engines/reddit.py | 74 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 searx/engines/reddit.py (limited to 'searx/engines/reddit.py') diff --git a/searx/engines/reddit.py b/searx/engines/reddit.py new file mode 100644 index 000000000..d2b185b40 --- /dev/null +++ b/searx/engines/reddit.py @@ -0,0 +1,74 @@ +""" + Reddit + + @website https://www.reddit.com/ + @provide-api yes (https://www.reddit.com/dev/api) + + @using-api yes + @results JSON + @stable yes + @parse url, title, content, thumbnail, publishedDate +""" + +import json +from cgi import escape +from urllib import urlencode +from urlparse import urlparse +from datetime import datetime + +# engine dependent config +categories = ['general', 'images', 'news', 'social media'] +page_size = 25 + +# search-url +search_url = 'https://www.reddit.com/search.json?{query}' + + +# do search-request +def request(query, params): + query = urlencode({'q': query, + 'limit': page_size}) + params['url'] = search_url.format(query=query) + + return params + + +# get response from search-request +def response(resp): + img_results = [] + text_results = [] + + search_results = json.loads(resp.text) + + # return empty array if there are no results + if 'data' not in search_results: + return [] + + posts = search_results.get('data', {}).get('children', []) + + # process results + for post in posts: + data = post['data'] + + # extract post information + params = { + 'url': data['url'], + 'title': data['title'] + } + + # if thumbnail field contains a valid URL, we need to change template + thumbnail = data['thumbnail'] + url_info = urlparse(thumbnail) + # netloc & path + if url_info[1] != '' and url_info[2] != '': + params['thumbnail_src'] = thumbnail + params['template'] = 'images.html' + img_results.append(params) + else: + created = datetime.fromtimestamp(data['created_utc']) + params['content'] = escape(data['selftext']) + params['publishedDate'] = created + text_results.append(params) + + # show images first and text results second + return img_results + text_results -- cgit v1.2.3 From a8832574fa113e0673dcf9a51ece058b0a4cdcb5 Mon Sep 17 00:00:00 2001 From: Kirill Isakov Date: Sun, 27 Mar 2016 05:09:04 +0600 Subject: Shorten content field for very long Reddit search results --- searx/engines/reddit.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'searx/engines/reddit.py') diff --git a/searx/engines/reddit.py b/searx/engines/reddit.py index d2b185b40..9729898e5 100644 --- a/searx/engines/reddit.py +++ b/searx/engines/reddit.py @@ -66,7 +66,10 @@ def response(resp): img_results.append(params) else: created = datetime.fromtimestamp(data['created_utc']) - params['content'] = escape(data['selftext']) + content = escape(data['selftext']) + if len(content) > 500: + content = content[:500] + '...' + params['content'] = content params['publishedDate'] = created text_results.append(params) -- cgit v1.2.3 From d0001f10e6c604f3094d728bed703a60baa9ae17 Mon Sep 17 00:00:00 2001 From: Kirill Isakov Date: Wed, 30 Mar 2016 17:30:46 +0600 Subject: Add searx user agent to Reddit engine request to comply with API usage terms --- searx/engines/reddit.py | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'searx/engines/reddit.py') diff --git a/searx/engines/reddit.py b/searx/engines/reddit.py index 9729898e5..08c4fde4b 100644 --- a/searx/engines/reddit.py +++ b/searx/engines/reddit.py @@ -15,6 +15,7 @@ from cgi import escape from urllib import urlencode from urlparse import urlparse from datetime import datetime +from searx.utils import searx_useragent # engine dependent config categories = ['general', 'images', 'news', 'social media'] @@ -30,6 +31,9 @@ def request(query, params): 'limit': page_size}) params['url'] = search_url.format(query=query) + # using searx User-Agent + params['headers']['User-Agent'] = searx_useragent() + return params -- cgit v1.2.3 From d54e82dfb93bf6e0beca31601382c0a23818ec82 Mon Sep 17 00:00:00 2001 From: Kirill Isakov Date: Wed, 13 Apr 2016 22:06:00 +0600 Subject: Revert to using random UA in Reddit search engine --- searx/engines/reddit.py | 4 ---- 1 file changed, 4 deletions(-) (limited to 'searx/engines/reddit.py') diff --git a/searx/engines/reddit.py b/searx/engines/reddit.py index 08c4fde4b..9729898e5 100644 --- a/searx/engines/reddit.py +++ b/searx/engines/reddit.py @@ -15,7 +15,6 @@ from cgi import escape from urllib import urlencode from urlparse import urlparse from datetime import datetime -from searx.utils import searx_useragent # engine dependent config categories = ['general', 'images', 'news', 'social media'] @@ -31,9 +30,6 @@ def request(query, params): 'limit': page_size}) params['url'] = search_url.format(query=query) - # using searx User-Agent - params['headers']['User-Agent'] = searx_useragent() - return params -- cgit v1.2.3