ugrás a tartalomhoz

Automatikus letöltő script

saya-jin · 2008. Jan. 16. (Sze), 14.31
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.
$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)

}
 
1

Hogy állsz?

PogiG · 2008. Ápr. 5. (Szo), 09.22
Szerteném megkérdezni, hogy sikerült-e megoldanod ezt a problémát, mert engem is érdekelne, ha működik.
2

Ötlet van, bőven

Chamea · 2008. Júl. 16. (Sze), 02.45
Én általában tudok folyamatosan tölteni az fsx.hu-ról, csak 1 kis informatikai ismerethalmaz kell hozzá. Küldjetek e-mailt a kerio_455##kukac##freemail.hu-ra és leírom, hogyan.

Üdv: Chamea
3

Megoldottam

taxy · 2011. Jún. 8. (Sze), 17.47
Köszi, én python-ban újraimplementáltam a megoldásodat. 3 tipp:
-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?