ludocus Posted January 17, 2014 Share Posted January 17, 2014 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: expandcollapse popup#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> » ', 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 Link to comment Share on other sites More sharing options...
mikell Posted January 17, 2014 Share Posted January 17, 2014 (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 January 17, 2014 by mikell Link to comment Share on other sites More sharing options...
storme Posted January 17, 2014 Share Posted January 17, 2014 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! Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
ludocus Posted January 17, 2014 Author Share Posted January 17, 2014 (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 January 17, 2014 by ludocus Link to comment Share on other sites More sharing options...
storme Posted January 17, 2014 Share Posted January 17, 2014 @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. Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
ludocus Posted January 17, 2014 Author Share Posted January 17, 2014 Weird, it doesn't work for me. Try my script. Link to comment Share on other sites More sharing options...
storme Posted January 18, 2014 Share Posted January 18, 2014 Works perfectly for me Maybe compile and try it on another computer to see if it's something on yours that is messing up? Good Luck! Some of my small contributions to AutoIt Browse for Folder Dialog - Automation SysTreeView32 | FileHippo Download and/or retrieve program information | Get installedpath from uninstall key in registry | RoboCopy function John Morrison aka Storm-E Link to comment Share on other sites More sharing options...
MHz Posted January 19, 2014 Share Posted January 19, 2014 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. Link to comment Share on other sites More sharing options...
ludocus Posted January 19, 2014 Author Share Posted January 19, 2014 Thnx MHz, I'll look in to that. Any other, simpler way than using 7zip? Link to comment Share on other sites More sharing options...
MHz Posted January 19, 2014 Share Posted January 19, 2014 .Net has the GZipStream class but I have doubt that is any good for this. You could use GZip.exe here (about 90kb) and keep that with the script. Perhaps something is exposed in COM usage but I have not found it yet. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now