summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpw3t <romain@berthor.fr>2013-12-29 16:21:20 +0100
committerpw3t <romain@berthor.fr>2013-12-29 16:23:09 +0100
commitc2092b9fcea3aa80d144a46f8ac9a5f15afce25f (patch)
treeba07b3f32a6800bbf4aeae3ea39834e66b98ca42
parent141b04c6dde9df0e6b7f2e2b30ec8131429c8932 (diff)
[enh] 1st version of filecrop engine, to discover how searx works
-rw-r--r--.gitignore3
-rw-r--r--searx/engines/filecrop.py74
2 files changed, 77 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index 4cc20423c..76ae1ca2c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,5 @@
env
engines.cfg
+
+*.pyc
+*/*.pyc \ No newline at end of file
diff --git a/searx/engines/filecrop.py b/searx/engines/filecrop.py
new file mode 100644
index 000000000..df0ce417b
--- /dev/null
+++ b/searx/engines/filecrop.py
@@ -0,0 +1,74 @@
+from json import loads
+from urllib import urlencode
+from searx.utils import html_to_text
+from HTMLParser import HTMLParser
+
+url = 'http://www.filecrop.com/'
+search_url = url + '/search.php?w={query}&size_i=0&size_f=100000000&engine_r=1&engine_d=1&engine_e=1&engine_4=1&engine_m=1'
+
+class FilecropResultParser(HTMLParser):
+ def __init__(self):
+ HTMLParser.__init__(self)
+ self.__start_processing = False
+
+ self.results = []
+ self.result = {}
+
+ self.tr_counter = 0
+ self.data_counter = 0
+
+ def handle_starttag(self, tag, attrs):
+
+ if tag == 'tr':
+ if ('bgcolor', '#edeff5') in attrs or ('bgcolor', '#ffffff') in attrs:
+ self.__start_processing = True
+
+ if not self.__start_processing:
+ return
+
+ if tag == 'label':
+ self.result['title'] = [attr[1] for attr in attrs if attr[0] == 'title'][0]
+ elif tag == 'a' and ('rel', 'nofollow') in attrs and ('class', 'sourcelink') in attrs:
+ if 'content' in self.result:
+ self.result['content'] += [attr[1] for attr in attrs if attr[0] == 'title'][0]
+ else:
+ self.result['content'] = [attr[1] for attr in attrs if attr[0] == 'title'][0]
+ self.result['content'] += ' '
+ elif tag == 'a':
+ self.result['url'] = url + [attr[1] for attr in attrs if attr[0] == 'href'][0]
+
+ def handle_endtag(self, tag):
+ if self.__start_processing is False:
+ return
+
+ if tag == 'tr':
+ self.tr_counter += 1
+
+ if self.tr_counter == 2:
+ self.__start_processing = False
+ self.tr_counter = 0
+ self.data_counter = 0
+ self.results.append(self.result)
+ self.result = {}
+
+ def handle_data(self, data):
+ if not self.__start_processing:
+ return
+ print data
+
+ if 'content' in self.result:
+ self.result['content'] += data + ' '
+ else:
+ self.result['content'] = data + ' '
+
+ self.data_counter += 1
+
+def request(query, params):
+ params['url'] = search_url.format(query=urlencode({'q': query}))
+ return params
+
+def response(resp):
+ parser = FilecropResultParser()
+ parser.feed(resp.text)
+
+ return parser.results