InetGet passt ned richtig ?!

09/02/2012 20:06 Benjihz#1
Huhu,
Code:
$download = InputBox ("AdminPanal", "Was wollen sie downloaden?")

If $download = "testdatei1.txt" Then
	InetGet ( "https://rapidshare.com/files/47496018/testdatei1.txt", "testdatei1.txt" )


EndIf
Hier in der .txt sollte eigentlich testdatei1 drinne stehen, aber wenn man die Datei durch das Script runterlädt, dann steht das hier in der .txt.

Quote:
<script type="text/javascript">location="https://rapidshare.com/#!download|366p1|47496018|testdatei1.txt|0|0|0";</script>
Warum & wie kann ich das beheben ?
09/02/2012 20:57 lolkop#2
Quote:
Originally Posted by xKnixXeD View Post
Huhu,
Code:
$download = InputBox ("AdminPanal", "Was wollen sie downloaden?")

If $download = "testdatei1.txt" Then
	InetGet ( "https://rapidshare.com/files/47496018/testdatei1.txt", "testdatei1.txt" )


EndIf
Hier in der .txt sollte eigentlich testdatei1 drinne stehen, aber wenn man die Datei durch das Script runterlädt, dann steht das hier in der .txt.



Warum & wie kann ich das beheben ?
rapidshare bietet keine direkt downloads an...
09/02/2012 21:00 Benjihz#3
Achsooo.. o.O
Welche Seite bietet das denn zb an ?
09/02/2012 21:36 lolkop#4
Quote:
Originally Posted by xKnixXeD View Post
Achsooo.. o.O
Welche Seite bietet das denn zb an ?
jeder beliebige webspace...

alle one-click-hoster haben die eigenschaft, das mindestens ein klick nötig ist, zum downloaden/uploaden
09/02/2012 23:47 Logtetsch#5
Du kannst dir einen Webspace, wie zum Beispiel bei Kili.de, zulegen. Benutze schon seit ca. 1 Jahr meinen FTP-Server bei Kilu und kann mich nicht beklagen.

Gebe dir hier gleich mal eine Download Funktion mit. Hatte diese mal aus Langeweile gescripted. Die Funktion nennt sich _Update, weil diese eigentlich für meine Bot´s gedacht war.


Ist noch etwas ausbaufährig was die Abfragen betrifft, aber an sich sollte diese Funktion ihre Aufgabe gut erfüllen.
Achja, bevor ich noch von jemand besimmten angepöbelt werde, die Idee mit der Progressbar kam von KDeluxe´s UDF.
09/03/2012 00:25 KDeluxe#6
Die UDF habe ich nur bei deinem Scripts verwendet, sollte daher niemand kennen.

Allerdings stell ich mir schon die Frage, warum du es verschlimmbessert hast. Den Download sollte man z. B. erst nach der Prüfung der Dateigröße starten.


09/03/2012 07:33 Benjihz#7
Wie kann ich es dann schaffen, das das Script Zugang erhält ?
Weil zum ftp gibts ja eig immer ein Password.. :S
09/03/2012 15:58 Logtetsch#8
Nunja, ich hab ja deine UDF nicht 1:1 nachgescriptet, sonst hätte es ja keinen Sinn. Ich hatte selbst den Drang mir eine eigene zu coden. Allerdings kam die Idee mit der Progressbar besser. Wie ich bereits gesagt habe, kann man die Abfragen nach belieben ändern bzw. verbessern. Ob nun die Dateigröße während dem Downloaden, oder vor dem Downloaden, angezeigt wird, spielt doch letzendlich keine Rolle. Die Funktion an sich sollte klappen ;)

Einen Zugang braucht man nicht unbedingt. Durch ein .php oder ein .html Dokument sollte es auch funktionieren.

#.html Dokument auf dem FTP Server
Code:
<Version>1.0</Version>
#.au3 Code
Code:
Global $myVersion = "0.9"

Local $Site = "http://www.ftpserver.de/Version.html"
Local $Info = BinaryToString (InetRead( $Site ))
Local $newVersion = _StringBetween ($Info, "<Version>","</Version>")

