Jump to content

Recommended Posts

Posted

Hi Guys,

I'm trying to create a program that'll download .torrent files for me automatically and place them in a folder so uTorrent starts downloading them.

The whole script works flawless (for now) except for the most important part: Downloading the .torrent file.

It works, it downloads the .torrent file perfectly, but for some reason uTorrent gives me the error that 'the torrent file was not correctly encoded'.

For some reason downloading the torrent with InetGet instead of my browser, fucks it up. The size of the torrent is exactly the same as that of the one I download with my browser, still the files are different.

This is my script:
 

#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.8.1
 Author:         myName

 Script Function:
    Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <INet.au3>
#include <Array.au3>
$downloadfolder = 'C:\Users\Ludo\Downloads\torrents'

$searchquiry = StringReplace('the hobbit desolation of smaug', ' ', '+')
$preferedsite = 'kickmirror'
$link = 'http://torrentz.eu/search?f='&$searchquiry
$source = _INetGetSource($link, True)
$S1 = StringSplit($source, '<a rel="nofollow" href="/searchA?f='&$searchquiry&'"> date </a> |  <a rel="nofollow" href="/searchS?f='&$searchquiry&'"> size </a> |  <b> peers </b></h3>', 1)
$S2 = StringSplit($S1[2], '<dl><dt style="text-align: right">', 1)
$S3 = StringSplit($S2[1], @LF, 1)
global $torrents[$S3[0]+1][7]
$torrents[0][0] = $S3[0]-1
;   Form of $torrents[a][b] for b:
;       $torrents[a][0] = total string
;       $torrents[a][1] = torrent url
;       $torrents[a][2] = torrent title
;       $torrents[a][3] = torrent size
;       $torrents[a][4] = torrent seeders
;       $torrents[a][5] = torrent peers
;       $torrents[a][6] = torrent type

For $i = 1 to $torrents[0][0]
    ;MsgBox(0, '', _StringBetw($S3[$i], '<a href="', '">'))
    $torrents[$i][0] = $S3[$i]
    $torrents[$i][1] = _StringBetw($S3[$i], '<a href="', '">')
    $torrents[$i][2] = _StringStrip(_StringBetw($S3[$i], '<a href="'&$torrents[$i][1]&'">', '</a>'))
    $temp1 = StringSplit($S3[$i], '</a> &#187; ', 1)
    $temp2 = StringSplit($temp1[2], '</dt><dd>', 1)
    $temp3 = StringSplit($S3[$i], '</span></span><span class="s">', 1)
    $temp4 = StringSplit($temp3[2], '</span> <span class="u">', 1)
    $temp5 = StringSplit($temp4[2], '</span><span class="d">', 1)
    $temp6 = StringSplit($temp5[2], '</span>', 1)
    $torrents[$i][3] = $temp4[1]
    $torrents[$i][4] = $temp5[1]
    $torrents[$i][5] = $temp6[1]
    $torrents[$i][6] = $temp2[1]
Next


;_ArrayDisplay($torrents)
;ClipPut($torrents[1][1]&@CRLF&@CRLF&$torrents[$torrents[0][0]][2])

$source2 = _INetGetSource('http://torrentz.eu/'&$torrents[1][1])
$A1 = StringSplit($source2, ' torrent download locations</h2><dl><dt>', 1)
$A2 = StringSplit($A1[1], '</span> ', 1)
$A3 = StringSplit($A1[2], '<a href="', 1)
$locations = $A2[$A2[0]]
global $tors[$locations+1]
$n = 0
For $i = 2 to $locations
    $A4 = StringSplit($A3[$i], '" ', 1)
    $tors[$i] = $A4[1]
    If StringInstr($tors[$i], $preferedsite) Then
        $n = $i
    EndIf
Next
If $n = 0 Then
    Msgbox(32, 'Too bad', 'No kickmirror torrent links found..')
    Exit
EndIf

;_ArrayDisplay($tors)
$source3 = _INetGetSource($tors[$n], True)

;$B1 = _StringBetw($source3, '<a title="Magnet link" href="', '"')
;ShellExecute($B1)

$B1 = _StringBetw($source3, '<a rel="nofollow" title="Download verified torrent file" href="', '"')
$B2 = StringSplit($B1, '.torrent?title=', 1)
$finallink = $B2[1]&'.torrent'
InetGet($finallink,$downloadfolder&'\'&$B2[2]&'.torrent', 4)


MsgBox(32, 'Succes', 'Torrent started downloading!')
Func _StringBetw($string, $start, $end)
    $pa = StringSplit($string, $start, 1)
    If $pa[0] <  2 Then Return 0
    $pb = StringSplit($pa[2], $end, 1)
    Return $pb[1]
EndFunc

Func _StringStrip($string)
    $s = StringReplace($string, '<b>', '')
    $s1 = StringReplace($s, '</b>', '')
    Return $s1
EndFunc

Please try it out, then try to run the torrent with utorrent or some other torrent downloader.

If somebody knows what the problem is, I'd be very happy if you'd help me here!

Thnx in advance,

Ludo

Posted (edited)

You can't, in a torrent downloaded using Inetget there are tracker data missing in the file

But if you win out getting the magnet link then it works

Shellexecute("magnet:?xt=urn:btih:A8F9179F064E97184D6FD005F921D6D786FD84CF&dn=the+hobbit+ii+the+desolation+of+smaug+2013+xvid+dd2+0+screener+custom+nlsubs+nltoppers&tr=udp%3A%2F%2Ftracker.openbittorrent.com%3A80%2Fannounce&tr=udp%3A%2F%2Fopen.demonii.com%3A1337")
Edited by mikell
Posted

Why are you treating the binary torrent files as ASCII?

InetGet($finallink,$downloadfolder&'\'&$B2[2]&'.torrent', 4)

change it to

InetGet($finallink,$downloadfolder&'\'&$B2[2]&'.torrent')

and try again.

I haven't tried your code but that should work. :)

Good Luck!

Posted (edited)

@Mikell: Ah so that's the problem. Well too bad. Yes I know, that's the alternitave I came up with. Still I'd rather download the direct torrent file.

Could there be some other way then InetGet that can download a torrent file?

@Storme: Nope, I was just experimenting, and apparently didn't change the 4 back to nothing. But none of the opts work for those torrent files.

Edited by ludocus
Posted

@Storme: Nope, I was just experimenting, and apparently didn't change the 4 back to nothing. But none of the opts work for those torrent files.

 

I use

$hDownload = InetGet($sDownloadURL & $sfilename, $sTorrentFolder & "\" & $sfilename)

To download torrents for my "DriverPacksAutoUpdate" script and it works perfectly.

Posted

Look here at the Torcache home page.

 

The torrent files are saved to disk in gzip format, that means you have to use a browser that understands the gzip transfer encoding.

So what you are doing is downloading a file that is compressed in gzip format. You could use 7-zip to extract the file after downloading. :)

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...