python libtorrent How I get file list of torrent from info_hash?

2.2k views Asked by At
def magnet2torrent(id, info_hash):

    info_hash_id=id

    magnet="magnet:?xt=urn:btih:"+info_hash

    ses = lt.session()
    params = {
        'save_path': './',
        'duplicate_is_error': True,
        'storage_mode': lt.storage_mode_t(2),
        'paused': False,
        'auto_managed': True,
        'duplicate_is_error': True
    }
    handle = lt.add_magnet_uri(ses, magnet, params)

    print("Downloading Metadata (this may take a while)")
    i = 0;
    while (not handle.has_metadata()):
#        i = i+1
        if i > 300 :
            return
        sleep(1)
    ses.pause()
    print("Done")

    torinfo = handle.get_torrent_info()
    con = db.get_conncetion()
    cur = con.cursor()
    for f in torinfo:
        cur.execute("INSERT INTO file_list (info_hash_id, name, size) VALUES (\""+str(info_hash_id)+"\", \""+str(f.path)+"\", "+str(f.size)+");")
        print("INSERT INTO file_list (info_hash_id, name, size) VALUES (\""+str(info_hash_id)+"\", \""+str(f.path)+"\", "+str(f.size)+");")
        con.commit()
        cur.close()
        con.close()

I think if I can get torrent file from info_hash then I can get file list from torrent file.

but when I run my code

while (not handle.has_metadata()):
not ended. but webpage like http://magnet2torrent.com give me torrent immediately

How can I get file list from info_hash?

1

There are 1 answers

2
Arvid On BEST ANSWER

if you don't have any trackers in your magnet links, you need to start the DHT. You can do that by calling:

ses.add_dht_router("router.utorrent.com", 6881)
ses.start_dht()

after constructing the session object.