storme Posted November 2, 2012 Author Share Posted November 2, 2012 From the error it looks like thay may have changed there "file info" page. I'll look at it tomorrow (1:30am here) and upload a new version. Thanks for the feedback! 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...
storme Posted November 2, 2012 Author Share Posted November 2, 2012 yesterday went to the script for filehippo.com, now is always error 2 display?I just tried it and it worked perfectly for me.Could you send me the calling lines (of code) you are using so I can check the file you are trying to get. There may have been a change just in that programs data that I haven't made allowance for.Thanks!John 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...
timyboy Posted November 2, 2012 Share Posted November 2, 2012 (edited) Hi, thanks for the efforts. First of all it would be possible to develop a version for Softpedia.com? Below your script, which went up yesterday as well: expandcollapse popup#Region ;**** Directives created by AutoIt3Wrapper_GUI **** #AutoIt3Wrapper_Icon=AutoIt_Menu_Icon.ico #AutoIt3Wrapper_Outfile_x64=Opera-download.exe #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI **** #include-once #include <array.au3> Func _FileHippoDownload($sProgramTitle, $sDownloadFolder, $sDownloadFileName = "", $bDownload = True, $bSkipBeta = True, $FunctionToCall = "") Local $DownloadUrl, $asDownloadUrl Local $sCurrentVersion, $asCurrentVersion Local $sBaseSite = 'http://filehippo.com' Local $sBaseFolder = '/download_' & $sProgramTitle & '/' Local $sVersionFolder = "" ; for Beta rejection ;String trailing slash "" If StringRight($sDownloadFolder, 1) = "" Then StringLeft($sDownloadFolder, StringLen($sDownloadFolder) - 1) If DirCreate($sDownloadFolder) = 0 Then Return SetError(6, 0, "") ; destination unreachable ;Get source for program page Local $sPageSource = _GetSourceCode($sBaseSite & $sBaseFolder) If @error Then ;Failed to get programs page Return SetError(1, 0, "") EndIf ;Latest Version<br/><b>Malwarebytes Anti-Malware 1.51.1</b><br/><br/>Old Versions $asCurrentVersion = StringRegExp($sPageSource, '(?s)(?i)Latest Version<br(.*?)</b><br/><br/>Old Versions', 3) If @error Then Return SetError(2, 0, "") EndIf $sCurrentVersion = StringMid($asCurrentVersion[0], StringInStr($asCurrentVersion[0], " ", 0, -1) + 1) ;Check for BETA copy rejection If $bSkipBeta And StringInStr($asCurrentVersion[0], "beta") <> 0 Then ;Get table of old versions $asCurrentVersion = StringRegExp($sPageSource, '(?s)(?i)>Old Versions<(.*?)download_opera/history/', 3) If @error Then Return SetError(2, 0, "") EndIf ; Break table into array $asCurrentVersion = StringRegExp($asCurrentVersion[0], '(?s)(?i)<a href="/download_opera/(.*?)/">(.*?)</a>', 3) If @error Then Return SetError(2, 0, "") EndIf ;search array for NON beta version For $iItem = 1 To UBound($asCurrentVersion) - 1 Step 2 If StringInStr($asCurrentVersion[$iItem], "beta") = 0 Then $sVersionFolder = $asCurrentVersion[$iItem - 1] & "/" $sCurrentVersion = StringMid($asCurrentVersion[$iItem], StringInStr($asCurrentVersion[$iItem], " ", 0, -1) + 1) ExitLoop EndIf Next If $sVersionFolder = "" Then ;NO NON BETA version available Return SetError(9, 0, "") Else ;Found non beta ;Get source for non beta program page Local $sPageSource = _GetSourceCode($sBaseSite & $sBaseFolder & $sVersionFolder) If @error Then ;Failed to get programs page Return SetError(1, 0, "") EndIf EndIf EndIf ;Get download URL $asDownloadUrl = StringRegExp($sPageSource, '(?s)(?i)<a href="' & $sBaseFolder & 'download/(.*?)/">', 3) If @error Then Return SetError(2, 0, "") EndIf $_DownloadUrl1 = $asDownloadUrl[0] ;Get source for details page Local $sPageSource = _GetSourceCode($sBaseSite & $sBaseFolder & 'tech/') If @error Then ;Failed to get programs page Return SetError(1, 0, "") EndIf ;Get Details/description Table ;$asDescTable = StringRegExp($sPageSource, '(?s)(?i)<div class="desc">.*?<table>(.*?)</table>', 3) $asDescTable = StringRegExp($sPageSource, '(?s)(?i)<div id="txt">.*?<table>(.*?)</table>', 3) If @error Then Return SetError(2, 0, "") EndIf $sDescTable = $asDescTable[0] ;Split up table $asDescTable = StringRegExp($sDescTable, '(?s)(?i)<tr><td><b>(.*?):</b></td><td>(.*?)</td></tr>', 3) If @error Then Return SetError(2, 0, "") EndIf ;Convert to 2D array Dim $_FileDetails[UBound($asDescTable) / 2 + 2][2] $_FileDetails[0][0] = UBound($asDescTable) / 2 ; number of rows in array $_FileDetails[2][0] = $asDescTable[0] $_FileDetails[2][1] = $asDescTable[1] For $item = 2 To UBound($asDescTable) - 1 Step 2 $_FileDetails[$item / 2 + 2][0] = $asDescTable[$item] $_FileDetails[$item / 2 + 2][1] = $asDescTable[$item + 1] Next ;Cleanup Author Local $iIndex = _ArraySearch($_FileDetails, "Author") If Not @error Then $_FileDetails[$iIndex][1] = StringLeft($_FileDetails[$iIndex][1], StringInStr($_FileDetails[$iIndex][1], "<") - 1) EndIf ;Cleanup HomePage $iIndex = _ArraySearch($_FileDetails, "HomePage") If Not @error Then $_FileDetails[$iIndex][1] = StringMid($_FileDetails[$iIndex][1], StringInStr($_FileDetails[$iIndex][1], "href=") + 6) $_FileDetails[$iIndex][1] = StringMid($_FileDetails[$iIndex][1], 1, StringInStr($_FileDetails[$iIndex][1], '"') - 1) EndIf $_FileDetails[1][0] = "Latest Version" $_FileDetails[1][1] = $sCurrentVersion If $bDownload Then ;<a href="/download_opera/download/f9c81a8e689661f472f47aa7a0b12ada/"><img src="http://cache.filehippo.com/img/down5.png" alt="Download"/></a> ;Get source for download page $sPageSource = _GetSourceCode($sBaseSite & $sBaseFolder & 'download/' & $_DownloadUrl1) ; downlaod page If @error Then ;Failed to get programs page Return SetError(3, 0, "") EndIf ;<a id="_ctl0_contentMain_lnkURL" class="black" href="/download/file/de709ff1117ec419609d7fceecd86e625fe523b1385fa00515aa824249206a40/">If not then please click this link</a> $asDownloadUrl = StringRegExp($sPageSource, '(?s)(?i)href="/download/file/(.*?)/">', 3) If @error Then Return SetError(4, 0, "") EndIf $DownloadUrl = "/download/file/" & $asDownloadUrl[0] & "/" If $sDownloadFileName = "" Then ;Use FileHippo filename $sDownloadFileName = $_FileDetails[_ArraySearch($_FileDetails, "Filename")][1] EndIf ; DOWNLOAD FILE Local $iFileSize = InetGetSize($sBaseSite & $DownloadUrl, 1) Local $DownloadedSoFar = 0 ; howmany bytes of the file have been downloaded Local $bRtn = True ; Progress function return OK Local $hDownload = InetGet($sBaseSite & $DownloadUrl, $sDownloadFolder & "" & $sDownloadFileName, 1, 1) Do If $FunctionToCall <> "" Then $bRtn = Call($FunctionToCall, Floor((InetGetInfo($hDownload, 0) / $iFileSize) * 100)) If @error Then InetClose($hDownload) ; Close the handle to release resourcs. Return SetError(8, 0, "") EndIf EndIf Sleep(250) Until InetGetInfo($hDownload, 2) Or $bRtn = False ; Check if the download is complete. Local $nBytes = InetGetInfo($hDownload, 0) InetClose($hDownload) ; Close the handle to release resourcs. If @error Then Return SetError(5, 0, "") EndIf If $bRtn = False Then ;Download aborted by $FunctionToCall Return SetError(7, 0, "") EndIf EndIf Return $_FileDetails EndFunc ;==>_FileHippoDownload Func _GetSourceCode($_Url) Local $_InetRead = InetRead($_Url) If Not @error Then Local $_BinaryToString = BinaryToString($_InetRead) If Not @error Then Return $_BinaryToString EndIf EndFunc ;==>_GetSourceCode ProgressOn("FileHippo Download", "Downloading : opera") $test = _FileHippoDownload("opera", @ScriptDir & "", "install_opera.exe", True, True, "_UpdateProgress") ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $test = ' & $test & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console ProgressOff() Run("$test") Exit #include <Misc.au3> Func _UpdateProgress($Percentage) ProgressSet($Percentage, $Percentage & "%") If _IsPressed("77") Then Return False ; Abort on F8 Return True ; bei 1 Fortsetzten EndFunc ;==>_UpdateProgress Edited November 2, 2012 by timyboy Link to comment Share on other sites More sharing options...
storme Posted November 3, 2012 Author Share Posted November 3, 2012 Hi, thanks for the efforts. First of all it would be possible to develop a version for Softpedia.com? Below your script, which went up yesterday as well: ProgressOn("FileHippo Download", "Downloading : opera") $test = _FileHippoDownload("opera", @ScriptDir & "\", "install_opera.exe", True, True, "_UpdateProgress") ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $test = ' & $test & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console ProgressOff() Run("$test") Exit #include <Misc.au3> Func _UpdateProgress($Percentage) ProgressSet($Percentage, $Percentage & "%") If _IsPressed("77") Then Return False ; Abort on F8 Return True ; bei 1 Fortsetzten EndFunc ;==>_UpdateProgress I'll look into a "Softpedia" version and see if it's possible. 2nd - its never a good idea to remove the header of a function because there is usually good inforamtion in it and the author (me) was trying to help you use the function. ; $bSkipBeta - [optional] True = BETA copies will not be downloaded False = latest version will be downloaded Opera is beta and you specified that you don't want beta copies. I'll have to think about this situation and work out how to handle it. My thoughts are just raise another error number that specifies no non-betas available. hmmm Anyway your problem can be fixed by changing the "$bSkipBeta" (the second true) to a False. If you have any more problems let me know. John Morrison 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...
storme Posted November 3, 2012 Author Share Posted November 3, 2012 Hi, thanks for the efforts.First of all it would be possible to develop a version for Softpedia.com?I had a look at the site and it doesn't look easy or maybe even do-able.The software is sorted into catagories so the script would have to search for the software first.and the pages I looked at have been convereted to hex to stop easy access so it would all have to be done with the IE library.I can forsee a lot of pain for anyone who tries to automate this site.So sorry I won't be tackling this one. 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...
rogerthehart Posted April 27, 2013 Share Posted April 27, 2013 (edited) Hello - Thanks for fhe script! I've been working on an iTunes updater/installer using AutoIt and found this thread today. Regarding the version number element[1][1] - for iTunes it is returning "(32-bit)" or "(64-bit)" which is the end of the string rather than the actual version number. It will do the same for VLC considering the same scenario. Is there a way to except those in your script for $sCurrentVersion or $asCurrentVersion ? Edited April 28, 2013 by rogerthehart Link to comment Share on other sites More sharing options...
storme Posted May 3, 2013 Author Share Posted May 3, 2013 Hello - Thanks for fhe script! I've been working on an iTunes updater/installer using AutoIt and found this thread today. Regarding the version number element[1][1] - for iTunes it is returning "(32-bit)" or "(64-bit)" which is the end of the string rather than the actual version number. It will do the same for VLC considering the same scenario. Is there a way to except those in your script for $sCurrentVersion or $asCurrentVersion ? Hi rogerthehart This is a problem I ran into when I was developing the script. The version number is part of the program name and can come in a multiitude of forms. I eventually came up with this simple line to remove the program name $sCurrentVersion = StringMid($asCurrentVersion[0], StringInStr($asCurrentVersion[0], " ", 0, -1) + 1) Which just looks for the LAST space and extracts everything after that as the version number. Which worked fine for everything I tested it on back then but that then added " (32-Bit)" and messed it up....sigh Sorry for the late reply I wrote the above days ago wandered off to try and find a solution (haven't found one yet). Then for got to send this. Sorry! I was hoping there was a quick fix... but no... There are other variations that won't work either. So I'm at a bit of a lose what to do next. When I"m out form under the computers I'm working on I'll get back onto it but maybe one of the RegEX experts could build something up to just extract the version from the full name... In the mean time you could mod the code to remove the (32bit)/(64bit) form the end of the name as a temporary solution while we try and find a more perminent solution. 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...
rogerthehart Posted May 4, 2013 Share Posted May 4, 2013 Thanks for the reply - I've been working at trying to tweak the code but I don't know enough about regular expressions (yet) to be successful. Link to comment Share on other sites More sharing options...
rogerthehart Posted May 4, 2013 Share Posted May 4, 2013 I think I got something-- I inserted these lines right before the line "$sCurrentVersion = StringMid($asCurrentVersion[0], StringInStr($asCurrentVersion[0], " ", 0, -1) + 1)" and got the version info back. ; strip (32-bit) or (64-bit) from version string if StringInStr($asCurrentVersion[0], "(32-bit)") Then $asCurrentVersion[0] = StringReplace($asCurrentVersion[0], " (32-bit)", "") EndIf if StringInStr($asCurrentVersion[0], "(64-bit)") Then $asCurrentVersion[0] = StringReplace($asCurrentVersion[0], " (64-bit)", "") EndIf Link to comment Share on other sites More sharing options...
storme Posted May 5, 2013 Author Share Posted May 5, 2013 (edited) I think I got something-- I inserted these lines right before the line "$sCurrentVersion = StringMid($asCurrentVersion[0], StringInStr($asCurrentVersion[0], " ", 0, -1) + 1)" and got the version info back. ; strip (32-bit) or (64-bit) from version string if StringInStr($asCurrentVersion[0], "(32-bit)") Then $asCurrentVersion[0] = StringReplace($asCurrentVersion[0], " (32-bit)", "") EndIf if StringInStr($asCurrentVersion[0], "(64-bit)") Then $asCurrentVersion[0] = StringReplace($asCurrentVersion[0], " (64-bit)", "") EndIf Yep that will work fine for your situation. Well Done! I'm looking for a more permanent solution to handle your situation and the others like this "Picasa 3.9 Build 136.20". The simplest solution would be to add a string replace for each situation (maybe replace the " build " in the above situation with a full stop ".") but that grates against my sense of neatness. Anyway if all else fails you'll see the solution in the code. BTW a quick dirty way of doing the same thing is $asCurrentVersion[0] = StringReplace($asCurrentVersion[0], " (32-bit)", "") $asCurrentVersion[0] = StringReplace($asCurrentVersion[0], " (64-bit)", "") The IF's are nice and neat but the string replace can handle the situation if the strings aren't there. OR you could even nest functions like this ; remove platform indicators from program name $asCurrentVersion[0] = StringReplace(StringReplace($asCurrentVersion[0], " (32-bit)", ""), " (64-bit)", "") and save redefining $asCurrentVersion[0] twice. I didn't do any checks on speed or "garbage" creation on these but they will all work. Let me know if you have any other problems. It's good to know when people are using the code I put out. John Morrison Edited May 5, 2013 by storme 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...
rich2323 Posted January 7, 2014 Share Posted January 7, 2014 Has anyone else had any issues with this script since filehippo updated their website? Rich Link to comment Share on other sites More sharing options...
storme Posted January 8, 2014 Author Share Posted January 8, 2014 I've just had a look and yes with the update the pages have changed. I'll have a look and see what needs to be changed. Hopefully not too much. Stay tuned... rich2323 1 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...
storme Posted January 8, 2014 Author Share Posted January 8, 2014 (edited) OK here is a new version hot off the presses. It hasn't been fully tested yet so far if you find any bugs let me know ASAP Have fun John Morrison Edit: New version (V2.3.1) uploaded down a few messages. Edited February 18, 2014 by storme 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...
Proph Posted February 13, 2014 Share Posted February 13, 2014 Thanks! This will help me update my filehippo download script I have been using in a couple of my programs that stopped working on the new fh site!! You are awesome!! Link to comment Share on other sites More sharing options...
storme Posted February 15, 2014 Author Share Posted February 15, 2014 No problem I'm glad to help! If you have any problems with it in future let me know and I'll get it fixed. Have fun John 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...
Proph Posted February 18, 2014 Share Posted February 18, 2014 For 7-zip_64 it returns Latest Version as: (64-bit) if searching for NON beta version. Change This: ;search array for NON beta version For $iItem = 1 To UBound($asCurrentVersion) - 1 Step 2 If StringInStr($asCurrentVersion[$iItem], "beta") = 0 Then $sVersionFolder = $asCurrentVersion[$iItem - 1] $sCurrentVersion = StringMid($asCurrentVersion[$iItem], StringInStr($asCurrentVersion[$iItem], " ", 0, -1) + 1) ExitLoop EndIf Next With This: ;search array for NON beta version For $iItem = 1 To UBound($asCurrentVersion) - 1 Step 2 If StringInStr($asCurrentVersion[$iItem], "beta") = 0 Then $sVersionFolder = $asCurrentVersion[$iItem - 1] $asCurrentVersion[$iItem] = StringStripWS(StringRegExpReplace($asCurrentVersion[$iItem],"\((32|64)-bit\)",""),3) ; remove (32|64-bit) $sCurrentVersion = StringMid($asCurrentVersion[$iItem], StringInStr($asCurrentVersion[$iItem], " ", 0, -1) + 1) ExitLoop EndIf Next That should fix it. Link to comment Share on other sites More sharing options...
storme Posted February 18, 2014 Author Share Posted February 18, 2014 Thank you Proph for catching that one for me. Here is the updated version with your fix in. Let me know if you find any other errors. John _FileHippoDownloadV2.3.1.zip 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...
Proph Posted April 15, 2014 Share Posted April 15, 2014 I've been trying to modify the script to also skip "Dev" when Betas are supposed to be skipped. Since Google Chrome releases Dev versions all the time. They don't call them beta's... but I personally would consider them Betas. The issue I have is that if all of the versions found on the first page are Devs or Betas... then there is an issue with the script. Because the script does not know how to check the next page of releases. I know this isn't an issue with any of the other downloads on FileHippo currently.... and I am only noticing this issue on chrome when I skip "Dev" releases. (Also Chrome download from FH cannot be automated... since it send you to another page to download chrome anyways) But... if there is ever a file that has a bunch of Beta releases in a row... I could see there being an issue with this script because it does not try to go to the next page. Other than that it is pretty great at what it is intended to do. Thanks Again! 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