@@ -1,43 +1,58 @@
3+# @website https://vimeo.com/
4+# @provide-api yes (http://developer.vimeo.com/api), they have a maximum count of queries/hour
6+# @using-api no (TODO, rewrite to api)
7+# @results HTML (using search portal)
8+# @stable no (HTML can change)
9+# @parse url, title, publishedDate, thumbnail
11+# @todo rewrite to api
12+# @todo set content-parameter with correct data
1from urllib import urlencode
14from urllib import urlencode
2from HTMLParser import HTMLParser
15from HTMLParser import HTMLParser
3from lxml import html
16from lxml import html
4from searx.engines.xpath import extract_text
17from searx.engines.xpath import extract_text
5from dateutil import parser
18from dateutil import parser
7−base_url = 'http://vimeo.com'
20+# engine dependent config
8−search_url = base_url + '/search?{query}'
21+categories = ['videos']
9−url_xpath = None
22+paging = True
13−content_tpl = '<a href="{0}"> <img src="{2}"/> </a>'
14−publishedDate_xpath = './/p[@class="meta"]//attribute::datetime'
16−# the cookie set by vimeo contains all the following values,
24+# search-url
17−# but only __utma seems to be requiered
25+base_url = 'https://vimeo.com'
18−cookie = {
26+search_url = base_url + '/search/page:{pageno}?{query}'
19− #'vuid':'918282893.1027205400'
27+
20− # 'ab_bs':'%7B%223%22%3A279%7D'
28+# specific xpath variables
21− '__utma': '00000000.000#0000000.0000000000.0000000000.0000000000.0'
29+url_xpath = './a/@href'
22− # '__utmb':'18302654.1.10.1388942090'
30+content_xpath = './a/img/@src'
23− #, '__utmc':'18302654'
31+title_xpath = './a/div[@class="data"]/p[@class="title"]/text()'
24− #, '__utmz':'18#302654.1388942090.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)' # noqa
32+results_xpath = '//div[@id="browse_content"]/ol/li'
25− #, '__utml':'search'
33+publishedDate_xpath = './/p[@class="meta"]//attribute::datetime'
29def request(query, params):
37def request(query, params):
38+ params['url'] = search_url.format(pageno=params['pageno'] ,
30− params['url'] = search_url.format(query=urlencode({'q': query}))
39+ query=urlencode({'q': query}))
31− params['cookies'] = cookie
40+
42+ params['cookies']['__utma'] = '00000000.000#0000000.0000000000.0000000000.0000000000.0'
32 return params
44 return params
47+# get response from search-request
35def response(resp):
48def response(resp):
36 results = []
49 results = []
37 dom = html.fromstring(resp.text)
51 dom = html.fromstring(resp.text)
39 p = HTMLParser()
53 p = HTMLParser()
41 for result in dom.xpath(results_xpath):
56 for result in dom.xpath(results_xpath):
42 url = base_url + result.xpath(url_xpath)[0]
57 url = base_url + result.xpath(url_xpath)[0]
43 title = p.unescape(extract_text(result.xpath(title_xpath)))
58 title = p.unescape(extract_text(result.xpath(title_xpath)))
@@ -45,10 +60,13 @@ def response(resp):
45 publishedDate = parser.parse(extract_text(
60 publishedDate = parser.parse(extract_text(
46 result.xpath(publishedDate_xpath)[0]))
61 result.xpath(publishedDate_xpath)[0]))
48 results.append({'url': url,
64 results.append({'url': url,
49 'title': title,
65 'title': title,
50− 'content': content_tpl.format(url, title, thumbnail),
66+ 'content': '',
51 'template': 'videos.html',
67 'template': 'videos.html',
52 'publishedDate': publishedDate,
68 'publishedDate': publishedDate,
53 'thumbnail': thumbnail})
69 'thumbnail': thumbnail})
54 return results
72 return results