Переименование файлов, скачанных с rutracker.org

    Хочу поделиться небольшим скриптом, который делает для меня простую, но весьма полезную вещь — производит групповое переименование скачанных файлов так, что файлы получают удобно читаемое имя со страницы на сайте торрент трекера.
    В итоге вместо "God.Bless.America.2011.HDTVRiP720.mkv" я получаю файл с именем "Боже, Благослови Америку God Bless America (Боб Голдтуэйт Bobcat Goldthwait) (2011) США, триллер, чёрная комедия, криминал, HDTVRip-AVC.mkv"
    В продолжение к теме Можно ли прибраться на компе раз и навсегда?

    В общем вот что делает скрипт: производит поиск по каталогу Downloads, ищет скачанные файлы и соответствующие им .torrent файлы. Затем берет из .torrent файла URL странички на rutracker.org, загружает эту страничку и получает название закачки. Затем, на основании полученного текста, скрипт и переименовывает скачанный файл (вместо переименования можно выбрать копирование файлов в другой каталог, перенос или создание ссылок).

    Для успешной работы скрипта понадобится Python 3 и uTorrent клиент с небольшой настройкой:
    Prefferences -> Other -> Store .torrent files in:
    Здесь необходимо указать каталог, куда uTorrent будет копировать .torrent файлы. Дел в том, что uTorrent, при копировании .torrent файлов в этот каталог, дает им такое-же имя как и скачиваемый файл. Чем я собственно и воспользовался.
    В скрипте этот каталог необходимо указать как TORRENT_DIR.

    Также необходимо прописать каталог, где скрипт будет искать скачанные файлы INPUT_DIR.
    И каталог, куда скрипт будет копировать файлы (переносить или создавать жесткие ссылки), то есть OUTPUT_DIR.

    При помощи переменной MOVE_ALGORITHM можно указать один из алгоритмов переноса файлов:
    • 'link' — создавать жесткие ссылки на файлы. Работает только для файловой системы NTFS в пределах одного диска. После создания жесткой ссылки, файл будет существовать до тех пор, пока не удалится последняя ссылка. По сути жесткая ссылка NTFS — это еще одно имя файла, равноценное с исходным
    • 'copy' — скопировать файлы
    • 'move' — перенести файлы из каталога INPUT_DIR в каталог OUTPUT_DIR. При выборе этого варианта будьте бдительны с активными закачками, если INPUT_DIR указывает на каталог, где производится раздача файлов
    • 'move' в сочетании, когда INPUT_DIR == OUTPUT_DIR, производит переименование файлов на месте


    # -*- encoding: utf-8 -*-
    import os
    import re
    import urllib.request
    import shutil
    import sys
    import ctypes
    
    INPUT_DIR       = 'D:/Downloads/uTorrent/Completed'
    OUTPUT_DIR      = 'D:/Video/Movies'
    TORRENT_DIR     = 'D:/Downloads/uTorrent/torrent'
    MOVE_ALGORITHM  = 'link'
    
    def GetMoveAlgorithms():
       return {'move' : MoveFile,
               'copy' : CopyFile,
               'link' : CreateHardLink}
    
    def Print(msg):
        msg = msg.encode('cp866', 'replace')
        msg = msg.decode('cp866')
        print(msg)
    
    def GetTorrentFilePath(fileName):
        filePath = os.path.join(TORRENT_DIR, fileName + '.torrent')
        if not os.path.exists(filePath):
            Print('Skiped, .torrent is not found: "%s' % filePath)
            return None
        return filePath
    
    def GetTrackerUrl(torrentFilePath):
        try:
            torrentFile = open(torrentFilePath, 'r', encoding='ascii', errors='replace')
            fileData = torrentFile.read()
            trackerUrlLen, trackerUrl = re.search(r'comment([0-9]{2}):(.+)', fileData).groups()
            trackerUrl = re.search(r'(.{' + trackerUrlLen + '})', trackerUrl).groups()[0]
            return trackerUrl
        except:
            Print("Error, can't extract tracker url from .torrent file %s" % torrentFilePath)
            return None
    
    def LoadTrackerPage(trackerUrl):
        try:
            response = urllib.request.urlopen(trackerUrl)
            htmlPage = response.read()
        except:
            Print("Error, Can't load tracker page '%s'" % trackerUrl)
            return None
        htmlPage = htmlPage.decode('cp1251')
        return htmlPage
    
    def PrepareFileName(fileName):
        try:
            #remove special symbols
            fileName = re.sub(r'[\\/:"\*?<>|]+', '', fileName, 0, re.UNICODE)
            #remove repeating spaces
            fileName = re.sub(r'[ ]+', ' ', fileName, 0, re.UNICODE)
            fileName = fileName.strip()
        except:
            Print("Error, can't prepare file name '%s'" % fileName)
            return None
        return fileName
    
    class FileInfo:
        pass
    
    def ParseTrackerPage(htmlPage):
        try:
            pageTitle = re.search(r'<title>(.+?) :: .+?</title>', htmlPage, re.UNICODE).groups()[0]
        except:
            Print("Error, Can't parse <title>")
            return None
        fileInfo = FileInfo()
        fileInfo.name = ""
        fileInfo.year = ""
        fileInfo.descr = ""
        try:
            fileInfo.name, fileInfo.year, fileInfo.descr = re.search(r'(.+?) \[([0-9]{4}).*?, (.+?)\]', pageTitle, re.UNICODE).groups()
        except:
            Print("Warning, Can't parse page title: %s" % pageTitle)
            try:
                fileInfo.name, fileInfo.year, fileInfo.descr = re.search(r'(.+?)([0-9]{4}).*?, (.+?)$', pageTitle, re.UNICODE).groups()
            except:
                Print("Warning, Can't parse page title: %s" % pageTitle)
                fileInfo.name = pageTitle
        return fileInfo
    
    def GetDataFromTorrent(fileName):
        torrentFilePath = GetTorrentFilePath(fileName)
        if not torrentFilePath:
            return None
        trackerUrl = GetTrackerUrl(torrentFilePath)
        if not trackerUrl:
            return None
        htmlPage = LoadTrackerPage(trackerUrl)
        if not htmlPage:
            return None
        return ParseTrackerPage(htmlPage)
    
    def PrepareNewFileName(fileName, fileInfo):
        tmp, ext = os.path.splitext(fileName)
        toPrepare = fileInfo.name + ' (' + fileInfo.year + ') ' + fileInfo.descr
        cleanName = PrepareFileName(toPrepare)
        newFileName = cleanName + ext
        return newFileName
    
    def MoveFile(src, dst):
        shutil.move(src, dst)
    
    def CopyFile(src, dst):
        if os.path.isdir(src):
            for fileName in os.listdir(src):
                if not os.path.exists(dst):
                    os.mkdir(dst)
                subSrc = os.path.join(src, fileName)
                subDst = os.path.join(dst, fileName)
                CopyFile(src, dst)
        else:
            if not os.path.exists(dst):
                shutil.copy2(src, dst)
    
    def CreateHardLink(src, dst):
        CreateHardLinkW = ctypes.windll.kernel32.CreateHardLinkW
        CreateHardLinkW.argtypes = (ctypes.c_wchar_p, ctypes.c_wchar_p, ctypes.c_void_p)
        CreateHardLinkW.restype = ctypes.c_int
        if os.path.isdir(src):
            for fileName in os.listdir(src):
                if not os.path.exists(dst):
                    os.mkdir(dst)
                subSrc = os.path.join(src, fileName)
                subDst = os.path.join(dst, fileName)
                CreateHardLink(subSrc, subDst)
        else:
            if not os.path.exists(dst):
                if CreateHardLinkW(dst, src, 0) == 0:
                    raise IOError
    
    def main():
        Print('Hello, Find downloads in "%s" :' % INPUT_DIR)
        totalCount = 0
        processedCount = 0
        for fileName in os.listdir(INPUT_DIR):
            totalCount = totalCount + 1
            Print('Process a file: "%s"' % fileName)
            fileInfo = GetDataFromTorrent(fileName)
            if fileInfo is None:
                continue
            sNewFileName = PrepareNewFileName(fileName, fileInfo)                               
            if sNewFileName:
                oldFilePath = os.path.join(INPUT_DIR, fileName)
                newFilePath = os.path.join(OUTPUT_DIR, sNewFileName)
                try:
                    GetMoveAlgorithms()[MOVE_ALGORITHM](oldFilePath, newFilePath)
                    processedCount = processedCount + 1
                except:
                    Print("Error, Can't move file from %s to %s" % (oldFilePath, newFilePath))
        Print("%d friles were moved from %d total found files" % (processedCount, totalCount))
    
    if __name__ == "__main__":
        main()
    

    Работа скрипта проверялась на Windows 7 x86 и Windows 7 x64
    В теории скрипт можно портировать и под Linux.

    Скрипт заточен под rutracker, но возможно будет работать и с другими сайтами.
    По крайней мере после доработки напильником.

    Для скачивания html странички я использовал библиотеку urllib2.
    А для парсинга .torrent файлов и html я использовал регулярные выражения.
    Оказалось, что на Python их использовать весьма удобно.
    В принципи для парсинга html лучше было бы использовать css селекторы, но пока и так сойдет.

    Так как Python это не мой основной язык, то буду рад советам опытных разработчиков.

    Update1:
    На случай, если пример с файлом God.Bless.America.2011.HDTVRiP720.mkv Вам кажется не убедительным, привожу список топовых файлов с рутрекера.
    Как по мне, то глаза и голову можно сломать пока поймешь что за фильм скрывается за одним из этих названий.
    И естественно программы-каталогизаторы, наподобие AllMyMovies или Movienizer, не смогут в автоматическом режиме найти информацию об этих файлах в базах IMDB и Кинопоиск.

    1. Na_grani_DVDRp_[rutracker.org]_by_Inсh.avi
    2. Ohotniki za golovani.chopper887.mkv
    3. Shvatka.chopper887.mkv
    4. prizrachnyi.gonschik_2.2012.hdrip.ac3.1450mb.by.riperrr.avi
    5. Dom_grez_BDRip_dub_[rutracker.org]_by_Scarabey.avi
    6. Lubov.zhivet.tri.goda.2011.BDRip.avi
    7. Nepricosaemie.chopper887
    8. Missiya-Fantom.chopper887.avi
    9. Njanki.2012.O.DVDRip.IRONCLUB.avi
    10. samoubyici.2012.dvdrip.ac3.1450mb.by.riperrr.avi
    11. belyi.tigr.2012.dvdrip.ac3.2050mb.by.riperrr.avi
    12. Zhila.byla.odna.baba.2011.BDRip.1.46.avi
    13. svidanie.2012.dvdrip.ac3.1450mb.by.riperrr.avi
    14. Moy.Paren.Angel.BDRip.avi
    15. Visotskiy_Spasibo_Chto_Jivoy_2011_DVDRip_1.46_Menen.avi
    16. Неадекватные люди_1.46.avi
    17. Den.vyborov.2007.avi
    18. shapito.shou_1.2010.hdrip.ac3.1450mb.by.riperrr.avi
    19. belyi.tigr.2012.dvdrip.ac3.1450mb.by.riperrr.avi
    20. 2 дня_1.46.avi


    Update2:
    По предложениям в комментариях решил обновить скрипт:
    1. Перешел на Python 3
    2. Разделил входной и выходной каталоги
    3. Добавил поддержку создания HardLink-ов для NTFS
    4. Добавил поддержку копирования файлов
    Поделиться публикацией

    Комментарии 84

      +50
      Как по мне, «Боже, Благослови Америку God Bless America (Боб Голдтуэйт Bobcat Goldthwait) (2011) США, триллер, чёрная комедия, криминал, HDTVRip-AVC.mkv» намного худший вариант имени файла, чем исходный
        +7
        Вот был бы обратный скрипт — финальная версия в изначальную, латиницей, без пробелов — было бы замечательно.
          0
          Каждому своё, но мне лично нравится видеть то название, по которому я нашел закачку на сайте, на не некоторое кодовое название, или что еще хуже на транслите.
            +2
            Если у вас библиотека скачанных фильмов насчитывает несколько терабайт и вы постоянно что-то докачиваете, причем не только для себя, то такое название просто отличное.

            Автору огромное спасибо! ) У меня лежит куча фильмов со странными названиями (далеко не всегда их именуют правильно), содержание которых я ни за что не вспомню.
              0
              При нынешних скоростях интернета и возможностях современной техники не понимаю, зачем библиотеку собирать. Я быстрее найду и скачаю на торрентах, чем у себя на диске :)
                0
                Ну если все будут так размышлять, то у кого Вы в итоге качать будете?
                Да и скорость закачки редких фильмов, из-за небольшого количества сидов, желает лучшего.
                  0
                  Про редкие фильмы соглашусь, но редкий фильм и посмотреть хочется редко, так что можно и потерпеть.
                  А вообще после скачивания не стираю фильмы, пока место есть на диске, так что проблемы с кого качать не вижу. Потом просто гигов 20-30 сразу освобождается и то смотрю в utorrent, что плохо разбирают, а что получше.
              +1
              А как Вы прокоментируете список файлов, приведенный в Update1?
              +10
              Получается же что после переименования utorrent не может найти исходный файл и уходит с раздачи.
                +9
                можно симлинк создать, но новое имя файла ужасно!
                  0
                  Возможно оно и ужасно, но оно содержит гораздо больше информации чем изначальное и любая программа каталогизатор сможет по новому имени найти полное описание фильма в сети, к примеру на Kinopoisk.ru, чего она не сможет сделать по оригинальному, особенно если это русское имя на транслите.
                    +1
                    если честно, я уже давно не понимаю тех людей что бэкапят торрент-трекеры,…
                    Скачал-пораздавал, посмотрел, удалил.

                      +1
                      Ну, бывают такие фильмы, которые потом, может быть, уже не скачаешь. Аналогично, бывает такая музыка (попробуйте, к примеру, найти хотя бы 10 песен Джоно Бэкона, не считая сделанную мной веб-страницу — хотя, казалось бы, не такой уж и неизвестный человек). И вот на таких раздачах хочется оставаться месяцы и годы, потому что всегда есть некоторая вероятность, что после тебя уже никого на этой раздаче не будет.
                        0
                        Лично я храню только самые понравившиеся мне фильмы еще и для того, чтобы помнить их список, а то забывается что фильм хороший, может и посмотрел бы его, но сразу и не вспомнишь, а так все под рукой. Да и куда еще девать 2 терабайта дискового пространства :)
                    0
                    Эта проблема исправлена добавленной возможностью копирования или создания HardLink-ов для NTFS.
                    Смотрите Update2.
                    +2
                    Я просто завел два каталога:
                    /somewere/deep/video/ — для закачек
                    /kino/ — для просмотра
                    первая директория периодически сканируется скриптом и создает симлинки во второй (если они там отсутствуют). После чего эти симлинки переименовываются как удобно, а оригинальный файл остается нетронутым, так что торрент-клиент спокойно продолжает его раздавать. Из плюсов подобной схемы можно отметить что доступ к фильмам есть у всех домашних, но меня не беспокоит возможность того, что они могут что-то удалить или переименовать.
                      0
                      Я добавил поддержку HardLink-ов для NTFS, смотрите Update2.
                      Теперь при помощи моего скрипта можно сделать схему, довольно похожую на Вашу.
                      Я так понимаю Вы работаете из под Linux, можете оценить, насколько реально портировать мой скрипит под Linux?
                      +1
                      А как быть с раздачами с несколькими файлами? например 2cd или сериал какой-нибудь.
                        0
                        Скрипт переименует только корневой каталог закачки, внутри останутся оригинальные имена.
                        У меня такая проблема возникала, когда фильм идет с субтитрами, то есть есть каталог, а в нем фильм и субтитры. Приходится переименовывать вручную. Я подумывал над тем, чтобы скрипт залез внутрь каталога и переименовал файлы в нем, но руки так и не дошли.
                        Скрипт далеко не универсальный, да, но в полуавтоматическом режиме я поддерживаю свою коллекцию видео в приемлемом виде.
                        Пробовал программы каталогизаторы вроде movienizer — не прижились. Собственно скрипт появился уже после попыток использования программ-каталогизаторов видео.
                        +3
                        >с именем «Боже, Благослови Америку God Bless America (Боб Голдтуэйт Bobcat Goldthwait) (2011) США, триллер, чёрная комедия, криминал, HDTVRip-AVC.mkv»

                        Кошмар какой -_- На Рутрекере конечно бывают файлы с какими-то дикими именами, но это точно не тот случай.
                          0
                          Идея в том, чтобы в имени файла было как можно больше информации, которая теряется, если файл уходит в коллекцию видео.
                          В конце концов если есть доступ к страничке описания файла, то от туда можно выковырять любую информацию, дело только в сложности парсинга html.
                          Мне оказалось достаточно тайтла странички, в основном потому, что это было проще всего сделать.
                            0
                            Я понимаю в чем ваша идея. Я ее просто не поддерживаю.

                            Имя файла «God.Bless.America.2011.HDTVRiP720.mkv» содержит всю необходимую информацию — название фильма, год выпуска(хотя это тоже спорно, если только нет нескольких фильмов с одним названием, но разного года выпуска), формат и само собой расширение. Если бы это был сериал, то там бы еще было S01E08 к примеру — т.е. 8й эпизод 1го сезона.

                            Я еще понимаю ваше желание иметь русское название фильма в названии, но зачем там вся остальная инфа — мне категорически непонятно.
                              0
                              А если не содержит? На трекерах в названиях файлов зачастую тот еще бардак (
                                0
                                1. Как правило по названию файлов мне трудно вспомнить что это за фильм.
                                Раньше мне часто приходилось производить поиск по имени файла в Google только для того, чтобы вспомнить что это за фильм такой у меня валяется, сейчас же я это делаю намного реже.

                                2. Я как-то занялся упорядочиванием моей коллекции фильмов при помощи кталогизатора AllMyMovies, а затем Movienizer и столкнулся с проблемой что эти программы не могли найти информацию в интернете для большинства моих файлов именно из-за того, что в названии файлов было недостаточно такой информации. Большинство этих файлов я скачал как-раз таки с рутрекера.

                                Сама идея в том чтобы не терять информацию, которая уже была доступна на момент загрузки файла.
                                В перспективе я хотел сохранять всю информацию со странички трекера в виде метаданных,
                                доступ к которым можно было бы получить нажав к примеру комбинацию клавиш или выбрав пункт контекстного меню, или как нибудь еще.
                            +3
                            И накинулись на автора, что де у него файлы как-то криво названы. Нельзя критиковать стиль именования — это личное дело каждого! Нравится автору такой стиль — его право!
                            Давайте лучше обсудим актуальные достоинства и недостатки такого решения:
                            Pro:
                            1. Единообразие — это клево. Выбрать стиль и придерживаться его, гораздо важнее споров о преимуществах и недостках (тех же египетских скобок, например;) )
                            2. Автоматизация — это правильно
                            Contra:
                            1. Что делать с раздачами с других трекеров?
                            2. Переименование лучше заменить на создание симлинков — тогда можно оставаться на раздаче.
                              0
                              Спасибо.
                              Дело даже не в том что мне нравится или не нравится такой стиль именования, дело в том, что мне так было проще всего сделать, т.к. в оформлении описаний закачки нет единых правил и предусмотреть все варианты для парсинга странички довольно сложно.
                              Меня лично этот компромисс устраивает, кого не устраивает, тот пусть ищет другое решение.

                              >>1. Что делать с раздачами с других трекеров?
                              Можно добавлять парсера для других трекеров.

                              >>2. Переименование лучше заменить на создание симлинков — тогда можно оставаться на раздаче.
                              Хорошая идея, я тоже об этом думал.
                                0
                                Я выложил обновленный скрипт, где добавил возможность копирования и создания хард линков для NTFS, смотрите Update2
                                +2
                                Конечно как именовать ваши файлы — Ваше дело, но…
                                Надо бы сделать страницу и назвать раздачу так: "☭ «Красная жара» ", чтобы вы поняли прелесть не-latin-1 символов в названиях файлов. На Windows (с ее windows-1251) это будет особенно болезненно. :)
                                  0
                                  На рутрекере существуют правила именования страниц, думаю такое название будет противоречить этим правилам.
                                    0
                                    И Windows отлично работает с юникодом, к вашему сведению.
                                      +1
                                      Упс. Отсюда поподробнее. Не разу не видел юникод в файловой системе на Windows. Как достигается?
                                        0
                                        Нативно достигается, ещё со времён Win2k.
                                      0
                                      У Вас в криокамере какие-то проблемы с не-latin-1 символами на файловой системе? Может быть, ещё и в формат 8.3 на всякий случай укладываетесь?

                                      Лично у меня вот даже папка для скачанных файлов называется ~/Downloads/µTorrent :) Именно так, µTorrent, а не uTorrent.
                                        0
                                        Не называю файлы/папки юникодом, т.к. не знаю какой системой придется когда-нибудь их открыть. В 8.3 конечно уложиться никогда не получается. Паттерн именования файлов такой [a-zA-Z0-9.-]*
                                          +1
                                          Что, даже без пробелов и подчёркиваний? Тогда, действительно, «только 8.3, только хардкор!» А то вдруг придётся загружаться с досовской дискеты?
                                        0
                                        Мне не хочется вас расстраивать, но cp-1251 в именах файлов никогда не использовалась. Даже в FAT в качестве кодировки была принята UTF-16.
                                          0
                                          Тогда мне очень странно, что при копировании файлов из *nix с не latin-1 именами на раздел с FAT32 я их потом в win-XP прочесть не мог. все было типа ?????????.zip
                                          Можно пруфлинк???
                                            0
                                            Пруф лежит в Википедии: http://ru.wikipedia.org/wiki/FAT#LFN-.D0.B7.D0.B0.D0.BF.D0.B8.D1.81.D0.B8. Мне в одной книге попадался разбор формата FAT, оттуда и помню.
                                            А то, что вы не могли из *nix записать на FAT что-то отличное от latin-1, то это вина исключительно вашей *nix системы. Возможно, разработчики драйвера забыли о существовании других кодировок. Возможно, разработчики дистрибутива не включили в поставку по умолчанию поддержку юникода. Ну и так далее.
                                              0
                                              Я вот помню, когда у меня был Windows в дуалбуте, то FAT-разделы для совместимости имён с кириллицей надо было монтировать вот так:

                                              mount -t vfat -o codepage=866,iocharset=utf8 /dev/hda5 /mnt/windows_partition

                                              И вот тогда всё отображалось нормально. Либо, как вариант, можно при компиляции ядра указать соответствующие опции:

                                              Linux Kernel Configuration: FAT
                                              File systems ->
                                                DOS/FAT/NT Filesystems ->
                                                  (utf8) Default iocharset for FAT
                                                  (866) Default codepage for FAT

                                              (Не забыв при этом также про раздел Native Language Support.)

                                              Но это CP866, то есть ни о каких символах кроме строго ограниченного набора речи не шло.
                                          0
                                          За вброс на нестандартный холивар и Идею для похожих решений плюсую!
                                            0
                                            У симлинков обнаружились проблемы в связке Win7+SMB+NMT. В свое время я сделал очень похоже, как у автора, с парой отличий: фреймворк от мозиллы с GUI; создавалась папка с новым «длинным именем», в которой лежал хардлинк файла с «коротким именем». Если в раздаче состояла папка, то использовался симлинк (Junction). Раздачи не обрывались.
                                              +1
                                              Можно подробнее про возникшую у Вас проблемму?
                                              Я добавил поддержку HardLink для NTFS, актуальна ли эта проблема и для моего скрипта?
                                                0
                                                Я ошибся, память подвела. Win7+SMB+NMT работает отлично с симлинками. Проблема была в uPnP-сервере myiHome. Теперь подробнее. Какой-то период времени на моем домашнем компьютере не работали Shared Folders. Они поломались, когда я делал из компьютера wi-fi точку доступа с помощью Kerio. Шары мне были не нужны по большому счету, но контент был доступен через утилиту myiHome, которая прилагалась к NMT — железному сетевому медиа-пригрывателю. Так вот, глючный и сырой myiHome считал, что у всех файлов-симлинков нулевой размер и не давал их проигрывать медиа-танку.
                                                Таким образом, для папок делались симлинки, а для файлов хардлинки.
                                                Насчет скрипта я бы проверил, как хардлинки работают для директорий — насколько я понял из MSDN, для директорий хардлинки использовать нельзя.
                                                  +1
                                                  Я сделал так, что скрипт рекурсивно обходит каталоги и создает их в новом месте, а хардлинки делает только на сами файлы в созданных уже каталогах.
                                                    0
                                                    Действительно… Python и не мой язык :)
                                              0
                                              У вас очень странный способ написания кода на Python'е (мне потребовалось пару секунд, чтобы определить, что это Python). Это ведь Ваш не основной язык, скорее третий после Java'ы или C#?
                                                0
                                                Вы правы, мой основной язык C++
                                                  +1
                                                  «На третий день индеец Зоркий Глаз заметил, что в камере отсутствует стена» (с)

                                                  ??? :)

                                                  Автор прямо пишет: Так как Python это не мой основной язык, то буду рад советам опытных разработчиков.
                                                    0
                                                    Кстати, а что именно отличает мой код от кода опытного питониста?
                                                    Можно пример как бы Вы реализовали одну из функций, мне действительно интересно было бы посмотреть…
                                                    0
                                                    Отличная идея.
                                                    И если уж использовать симлинки то можно сделать так:
                                                    1. Оргинальный файл оставит там где он есть, чтобы не уходить с раздачи.
                                                    2.Симлинк на файл с именем: «God Bless America.mkv» (оставил бы в латиннице чтобы небыло проблем со всякими аппаратными плеерами, типа автомобильного) поместил бы в папки:
                                                    видео/жанры/триллер
                                                    видео/жанры/ чёрная комедия
                                                    видео/жанры/криминал
                                                    видео/актеры/Боб Голдтуэй
                                                    видео/актеры/
                                                    видео/год/2011
                                                    видео/страна/США
                                                    видео/непросмотренное
                                                    видео/качество/HDTVRip
                                                      0
                                                      Мне кажется это уж слишком запутанным
                                                      Например как в таком случае произвести удаление файла?

                                                      Я добавил поддержку хардлинков для NTFS, смотрите Update2
                                                        0
                                                        Да, удалять сложнее (можно поиском по имени).

                                                        Зато искать что тебе нужно — гораздо легче.
                                                        Хочешь все фильмы с Деппом — они все в одной папке лежат. Хочешь жутик — в другой.
                                                          0
                                                          Для этого можно воспользоваться тегами, они вроде уже поддерживаются в Windows 7 в библиотеках.
                                                            0
                                                            и их можно поставить скриптом автоматически?
                                                      +1
                                                      я просто задаю нужное имя при добавлении закачки, если хочу
                                                        0
                                                        В вашей идее, конечно, что-то есть. Но думаю вариант по-умолчанию не для всех. А вообще, если хотите развивать идею, то сделайте еще файл конфига, в котором можно будет указывать параметры, например так:
                                                        filename = "%eng_title% %rus_title% %year% %genre% %encoder% %translate%"
                                                        Ну и таки сделайте и убедитесь, чтобы под Linux работало, не плохо так же сделать параметр с директорией куда будут создаваться симлинки(выше уже про это писали).
                                                        Думаю идею по дальнейшему развитию вы поняли, сделать конфиг и побольше параметров туда забить, чтобы каждый смог под себя настроить. Вот тогда будет зергуд.

                                                        И еще вопрос. Хоть вы и написали, что python не ваш основной язык, но почему версия 2.7? Ведь нужно можно было использовать 3 версию.
                                                        Чем больше мы пишем на 3 питоне, тем больше ускоряем процесс перехода на него(а этого очень хочется).
                                                          0
                                                          Я указал Python 2.7 потому, что я писал скрипт где-то год назад и не запускал его под 3-м питоном, думаю перейти на 3-ю версию не составит труда. Идея написать статью пришла мне в голову только сегодня утром, и по этому небыло времени что-то переделывать в коде.
                                                            0
                                                            Предлагаю вам развить идею и перейти на 3 питон).
                                                              0
                                                              Решил таки перейти на Python3 :)
                                                              Выложил обновленный скрипит, Смотрите Update2.
                                                          0
                                                          Софт: каталог фильмов — к ним цепляется торрент файл. Если хочешь посмотреть фильма, программа начинает стримить видео по p2p.
                                                          Есть ли такая программа? Позволила бы не хранить фильма на HDD
                                                            0
                                                            Плеер распознающий файл и ищущий по базе фильмов или dnla сервер делают жизнь лучше.
                                                              0
                                                              О! это какой например?
                                                                0
                                                                Plex, например
                                                              –1
                                                              Как по мне, то можно глаза и голову сломать пока поймешь что за фильм скрывается за этими названиями.

                                                              Не, ваш список не такой уж и страшный…
                                                              Вот над какими именами у меня обычно голова болит:
                                                              m18teens.08.11.24.Aletta.inyf.wmv
                                                              pinkyjune-hardcoreriver.mp4
                                                              x-art_prague_bts_2011.flv
                                                              Zoe_Chocolate_Ice-cream_HD.mp4

                                                                0
                                                                Тут нужна интеграция с Евроиндексом :)
                                                                0
                                                                Загонять побольше информации в название файла — это конечно ход, но не выход. Я вот давно мечтаю о плеере (железном) который бы распознавал название файла (я согласен помочь ему и переименованием файла и в сложных случаях вручную) и привязывал бы к нему инфу из какого-нибудь интернет-источника. Это была бы действительно полная информация. Там можно было бы искать и годам и по актерам. Была бы нормальная фильмотека. Сам сижу до сих пор на первом попкорне и жду плеер-мечту. Тем временем на винте уже почти 2000 файлов, как просмотренных, так и в очереди и найти что-то все сложнее и сложнее. Может такая железка уже существует?
                                                                  0
                                                                  Raspberry Pi + Plex Media Server.
                                                                  0
                                                                  А что, если не сохранять эту информацию в имени файла (имя файла наоборот делать коротким и чётким), а записывать её в виде метаданных файла? Это позволяют делать многие контейнеры, например, MKV.
                                                                    0
                                                                    Это все в планах, но для начала эту информацию необходимо изъять из html странички в каком-то структурированном виде. Проблема в том, что странички описания создаются людьми и нет четких правил для создания этих самых страниц.
                                                                      0
                                                                      если меняешь сам файл — то не сможешь его раздавать, это немого эгоистично.
                                                                        0
                                                                        Если создавать жесткую ссылку на файл, то исходное имя не меняется и оба имени равноценны и указывают на одни и те-же данные. Единственное ограничение работает в пределах одного диска NTFS.
                                                                        Вот статья на википедии: Жёсткая ссылка
                                                                          0
                                                                          это вы мне ответили? к чему?
                                                                            0
                                                                            Извините, я сразу не понял Ваш предыдущий комментарий. Я подумал, что Вы имеете в виду изменение имени файла.

                                                                            Если по теме, то сохранять метаданные в файл можно не модифицируя основной поток данных.
                                                                            На файловой системе NTFS есть возможность создания альтернативных потоков данных, можно воспользоваться этой возможностью.
                                                                            Ну или в базу данных сохранять.
                                                                      0
                                                                      Если вы перенесете этот код в плагины для XBMC (там тоже питон), чтоб он переименовывал в %название на англ% %год% %расширение%, чтоб XBMC потом автоматически находил фильм на IMDB — было бы вообще отлично.

                                                                      Хотя надо поискать, может что-то подобное уже есть…
                                                                        0
                                                                        Подобного нет, сам ищу уже достаточно долгое время!

                                                                        А ведь это было бы чрезвычайно полезно для пользователей медиа систем типа XBMC и MediaPortal.

                                                                        Нужно как-то изменить ваш скрипт, чтобы он оставлял только %английские названия к фильмам% + %год%.
                                                                        Без данных о режиссере, стране и тд и тп.

                                                                        Если бы вы смогли как-то это реализовать, цены бы вам не было!
                                                                        0
                                                                        А не думали написать авторам каталогизаторов, чтобы они подобную фичу в свои программы встроили?
                                                                          0
                                                                          Первый поиск в гугле привёл на хабру!
                                                                          Огромное спасибо за нужный скрипт
                                                                            0
                                                                            Автор, есть ли шанс увидет Вас на гитхабе? У меня есть подобный скрипт на php с поддержкой разных трекеров, хотелось бы приобщиться к python и поконтрибьютить :)
                                                                              0
                                                                              qBittorrent позволяет изменять имена файлов в раздаче без всяких ссылок. Думаю, это фича rasterbar-libtorrent, и любой производный от неё клиент можно этому обучить.
                                                                                0
                                                                                Так вопрос, как оно узнает во что переименовывать?
                                                                                  0
                                                                                  Проблема не в этом. qBittorrent переименовывает файл, но не уходит с раздачи, как uTorrent.
                                                                                    0
                                                                                    Вы о чем? Скрипт автоматизирует процесс переименования основываясь на данных торрента. qBittorent разве делает что-то подобное?
                                                                                      0
                                                                                      Если вы переименуете файл, то uTorrent не сможет больше раздавать его.
                                                                                        0
                                                                                        О том, что скрипт хороший, клиент — нет.

                                                                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                                                                Самое читаемое