from xmlrpclib import ServerProxy, Error
import argparse
import urllib2
import struct
import os
opensub_domain = "http://api.opensubtitles.org/xml-rpc"
default_useragent = "OS Test User Agent"
server = ServerProxy(opensub_domain)
def get_hash(name):
try:
longlongformat = 'q' # long long
bytesize = struct.calcsize(longlongformat)
f = open(name, "rb")
filesize = os.path.getsize(name)
hash = filesize
if filesize < 65536 * 2:
return "SizeError"
for x in range(65536 / bytesize):
buffer = f.read(bytesize)
(l_value,) = struct.unpack(longlongformat, buffer)
hash += l_value
hash = hash & 0xFFFFFFFFFFFFFFFF # to remain as 64bit number
f.seek(max(0, filesize - 65536), 0)
for x in range(65536 / bytesize):
buffer = f.read(bytesize)
(l_value,) = struct.unpack(longlongformat, buffer)
hash += l_value
hash = hash & 0xFFFFFFFFFFFFFFFF
f.close()
returnedhash = "%016x" % hash
return returnedhash
except(IOError):
return None
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument("file", type=str,
help="input video file")
args = parser.parse_args()
#args.file
current_hash = get_hash(args.file)
current_size = os.path.getsize(args.file)
session = server.LogIn("", "", "en", default_useragent)
token = session["token"]
searchlist = []
searchlist.append({'moviehash': current_hash, 'moviebytesize': str(current_size)})
moviesList = server.SearchSubtitles(token, searchlist)
if moviesList['data']:
data = moviesList['data']
print data[0]['MovieName']
else:
print 'no info'