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'