On tastekid.com you could find similar things like movies, book and music. They provide API which return XML or JSON response. Here are code, in Python which use this API. You could download source code from GitHub.
This program:
- will display similar things if you use it without options
- display information about movie/book/show/author if you put -i option
- display descriptions if you use -d options
- and translate them to your language with -l option.
Check -h options for more info.
#!/usr/bin/python
from urllib2 import urlopen, Request, HTTPError
from urllib import quote_plus
from sys import argv, stderr
from os.path import basename
from getopt import getopt, GetoptError
from StringIO import StringIO
import json
def gets(dict, *keys):
"function generate values from dictionary which is on the list."
for e in keys:
yield dict[e]
def partial_first(fun, *args):
"return single argument function which execute function fun with arguments."
def p(object):
return fun(object, *args)
return p
def gets_fun(*args):
"return function which return values from dictinary which is on the list."
return partial_first(gets, *args)
class ServerJsonException(Exception):
pass
class Similar(object):
def __init__(self, stuff, type=None):
query = quote_plus(stuff)
if type:
query = '%s:%s' % (type, query)
url = 'http://www.tastekid.com/ask/ws?&q=%s&format=JSON&verbose=1'
response_data = urlopen(url % query).read()
if not re.match('{.*}', response_data):
raise ServerJsonException
#fix malform json
response_data = response_data.replace('}{', '},{')
self.data = json.load(StringIO(response_data))
def infos(self):
for i in self.data['Similar']['Info']:
yield Similar.Stuff(*list(gets(i, 'Name', 'Type', 'wTeaser')))
def similar(self):
"generate list of Stuff."
results = self.data['Similar']['Results']
if len(results) == 0:
yield None
for result in results:
elems = list(gets(result, 'Name', 'Type', 'wTeaser', 'yTitle', 'yUrl'))
yield Similar.Stuff(*elems)
class Stuff(object):
def __init__(self, name, type, description, y_title=None, y_url=None):
self.name = name.encode('UTF-8')
self.type = type.encode('UTF-8')
self.description = description.encode('UTF-8')
if y_title:
self.y_title = y_title.encode('UTF-8')
if y_url:
self.y_url = y_url.encode('UTF-8')
usage = """usage:
%s -d -i -y -l
d - display descriptions
i - display only info
y - display youtube links
l - translate descriptions
lang should be one of:
af - afrikaans
sk - albánskej
ar - عربي
be - Беларускі
bg - Български
zh - 荃湾
zh - 太阳
hr - Hrvatski
cs - Český
da - Danske
et - Eesti
tl - filipiński
fi - Suomi
fr - Français
gl - galijski
el - Ελληνικά
iw - עברית
hi - हिन्दी
es - Español
nl - Nederlands
id - indonezyjski
ga - Gaeilge
is - Íslenska
ja - 日本語
yi - ייִדיש
ca - Català
ko - 한국의
lt - Lietuvos
lv - Latvijas
mk - Македонски
ms - Melayu
mt - Malti
de - Deutsch
no - Norsk
fa - فارسی
pl - polski
ru - Русский
ro - Română
sr - Српски
sk - Slovenský
sl - Slovenski
sw - Swahili
sv - Svenska
th - ภาษาไทย
tr - Türk
uk - Український
cy - walijski
hu - Magyar
vi - Việt
it - Italiano
put "band:", "movie:", "show:", "book:" or "author:" before name if you want to specify search
""" % basename(argv[0])
def main():
try:
opts, rest = getopt(argv[1:], 'dl:iy')
except GetoptError:
print usage
exit(1)
opts = dict(opts)
if opts.has_key('-h'):
print usage
exit(0)
description = opts.has_key('-d')
info = opts.has_key('-i')
youtube = opts.has_key('-y')
lang = opts.get('-l')
if len(rest) == 0:
print usage
else:
try:
stuff = Similar(' '.join(rest))
if info:
for info in stuff.infos():
print '%s (%s)' % (info.name, info.type)
print
if lang:
from xgoogle.translate import Translator
translate = Translator().translate
print translate(info.description, lang_to=lang)
else:
print info.description
else:
for stuff in stuff.similar():
print stuff.name
if youtube:
print 'Youtube:'
print '\t%s' % stuff.y_title
print '\t%s' % stuff.y_url
if description:
if lang:
from xgoogle.translate import Translator
translate = Translator().translate
print translate(stuff.description, lang_to=lang)
else:
print stuff.description
except ServerJsonException:
print >> stderr, "Error: can't read recived data from the server"
if __name__ == '__main__':
try:
main()
except KeyboardInterrupt:
#when user hit Ctrl-C
exit(1)
You need xgoogle library to it to work, you can download it from here.
You can use like this (you can change name of the script to like)
like Matrix
or
like Matrix, Ghost in the shell
If you want to check two or more movies/books/shows separate them with coma. If the same name has movie and book you can put type of things before the name
like movie:the gathering
like music:the gathering
allowed types are movie, show, book and author
if you want to download all youtube files use on Debian/Ubuntu
apt-get instll youtube-dl
or
wget http://www.nuxified.org/system/files/youtube-install.sh
sudo ./youtube-install.sh
and then run the script:
for i in `similar.py -y $1 | grep http`; do
youtube-dl $i
done