예제 #1
0
def DownloadSubtitles(key, type):
    data = []
    oc = ObjectContainer(no_cache=True, title2='Subtitles')
    video = XML.ElementFromURL(HOST + key).xpath('//Video')[0]
    if video:
        subs = OpenSubtitles(SETTINGS)
        token = subs.login(SETTINGS['username'], SETTINGS['password'])
        full_path = video.xpath('./Media/Part')[0].get('file')
        root, filename = os.path.split(full_path)
        filename = filename.split('.')[0]

        if type == 'show':
            title = video.get('grandparentTitle')
            season = video.get('parentIndex')
            episode = video.get('index')
            if title and season and episode:
                data = subs.search_subtitles([{'sublanguageid': SETTINGS['language'], 'query': title, 'season': season, 'episode': episode}])
        else:
            title = video.get('title')
            if title:
                data = subs.search_subtitles([{'sublanguageid': SETTINGS['language'], 'query': title}])

        subs.logout()
        for item in data:
            oc.add(DirectoryObject(key = Callback(WriteSubtitle, url=item['SubDownloadLink'], root=root, filename=filename), title = item['MovieReleaseName'] + ' (' + item['SubDownloadsCnt'] + ' downloads)'))
    return oc
예제 #2
0
def get_sentence(word, imdb_id):
    """
    Получить предложение для слова
    Args:
        word (:obj:`str`): слово
        imdb_id (:obj:`int`): id фильма на сайте *imdb.com*
    Returns:
        sentence (:obj:`str`): предложение для слова
    """
    OP = OpenSubtitles()
    logger.info("Getting sentence, OpenSubtitles token %s" % OP.login())
    postgre = DataBase()
    sentence = postgre.GetSentence(word, imdb_id)
    if sentence:
        return sentence
    subtitle_id = postgre.GetSubtitleID(imdb_id)
    logger.info("subtitle id - %s" % subtitle_id)
    FileData = (OP.download_subtitles([subtitle_id]))
    sentence = search_sentence(FileData['data'][0]['data'], word)
    OP.logout()
    if sentence:
        postgre.AddSentence(word, imdb_id, sentence)
        return sentence
    else:
        return None
예제 #3
0
def SearchSubtitles(subtitles, auto=False):
    try:
        sortedList = []
        update = False
        subs = OpenSubtitles(SETTINGS)
        token = subs.login(SETTINGS['username'], SETTINGS['password'])
        for item in subtitles:
            data = cleanedList = sortedList = []

            if item['type'] == 'episode':
                data = subs.search_subtitles([{
                    'sublanguageid':
                    SETTINGS['language'],
                    'imdbid':
                    item['id'],
                    'season':
                    item['season'],
                    'episode':
                    item['episode']
                }])
            else:
                data = subs.search_subtitles([{
                    'sublanguageid':
                    SETTINGS['language'],
                    'imdbid':
                    item['id']
                }])

            if data != False:
                for video in data:
                    if video['SubFormat'] == 'srt':
                        cleanedList.append(video)
                sortedList = sorted(cleanedList,
                                    key=lambda k: int(k['SubDownloadsCnt']),
                                    reverse=True)
                if auto == True:
                    update = True
                    response = WriteSubtitle(sortedList[0]['SubDownloadLink'],
                                             item['root'], item['filename'])

            else:
                Log.Info('There are no subtites for ' + item['filename'] +
                         ' at this time')
        subs.logout()

        if update:
            UpdateLibrary()
    except:
        Log.Exception('Error connecting to Opensubtitles.org')

    return sortedList
예제 #4
0
def SearchSubtitles(subtitles, auto=False):
    try:
        sortedList = []
        update = False
        subs = OpenSubtitles({
            'opensubtitles_server'  : 'http://api.opensubtitles.org/xml-rpc',
            'user_agent'            : 'plexapp.com v9.0',
            'language'              : Prefs['language'],
            'username'              : Prefs['username'],
            'password'              : Prefs['password']
        })
        token = subs.login(Prefs['username'], Prefs['password'])
        for item in subtitles:
            data = cleanedList = sortedList = []

            if item['type'] == 'episode':
                data = subs.search_subtitles([{'sublanguageid': Prefs['language'], 'imdbid':  item['id'], 'season': item['season'], 'episode': item['episode']}])
            else:
                data = subs.search_subtitles([{'sublanguageid': Prefs['language'], 'imdbid':  item['id']}])

            if data != None and data != False:
                for video in data:
                    if video['SubFormat'] == 'srt':
                        cleanedList.append(video)
                sortedList = sorted(cleanedList, key=lambda k: int(k['SubDownloadsCnt']), reverse=True)
                if auto == True:
                    update = True
                    response = WriteSubtitle(sortedList[0]['SubDownloadLink'], item['root'], item['filename'])

            else:
                Log.Info('There are no subtites for ' + item['filename'] + ' at this time')
        subs.logout()

        if update:
            UpdateLibrary()
    except:
        Log.Exception('Error connecting to Opensubtitles.org')

    return sortedList