summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCqoicebordel <Cqoicebordel@users.noreply.github.com>2014-12-15 03:21:25 +0100
committerCqoicebordel <Cqoicebordel@users.noreply.github.com>2014-12-15 03:21:25 +0100
commitcfdcbdd9b536ce859d6f4c1690d4b788c1d89463 (patch)
tree78cce62f6e8caa0df7ae86dcddd5497dce11a50f
parentba51d784d16a1a9f05b862ce8ed333eac960cf58 (diff)
Rework Flickr Engine
Everything was redone to use the API. It needs an API key, but it's worth it. Everything works. Title, Image, Content, URL The API allow lots of things. Thumbnails and date will be easy to add when it will be implemented in Searx. Fix asciimoo/searx#126
-rw-r--r--searx/engines/flickr.py81
-rw-r--r--searx/settings.yml11
2 files changed, 61 insertions, 31 deletions
diff --git a/searx/engines/flickr.py b/searx/engines/flickr.py
index 4ec2841dd..8b60aed1d 100644
--- a/searx/engines/flickr.py
+++ b/searx/engines/flickr.py
@@ -1,54 +1,83 @@
#!/usr/bin/env python
+## Flickr (Images)
+#
+# @website https://www.flickr.com
+# @provide-api yes (https://secure.flickr.com/services/api/flickr.photos.search.html)
+#
+# @using-api yes
+# @results JSON
+# @stable yes
+# @parse url, title, thumbnail, img_src
+#More info on api-key : https://www.flickr.com/services/apps/create/
+
from urllib import urlencode
-#from json import loads
+from json import loads
from urlparse import urljoin
from lxml import html
from time import time
categories = ['images']
-url = 'https://secure.flickr.com/'
-search_url = url+'search/?{query}&page={page}'
-results_xpath = '//div[@class="view display-item-tile"]/figure/div'
+nb_per_page = 15
+paging = True
+api_key= None
+
+
+url = 'https://api.flickr.com/services/rest/?method=flickr.photos.search&api_key={api_key}&{text}&sort=relevance&extras=description%2C+owner_name%2C+url_o%2C+url_z&per_page={nb_per_page}&format=json&nojsoncallback=1&page={page}'
+photo_url = 'https://www.flickr.com/photos/{userid}/{photoid}'
paging = True
+def build_flickr_url(user_id, photo_id):
+ return photo_url.format(userid=user_id,photoid=photo_id)
+
def request(query, params):
- params['url'] = search_url.format(query=urlencode({'text': query}),
- page=params['pageno'])
- time_string = str(int(time())-3)
- params['cookies']['BX'] = '3oqjr6d9nmpgl&b=3&s=dh'
- params['cookies']['xb'] = '421409'
- params['cookies']['localization'] = 'en-us'
- params['cookies']['flrbp'] = time_string +\
- '-3a8cdb85a427a33efda421fbda347b2eaf765a54'
- params['cookies']['flrbs'] = time_string +\
- '-ed142ae8765ee62c9ec92a9513665e0ee1ba6776'
- params['cookies']['flrb'] = '9'
+ params['url'] = url.format(text=urlencode({'text': query}),
+ api_key=api_key,
+ nb_per_page=nb_per_page,
+ page=params['pageno'])
return params
def response(resp):
results = []
- dom = html.fromstring(resp.text)
- for result in dom.xpath(results_xpath):
- img = result.xpath('.//img')
+
+ search_results = loads(resp.text)
- if not img:
- continue
+ # return empty array if there are no results
+ if not 'photos' in search_results:
+ return []
+
+ if not 'photo' in search_results['photos']:
+ return []
- img = img[0]
- img_src = 'https:'+img.attrib.get('src')
+ photos = search_results['photos']['photo']
- if not img_src:
+ # parse results
+ for photo in photos:
+ if 'url_o' in photo:
+ img_src = photo['url_o']
+ elif 'url_z' in photo:
+ img_src = photo['url_z']
+ else:
continue
- href = urljoin(url, result.xpath('.//a')[0].attrib.get('href'))
- title = img.attrib.get('alt', '')
- results.append({'url': href,
+ url = build_flickr_url(photo['owner'], photo['id'])
+
+ title = photo['title']
+
+ content = '<span class="photo-author">'+ photo['ownername'] +'</span><br />'
+
+ content = content + ' <span class="description">' + photo['description']['_content'] + '</span>'
+
+ # append result
+ results.append({'url': url,
'title': title,
'img_src': img_src,
+ 'content': content,
'template': 'images.html'})
+
+ # return results
return results
diff --git a/searx/settings.yml b/searx/settings.yml
index 5e9f11202..b7359b919 100644
--- a/searx/settings.yml
+++ b/searx/settings.yml
@@ -65,11 +65,12 @@ engines:
# categories : files
# shortcut : fc
- - name : flickr
- engine : flickr
- categories : images
- shortcut : fl
- timeout: 3.0
+# api-key required: https://www.flickr.com/services/apps/create/
+# - name : flickr
+# engine : flickr
+# categories : images
+# shortcut : fl
+# api_key: 'apikey' # required!
- name : general-file
engine : generalfile