Automatikus letöltő script
Elősször is a lényeg: Vannak olyan oldalak, ahol a delikvens, ha ingyen akar letölteni, akkor bizonyos kényelmetlenségeket raknak az útjába. Ilyen a rapidshare, és a magyar fsx.hu is. Ez utóbbira szeretnék egy olyan scriptet csinálni, ami megkímél attól a szenvedéstől, amit az elszalasztott szálak jelentenek, végig megy egy linkekkel teli oldalon, ahol csupa fsx.hu-s link van és ezeket szépen sorjában letölti. (A http://sorozatok.co.nr-ről töltögetnék egyébként). Nah most én windowson mocorgok, és ezért, ha már fennt van alapon, a PowerShell-t használtam, ha már egyszer van .NET, akkor használjuk is...
Gyártottam is egy scriptet, ami majdnem működik. A gond csak az, hogy a második, vagy harmadik frissítésnél valamiért azt mondja nekem a szerver, hogy lecsúsztam a sorról, miközben még kb. 10 percig biztos hogy ilyen nem következhet be. Szóval közzétenném a scriptet, és ha valakinek van valami ötlete, azt szívesen várom. Tudom, hogy nem teljesen ennek az oldalnak a témája, de hátha akad valaki, aki tud segíteni.
■ Gyártottam is egy scriptet, ami majdnem működik. A gond csak az, hogy a második, vagy harmadik frissítésnél valamiért azt mondja nekem a szerver, hogy lecsúsztam a sorról, miközben még kb. 10 percig biztos hogy ilyen nem következhet be. Szóval közzétenném a scriptet, és ha valakinek van valami ötlete, azt szívesen várom. Tudom, hogy nem teljesen ennek az oldalnak a témája, de hátha akad valaki, aki tud segíteni.
$wClient = new-object System.Net.WebClient
$wClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
$index_page = $wClient.DownloadString("http://seriesfree.users.smsbase.hu/letoltes.php?id=10978");
$pattern_matches = [regex]::matches($index_page, "<a href='(.*)' target", "IgnoreCase")
foreach ($match in $pattern_matches) {
$dlURL = $match.Groups[1].value
$pm = [regex]::matches($dlURL, "http://.*/(.*)", "IgnoreCase")
$fileName = $pm[0].Groups[1].value
$wClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
$pageText = $wClient.DownloadString($dlURL)
$sID = $wClient.ResponseHeaders['Set-Cookie']
echo $sID
$wClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
$wClient.Headers.Add("cookie", $sID)
$pageText = $wClient.DownloadString("http://www.fsx.hu/download.php?i=1")
do {
$wClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
$wClient.Headers.Add("cookie", $sID)
$pageText = $wClient.DownloadString("http://www.fsx.hu/download.php?i=1")
$pm = [regex]::matches($pageText, 'elem.href \+ \"(.*)\"')
if ($pm.Length -eq 1) {
echo "You have free slot, downloading..."
$id = $pm[0].Groups[1].value
$wClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
$wClient.Headers.Add("cookie", $sID)
$wClient.DownloadFile("http://s2.fsx.hu/" + $id, $fileName)
break
}
else {
$pm = [regex]::matches($pageText, "<strong>([0-9]+)<")
# echo $pageText
$waitingUsers = $pm[0].Groups[1].value
echo "Refresh after 15sec... waiting users: $waitingUsers"
sleep 15
}
} while (1)
}
$wClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
$index_page = $wClient.DownloadString("http://seriesfree.users.smsbase.hu/letoltes.php?id=10978");
$pattern_matches = [regex]::matches($index_page, "<a href='(.*)' target", "IgnoreCase")
foreach ($match in $pattern_matches) {
$dlURL = $match.Groups[1].value
$pm = [regex]::matches($dlURL, "http://.*/(.*)", "IgnoreCase")
$fileName = $pm[0].Groups[1].value
$wClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
$pageText = $wClient.DownloadString($dlURL)
$sID = $wClient.ResponseHeaders['Set-Cookie']
echo $sID
$wClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
$wClient.Headers.Add("cookie", $sID)
$pageText = $wClient.DownloadString("http://www.fsx.hu/download.php?i=1")
do {
$wClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
$wClient.Headers.Add("cookie", $sID)
$pageText = $wClient.DownloadString("http://www.fsx.hu/download.php?i=1")
$pm = [regex]::matches($pageText, 'elem.href \+ \"(.*)\"')
if ($pm.Length -eq 1) {
echo "You have free slot, downloading..."
$id = $pm[0].Groups[1].value
$wClient.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
$wClient.Headers.Add("cookie", $sID)
$wClient.DownloadFile("http://s2.fsx.hu/" + $id, $fileName)
break
}
else {
$pm = [regex]::matches($pageText, "<strong>([0-9]+)<")
# echo $pageText
$waitingUsers = $pm[0].Groups[1].value
echo "Refresh after 15sec... waiting users: $waitingUsers"
sleep 15
}
} while (1)
}
Hogy állsz?
Ötlet van, bőven
Üdv: Chamea
Megoldottam
-Megfelelően kezeleni a Referer headert
-mindíg miután lekérdezed a $dlURL vagy a "download.php" címet, utána le kell kérdezni a /img/bg0.gif-et.(mintha betöltenéd az oldalt) A bg0.gif "cache"-elése le van tiltva.
-Ez nem derül ki a kódodból számomra, de érdemes keep-alive kapcsolódást használni.
Update:
Az oldalt újra design-olták. bg0.gif már nem játszik. Helyette nincs más. Érdekel még valakit?