Menu

FritzLoadPluginNeu

Anonymous

Eigene Hosterplugins entwickeln

Download von einem Hoster:

1. Aus Fritzload/lib/hoster sich einen Hoster als template kopieren. Meist gibt es schon ähnliche fertig.

2. Hoster besuchen und den Ablauf durchspielen, dabei alle Seiten lokal speichern um sie auswerten zu können. Dabei darauf achten ob das Ganze auch ohne Cookies und/oder Javascript geht.

3. Anfangen das Plugin zu schreiben. Hier am Beispiel des (noch) nicht funktionierenden Oneclickhoster mediafire:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/ash
# ACHTUNG dieses Plugin funktioniert nicht, da mediafire die Links mit javascript schützt!!!
# Es zeigt aber trotzdem den generellen Ablauf eines Pluginbaus...

# vorweg kurzer Aufbau des mediafiredownloads:
# 1. url in Downloadliste sieht etwa so aus: http://www.mediafire.com/?a1bc3d5e67fg
# 2. downloadurl sieht etwa so aus: http://download203.mediafire.com/ganopmxp1s1g/a1bc3d5e67fg/test.pdf

mediafire() { #pluginname
  local filename url f=$tmp/response.htm #ein paar Variablen, in $f ist später z.B. die Serverantwort gespeichert 
# Hauptschleife, versucht wie in config-mal angegeben oft runterzuladen ($retries)
while [ $try -lt $retries ]; do
  try=$(($try+1)) #zählt die Versuche hoch

  # holt die url aus der downloadliste und lädt die Antwort in $f
  GET "$param" $f - "GET1" || { reconnect; continue; }

  # am besten geht der Aufbau wenn man das Ganze auf der Kommandozeile (Unix, MacOSX) mitspielt
  # (mit "set" kann man die Variablen auslesen)
  # bis jetzt ist filename und downloadurl unbekannt und muss nun extrahiert werden,
  # das schlimmste ist hierbei die Einarbeitung in sed... 
  # (siehe hierzu auch Beispiel weiter unten!)
  url="$(grep "Click here to start download" $f \
    | sed -n 's,.*;\" [^>]*href=\"\([^\"]*\)[^>]*> Click.*,\1,p')"  
  filename="$(echo $url | sed -e 's/http.*\///g')"

  if [ -z $url ];then #wenn url NICHT deklariert dann
    # schreibe in LOG-Ausgabe
    print "FAILED: Could not resolve download URL"
    return 1 # gib Fehler zurück
  fi

  # teste ob schonmal runtergeladen
  alreadyLoaded "$targetdir/$filename" && return

  # starte download von $url und speichere unter $filename
  if download "$url" "$filename";then
    break # wenn fertig mit runterladen breche die Hauptschleife ab
  fi
  reconnect # ggf. reconnect auslösen
done

4. Fertiges shell-file (hostername.sh) nach Fritzload/lib/hoster/ kopieren. Wichtig ist da es den selben Namen wie der Hoster trägt, damit aus den Downloadlinks der richtige Hoster dynamisch erkannt wird. Und ggf. wenn es geht in Fritzload/html/hosterlist.txt.

5. Testen und freuen. Entweder ins Forum stellen oder in den svn hochladen.

Sonstiges

An die Hosterautoren: Ihr müsst Euch genauere Gedanken machen, wann Ihr einen Reconnect unbedingt braucht, und wie Lange auf diesen Reconnect gewartet werden sollte... Im Moment wird bei irgendeinem Problem ein Reconnect ausgelöst. Man müsste anhand des Problems einen passenden Reconnect setzen (also entweder sofort: "needReconnect 0" oder mit einer Wartezeit in Minuten, falls kein Reconnect im Moment möglich ist "needReconnect 30").

Und generell, bitte den Programmcode ordentlich formatieren (Tabulatoren nur für das Einrücken verwenden und nicht als Leerzeichen missbrauchen...)

Anhang: sed

Erklärung des oben gezeigten Kommandos, hier nochmal zur Erinnerung:

url="$(grep "Click here to start download" $f | sed -n 's,.*;\" [^>]*href=\"\([^\"]*\)[^>]*> Click.*,\1,p')

Der Ausschnitt der sehr langen Zeile die grep oben findet sieht so aus:

... is starting.. ';" href="http://download203.mediafire.com/ganopmxp1s1g/nm0xmjqmgg5/test.pdf"> 
Click here to start download..</a></div> ...

das übergibt grep per pipe an sed das nun genau diesen Link extrahiert:

http://download203.mediafire.com/ganopmxp1s1g/nm0xmjqmgg5/test.pdf

Etliche Funktionen zur String Verarbeitung (oftmals per sed realisiert) finden sich in der Library: lib/util_string.sh

Im Netz sind zu sed auch viele gute Tutorials zu finden.

http://www.ostc.de/sed.pdf

http://www.faqs.org/faqs/editor-faq/sed/

http://sed.sourceforge.net/grabbag/scripts/

reCAPTCHA

Bei vielen Hostern wird zur Zeit reCAPTCHA verwendet. Deshalb liefert Fritz!Load einige Funktionen mit, die den Umgang mit reCAPTCHA vereinfachen. Sämtliche bereitgestellten Funktionen finden sich in der Library lib/captcha_service.sh

Zuerst sollte geprüft werden, ob überhaupt Captchas gelöst werden können (über die GUI oder einen der Captcha Service Dienste). Falls nicht kann der Download direkt beendet werden.

captcha_service_active || return 1

Wenn man den public_key aus der Seite ermittelt hat kann man das Captcha lösen lassen:

set_recaptcha_solution "$public_key" || continue

Sie belegt im Erfolgsfall die Variablen $CHALLENGE und $CAPTCHA_STRING mit dem Wert des "recaptcha_challenge_field" und der Lösung des Captchas "recaptcha_response_field". Falls ein Fehler bei der Lösungsermittlung auftritt, sorgt der Befehl continue dafür, dass ein neuer Dowloadversuch gestartet wird. Zu beachten ist, das die Rückgabewerte noch nicht encoded sind, für die Parameterübergabe per curl sollten daher diese Werte entsprechend encodiert werden:

recaptcha_challenge_field=$(urlencode "$CHALLENGE")&recaptcha_response_field=$(urlencode "$CAPTCHA_STRING")

Um den public_key aus dem HTML Dokument zu erhalten, gibt es folgende Funktion - sofern die oft bei den Hostern integrierte Syntax verwendet wird.

public_key=$(parse_recaptcha_challenge $f)

Es sollte nun noch mitgeteilt werden, ob das Captcha richtig gelöst wurde. Bei richtiger Lösung geht das mit

captcha_correct

und bei falscher Lösung mit

captcha_wrong

Related

Wiki: Home

Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.