if IsArray ($newVersion) Then
	if $newVersion[0] <> Then
		_Update (....)
	EndIf
EndIf
09/03/2012 18:06 KDeluxe#9
Die Downloadgröße wird vor dem Download in beiden Scripts nicht "angezeigt". In deinem Script wird die Abfrage schlichtweg nicht optimal genutzt. Die Zeile mit FileDelete() hat in deinem Script ebenfalls nichts zu suchen. Theoretisch könnte die Zeile dafür verantwortlich sein, dass die Datei nach dem Download sofort wieder gelöscht wird und somit nicht "weiterverarbeitet" werden kann. Wobei du die Ressourcen nie freigibst, wodurch der Zugriff zum Löschen verweigert werden kann. Eine zweimalige Abfrage für exakt das selbe (IsArray) ist ebenfalls unnötig und unperformant. "Sollte" ist nicht ausreichend.

Mal zur eigentlichen Frage zurück, in der Hilfe steht die Antwort:
Quote:
Originally Posted by F1-Hilfe
To use a username and password when connecting simply prefix the servername with "username:password@", e.g.
"http://myuser:[Only registered and activated users can see links. Click Here To Register...]"
Die Versionsüberprüfung wäre auch in einer Zeile lösbar:
Code:
$LocalVersion = "1.0"

$Source = BinaryToString(InetRead("http://www.somesite.com/path/version.html"))
$CurrentVersion = _StringBetween($Source, "<version>", "</version>")

If IsArray($CurrentVersion) And $CurrentVersion[0] <> $LocalVersion Then _Update()
09/03/2012 18:28 Benjihz#10
[IMG][Only registered and activated users can see links. Click Here To Register...][/IMG]

Läuft soweit alles, nur wenn ich die MsgBox bestätige, dann kommt die Datei einfach ned in den Ordner wo mein Script liegt.. ?!
09/03/2012 23:03 Logtetsch#11
Nun, wie ich schon gesagt hatte, ist diese Funktion ausbaufähig. Ich zieh mich vorsichtshalber etwas zurück.

Zum eigentlichen Thema. Versuch es mal so:
Code:
$hDownload = InetGet ($url, $fileName, 1+8, 1)

While True
	$szInfo = InetGetInfo ($hDownload)
	if IsArray ($szInfo) And $szInfo[2] = True Then
		MsgBox (64,"Download","Download wurde beendet!")
		ExitLoop
	EndIf
WEnd
09/03/2012 23:53 KDeluxe#12
Was man (fast) immer machen kann: @error abfragen.

Weshalb probierst du es überhaupt per FTP? Hat doch hier überhaupt keinen Nutzen.

Relativ einfach gelöst:
Code:
$SaveFile = @ScriptDir & "\Bla.txt"
$FileName = InputBox("Download", "Dateiname:", "testdatei1.txt")
If $FileName <> "" Then
	For $i = 1 To 5
		If $FileName = "testdatei" & $i & ".txt" Then
			If FileExists($SaveFile) Then FileDelete($SaveFile)

			InetGet("http://knixxed.kn.funpic.de/Dowmloader/" & $FileName, $SaveFile, 1)
			If @error Then MsgBox(32, "Fehler", '"' & $FileName & '" konnte nicht heruntergeladen werden!')

			MsgBox(64, "Info", '"' & $FileName & '" wurde unter' & @LF & @LF & '"' & $SaveFile & '"' & @LF & @LF & "gespeichert.")
			Exit
		EndIf
	Next

	MsgBox(32, "Fehler", '"' & $FileName & '" ist nicht auf dem Server vorhanden!')
Else
	MsgBox(32, "Fehler", "Es wurde kein gültiger Dateiname angegeben!")
EndIf
09/04/2012 14:38 Benjihz#13
Quote:
Originally Posted by KDeluxe View Post
Was man (fast) immer machen kann: @error abfragen.

Weshalb probierst du es überhaupt per FTP? Hat doch hier überhaupt keinen Nutzen.

