验证Python中是否有效的Torrent文件?

时间:2018-06-25 13:42:40

标签: python bittorrent torrent

有人知道Python中的种子文件(即file.torrent)是否有效的方法吗? 如果您想知道文件是否存在于给定位置,os.path.exists()会很好用,但是我想检查现有文件本身是否是有效的种子。

有什么想法吗?

谢谢。

更新1:

由于很多人都对上面的描述有所了解,因此这里有更详细的说明!
我使用request库下载种子,并将其放入客户端的watch文件夹中,然后该文件夹自动开始下载。

def download_torrent(torrent_url, file_path, pause=None, verbose=True):
    """ 
    Downloads a torrent file, if it doesn't already exist.

    PARAMETERS
    - torrent_url:    torrent url
    - file_path:      absolute local filepath
    - pause:          integer number of seconds
    - verbose:        True/False
    """
    import requests

    if not os.path.exists(file_path): # torrent file does not exist in location
        r = requests.get(torrent_url)
        filename = os.path.basename(file_path)
        with open(file_path, "wb") as torrent:
            if verbose: print "> Downloading '%s'..." %(os.path.basename(file_path))
            torrent.write(r.content)
        if pause != None: 
            sleep(pause)
    else: # torrent file exists already
        if verbose: 
            print "! '%s' already exists, skipping file..." %(os.path.basename(file_path))

这在大多数情况下都可以正常工作。但是,客户端无法加载某些种子文件,因为它们已损坏。
我正在寻找一种方法来识别这些文件,从而防止客户端加载它们。

1 个答案:

答案 0 :(得分:1)

要验证Torrent文件是否有效,您需要使用Bencoder / Decoder实现来解析该文件,然后检查BEP3中的必填字段是否存在以及是否以预期的形式存在。

libtorrent提供python绑定。 Bittornado应该包含一个纯Python实现,尽管它有些陈旧。