Relativ einfach gelöst:
Code:
$SaveFile = @ScriptDir & "\Bla.txt"
$FileName = InputBox("Download", "Dateiname:", "testdatei1.txt")
If $FileName <> "" Then
	For $i = 1 To 5
		If $FileName = "testdatei" & $i & ".txt" Then
			If FileExists($SaveFile) Then FileDelete($SaveFile)

			InetGet("http://knixxed.kn.funpic.de/Dowmloader/" & $FileName, $SaveFile, 1)
			If @error Then MsgBox(32, "Fehler", '"' & $FileName & '" konnte nicht heruntergeladen werden!')

			MsgBox(64, "Info", '"' & $FileName & '" wurde unter' & @LF & @LF & '"' & $SaveFile & '"' & @LF & @LF & "gespeichert.")
			Exit
		EndIf
	Next

	MsgBox(32, "Fehler", '"' & $FileName & '" ist nicht auf dem Server vorhanden!')
Else
	MsgBox(32, "Fehler", "Es wurde kein gültiger Dateiname angegeben!")
EndIf
Warum ? Weil es sone Art Selbsttest ist/war.

Meine Frage is jetzt warum man da soviel drum herum machen muss, er soll ja einfach nur die Dateien von dem ftp runterladen ?
09/04/2012 17:10 Logtetsch#14
Muss man nicht, aber es ist angemessen. So kann man einfache Fehler vermeiden. Allerdings gilt KDeluxe´s Methode nur für die ersten fünf bzw. überhaupt nur für die Dateien, die den Namen "testdatei" entsprechen. So ist man unflexibel. Eine vielleicht etwas einfachere Variante wäre dann wohl diese:

Code:
#include <String.au3>

Local $DownloadUrl = "Downloadurlauseinemftpserver"
Local $url = "deinhtmldokument"
Local $szData = BinaryToString (InetRead ($url))
Local $szUserDownloadPanel = _StringBetween ($szData, "<Dokumente>", "</Dokumente>")

Global $szDocument, $hStatus = 0

if IsArray ($szUserDownloadPanel) And $szUserDownloadPanel[0] <> "" Then
	$szDocument = StringSplit($szUserDownloadPanel[0], "|")
	if IsArray ($szDocument) Then
		Local $hInput = InputBox ("Datei","Geben Sie einen Dateinamen ein!")
		if $hInput <> "" Then
			For $i = 0 to UBound ($szDocument)
				if $hInput = $szDocument[$i] Then
					$hStatus = 1
					ExitLoop
				Else
					MsgBox (46,"Fehler","Datei konnte nicht gefunden werden, oder Sie haben nicht die benötigte Rechte!", 5)
					Exit
				EndIf
			Next
			Local $hDownload = InetGet ($DownloadUrl, $FileName, 1+8, 1)
			if not @error Then
				While True
					Local $szDownloadInfo = InetGetInfo ($hDownload)
					if IsArray ($szDownloadInfo) and $szDownloadInfo[2] = True Then
						MsgBox (64,"Info","Download wurde erfolgreich abgeschlossen!")
						Exit
					EndIf
				WEnd
			EndIf
		EndIf
	EndIf
EndIf
Das musst du natürlich ebenfalls mit einem .html Dokument verknüfpen. Es gibt noch weite Möglichkeiten, habe aber momentan wenig Zeit (wegen meiner Ausbildung), um diese aufzuzählen bzw. zeigen. Habe das ganze auf die schnelle gemacht, deshalb hoffe ich, dass es keine Fehler gibt :)

Achja, das ganze sollte inetwa so aussehen. #.html Dokumet
Code:
<Dokumente>Datei1.txt|Datei2.txt|blödsinn.txt|pipapo.txt|binNunflexibel.exe</Dokumente>
So kannst du bestimmen, was User downloaden können und was nicht.
09/04/2012 17:29 Benjihz#15
Noch mehr Text.. :S
Mir sieht das da alles ziemlich komplex aus, kann man das auch sonst ziemlich einfach machen ?
Weil sonst muss ich mich davor jetzt noch n parr Tage mit For Schleifen & dem ganzem anderem Zeug beschäftigen..