 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Obi-Wahn
Anmeldedatum: 19.04.2006 Beiträge: 729 Wohnort: Wien
|
Verfasst am: Mo Jan 15, 2007 11:20 am Titel: Download Youtube Videos (Pure AHK Solution) |
|
|
Hab ich vor geraumer Zeit gebastelt.
Meine erste funktionierende Funktion.
Dient, wie der Topicname schon sagt, zum downloaden von YouTube Videos.
| Code: | ; Beispiel
#Include urlc.youtube.ahk
Inputbox, URL, URL eingeben, Bitte geben Sie die URL des zu downloadenden Videos ein:, , 250, 125
If Errorlevel
ExitApp
DLTOPATH = site.youtube.tmp
URLDownloadToFile, %URL%, %DLTOPATH%
Sleep, 5000
URL := URLCreatorYouTube(DLTOPATH)
MsgBox, , Info, Der Downloadpfad lautet:`n%URL%`nVideoID: %VID%`nTrackID: %TID%
ExitApp |
| Code: | ; Funktion urlc.youtube.ahk (urlc steht für URLCreator)
URLCreatorYouTube(SourcePath)
{
Global VID,TID,URL ; Deffiniert die TrackID, VideoID und URL-Variable als Global
Loop, Read, %SourcePath%
{
If NAME =
{
IfInString, A_LoopReadLine, <title>
{
StringMid, NAME_TMP, A_LoopReadLine, 19
StringTrimRight, NAME, NAME_TMP, 8
}
Else
{
IfNotInString, A_LoopReadLine, </head>
Goto, Name_Ready
Else
{
InputBox, NAME, Videoname, Videonamen eingeben:`n(Ohne Endung), , 250, 130
If ErrorLevel
{
MsgBox, 64, Abbruch, Die Aktion wurde abgebrochen.
FileDelete, %SourcePath%
ExitApp
}
}
}
}
Name_Ready:
IfInString, A_LoopReadLine, player2.swf
{
StringSplit, ID, A_LoopReadLine, =
StringTrimRight, VID, ID3, 2
StringLen, Length, ID5
If Length > 40
{
StringSplit, TID, ID5, "
TID = %TID1%
}
Else
{
StringTrimRight, TID, ID5, 2
}
}
}
URL = http://www.youtube.com/get_video?video_id=%VID%&t=%TID%
Return %URL%
} |
Ich hoffe dass die dies Brauchen können auch was damit anfangen können.
na Gut, weil ich nicht so bin, die Funktion ist von dem Tool von mir ausgegliedert. ( Hier noch integriert)
| Code: | ;
; AutoHotkey Version: 1.0.46.00
; Language: German
; Version: 4.1.0
; OperatingSystem: WinAll
; Author: Andreas "Obi-Wahn" Kanobel (www.obi-wahn.net.tc) <andreas.kanobel@gmail.com>
;
; Script Function: Code zum downloaden von YouTube-Videos.
; Werden als FlashVideo (.flv) abgespeichert.
;
#NoEnv ; Empfohlen zur Steigerung und der Kompatibilität mit zukünftigen AutoHotkey Releases.
SendMode Input ; Empfohlen für neue Skripts zur Steigerung der Geschwindigkeit und der Stabilität.
#SingleInstance force ; Empfohlen für die Entwicklungsphase
#Include dlfilesize.ahk
DLTOPATH = %WinDir%\site.youtube.tmp
Start:
InputBox, SITE, Video-URL, YouTube-URL eingeben:, , 250, 115
If ErrorLevel
{
MsgBox, 16, Abbruch, Die Aktion wurde abgebrochen
FileDelete, %DLTOPATH%
ExitApp
}
IfNotExist, %DLTOPATH%
{
SITESIZE := HttpQueryInfo(SITE, 5)
URLDownloadToFile, *0 %SITE%, %DLTOPATH%
Loop, %DLTOPATH%
{
If A_LoopFileSize = %SITESIZE%
{
Sleep, 500
GoTo, Next
}
}
}
Next:
Loop, Read, %DLTOPATH%
{
If NAME =
{
IfInString, A_LoopReadLine, <title>
{
StringMid, NAME_TMP, A_LoopReadLine, 19
StringTrimRight, NAME, NAME_TMP, 8
}
Else
{
IfNotInString, A_LoopReadLine, </head>
Goto, Name_Ready
Else
{
InputBox, NAME, Videoname, Videonamen eingeben:`n(Ohne Endung), , 250, 130
If ErrorLevel
{
MsgBox, 64, Abbruch, Die Aktion wurde abgebrochen.
FileDelete, %DLTOPATH%
ExitApp
}
}
}
}
Name_Ready:
IfInString, A_LoopReadLine, player2.swf
{
StringSplit, ID, A_LoopReadLine, =
StringTrimRight, VID, ID3, 2
StringLen, Length, ID5
If Length > 40
{
StringSplit, TID, ID5, "
TID = %TID1%
}
Else
{
StringTrimRight, TID, ID5, 2
}
URL = http://www.youtube.com/get_video?video_id=%VID%&t=%TID% ; Download URL eines jeden Videos.
SIZE := HttpQueryInfo(URL, 5) ; Prüft die Dateigröße
Gui, Add, ListView, x6 y7 w600 h110 gDownload Readonly -WantF2 Grid, Bezeichnung|Daten
LV_Add("", "Video Name", NAME)
LV_Add("", "Videogröße (KB)", SIZE)
LV_Add("", "Video ID", VID)
LV_Add("", "Track ID", TID)
LV_Add("", "Download URL", URL)
LV_ModifyCol()
LV_ModifyCol(2)
Gui, Add, Button, x190 y127 w120 h20 , OK
Gui, Add, Button, x320 y127 w120 h20 , Abbrechen
Gui, Show, Center h155 w610, Video-Informationen bestätigen
Return
}
Else
{
IfInString, A_LoopReadLine, </html>
{
MsgBox, 21, Fehler, Es konnte kein Downloadpfad`ngeneriert werden.
IfMsgBox, Retry
{
FileDelete, %DLTOPATH%
Goto, Start
}
Else
{
FileDelete, %DLTOPATH%
ExitApp
}
}
}
}
ButtonOK:
Sleep, 250
Gui, Minimize
IfExist, %NAME%.flv
InputBox, NAME, Video existiert bereits, Neuen Videonamen eingeben:`n(Ohne Endung), , 250, 130
If SIZE in timeout,0
{
RunWait, %A_Programfiles%\Internet Explorer\iexplore.exe %URL%
FileDelete, %DLTOPATH%
ExitApp
}
Else
{
URLDownloadToFile, %URL%, %NAME%.flv
Loop, %NAME%.flv
{
If A_LoopFileSize = %SIZE%
{
Sleep, 500
MsgBox, 64, Download komplett, Der Download wurde abgeschlossen.`nEs wurde das Video %NAME% heruntergeladen., 3
FileDelete, %DLTOPATH%
ExitApp
}
}
}
Return
ButtonAbbrechen:
ExitApp
Download:
If A_GuiEvent = DoubleClick
{
LV_GetText(URL_CHK, 5, 1)
If URL_CHK = Download URL
{
IfExist, %NAME%.flv
InputBox, NAME, Video existiert bereits, Neuen Videonamen eingeben:`n(Ohne Endung), , 250, 130
If SIZE in timeout,0
{
RunWait, %A_Programfiles%\Internet Explorer\iexplore.exe %URL%
FileDelete, %DLTOPATH%
ExitApp
}
Else
{
Sleep, 250
Gui, Minimize
URLDownloadToFile, %URL%, %NAME%.flv
Loop, %NAME%.flv
{
If A_LoopFileSize = %SIZE%
{
Sleep, 500
MsgBox, 64, Download komplett, Der Download wurde abgeschlossen.`nEs wurde das Video %NAME% heruntergeladen., 3
FileDelete, %DLTOPATH%
ExitApp
}
}
}
}
}
|
Benötigte funktion zum ermitteln der zu downloadenden Dateigröße:
| Code: | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HttpQueryInfo ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;QueryInfoFlag:
;
;HTTP_QUERY_RAW_HEADERS = 21
;Receives all the headers returned by the server.
;Each header is terminated by "\0". An additional "\0" terminates the list of headers.
;
;HTTP_QUERY_CONTENT_LENGTH = 5
;Retrieves the size of the resource, in bytes.
;
;HTTP_QUERY_CONTENT_TYPE = 1
;Receives the content type of the resource (such as text/html).
;
;Find more at: http://msdn.microsoft.com/library/en-us/wininet/wininet/query_info_flags.asp
;
;Proxy Settings:
;
;INTERNET_OPEN_TYPE_PRECONFIG 0 // use registry configuration
;INTERNET_OPEN_TYPE_DIRECT 1 // direct to net
;INTERNET_OPEN_TYPE_PROXY 3 // via named proxy
;INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 // prevent using java/script/INS
;
; Examples:
; url1 = http://www.autohotkey.com
; url2 = http://www.autohotkey.com/download/AutoHotkeyInstall.exe
; MsgBox % HttpQueryInfo(url1)
; MsgBox % HttpQueryInfo(url2, 5)
; MsgBox % HttpQueryInfo(url2, 1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HttpQueryInfo(URL, QueryInfoFlag=21, Proxy="", ProxyBypass="") {
hModule := DllCall("LoadLibrary", "str", "wininet.dll")
If (Proxy != "")
AccessType=3
Else
AccessType=1
io_hInternet := DllCall("wininet\InternetOpenA"
, "str", "" ;lpszAgent
, "uint", AccessType
, "str", Proxy
, "str", ProxyBypass
, "uint", 0) ;dwFlags
If (ErrorLevel != 0 or io_hInternet = 0) {
DllCall("FreeLibrary", "uint", hModule)
return, -1
}
iou_hInternet := DllCall("wininet\InternetOpenUrlA"
, "uint", io_hInternet
, "str", url
, "str", "" ;lpszHeaders
, "uint", 0 ;dwHeadersLength
, "uint", 0x80000000 ;dwFlags: INTERNET_FLAG_RELOAD = 0x80000000 // retrieve the original item
, "uint", 0) ;dwContext
If (ErrorLevel != 0 or iou_hInternet = 0) {
DllCall("FreeLibrary", "uint", hModule)
return, -1
}
VarSetCapacity(buffer, 1024, 0)
VarSetCapacity(buffer_len, 4, 0)
Loop, 5
{
hqi := DllCall("wininet\HttpQueryInfoA"
, "uint", iou_hInternet
, "uint", QueryInfoFlag ;dwInfoLevel
, "uint", &buffer
, "uint", &buffer_len
, "uint", 0) ;lpdwIndex
If (hqi = 1) {
hqi=success
break
}
}
IfNotEqual, hqi, success, SetEnv, res, timeout
If (hqi = "success") {
p := &buffer
Loop
{
l := DllCall("lstrlen", "UInt", p)
VarSetCapacity(tmp_var, l+1, 0)
DllCall("lstrcpy", "Str", tmp_var, "UInt", p)
p += l + 1
res := res . "`n" . tmp_var
If (*p = 0)
Break
}
StringTrimLeft, res, res, 1
}
DllCall("wininet\InternetCloseHandle", "uint", iou_hInternet)
DllCall("wininet\InternetCloseHandle", "uint", io_hInternet)
DllCall("FreeLibrary", "uint", hModule)
return, res
}
|
Viel spaß noch....
MfG
Obi-Wahn _________________ Garten ist eine Kunstnatur
Das Leben ist nicht fair. Es ist nur fairer als der Tod, das ist alles.
Obi-Wahns Codeschnipsel @ securityvision.ch |
|
| Nach oben |
|
 |
BoBo Gast
|
Verfasst am: Mo Jan 15, 2007 12:33 pm Titel: |
|
|
Btw. macht evtl, Sinn es mit garry's Script aus der S&F Sektion (US/UK) abzugleichen. Dort hat(te) Titan eine RegEx Lösung zum Extrahieren des .flv-Pfads beigesteuert.
Merci fürs 'Scheeren' des Scripts.  |
|
| Nach oben |
|
 |
Obi-Wahn
Anmeldedatum: 19.04.2006 Beiträge: 729 Wohnort: Wien
|
Verfasst am: Mo Jan 15, 2007 1:04 pm Titel: |
|
|
THX und NP Bobo.
Ich hab zwar Titans Script gesehen, aber es ging mir eher ums Selbstmachen.
btw kenn ich mich mit Titans Script nicht so aus, dh. hab ich was geschrieben was ich jederzeit ohne viel nachdenken rekonstruieren kann.
Aber zur komplettheit poste ich hier mal Titans Script, in einer Abwandlung von mir (habs in ne Funktion umgewandelt)
| Code: | video = http://www.youtube.com/watch?v=7ss41lkJFZc
DownloadVideoURL := YTDownloadURL(video)
MsgBox, 64, Info, Download URL lautet:`n`n%DownloadVideoURL%
Return
YTDownloadURL(URL)
{
RegExMatch(url, "v=(\w+)", v)
UrlDownloadToFile, %URL%, %A_Temp%\urlc.youtube.temp
FileRead, Temp, %A_Temp%\urlc.youtube.temp
s := RegExMatch(Temp, "&t=(.+?)&", t)
RegExMatch(tf, "&l=(.+?)&", l, s - 25)
durl = http://www.youtube.com/get_video?video_id=%v1%&t=%t1%
Return, %durl%
} |
MfG
Obi-Wahn _________________ Garten ist eine Kunstnatur
Das Leben ist nicht fair. Es ist nur fairer als der Tod, das ist alles.
Obi-Wahns Codeschnipsel @ securityvision.ch |
|
| Nach oben |
|
 |
garry
Anmeldedatum: 25.10.2005 Beiträge: 437 Wohnort: switzerland
|
Verfasst am: Mo Jan 15, 2007 6:33 pm Titel: |
|
|
super, das mit den DllCall und RegEx begreife ich nicht
hatte lediglich mit den Tipps von BoBo und Titan die Adresse angesteuert
in deinem script sieht man die Filegrösse
kann man dies immer machen mit urldownloadtofile dass man die Filegrösse vor dem download sieht ?
man könnte ein progress-bar erstellen mit filegetsize |
|
| Nach oben |
|
 |
Obi-Wahn
Anmeldedatum: 19.04.2006 Beiträge: 729 Wohnort: Wien
|
Verfasst am: Di Jan 16, 2007 6:39 pm Titel: |
|
|
Hi!
@garry: Nö, nicht mit Urldownloadtofile. die Funktion vom ersten post (die mit dem englischen text, mit HTTPQuery kann das aber.
Einfach einbaun und mit
| Code: | #Include dlfilesize.ahk
URL = http://wasweisich.com/unddieanderedatei.exe
SIZE := HttpQueryInfo(URL, 5)
MsgBox, 64, Info, Dateigröße = %SIZE% Byte |
@all:
Ist das nur bei mir so, oder ändert sich bei Titans funktion immer der downloadpfad?
MFG
Obi-Wahn _________________ Garten ist eine Kunstnatur
Das Leben ist nicht fair. Es ist nur fairer als der Tod, das ist alles.
Obi-Wahns Codeschnipsel @ securityvision.ch |
|
| Nach oben |
|
 |
automaticman
Anmeldedatum: 16.01.2007 Beiträge: 10
|
Verfasst am: Mi Jan 17, 2007 10:15 am Titel: |
|
|
Wo ist
#Include dlfilesize.ahk
? |
|
| Nach oben |
|
 |
BoBo Gast
|
Verfasst am: Mi Jan 17, 2007 10:19 am Titel: |
|
|
Genau!  |
|
| Nach oben |
|
 |
Obi-Wahn
Anmeldedatum: 19.04.2006 Beiträge: 729 Wohnort: Wien
|
Verfasst am: Mi Jan 17, 2007 4:49 pm Titel: |
|
|
Klar im vorteil ist, wer lesen kann...
| Zitat: | | ...die Funktion vom ersten post (die mit dem englischen text, mit HTTPQuery kann das aber |
Die hier: (heisst: dlfilesize.ahk)
| Code: | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HttpQueryInfo ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;QueryInfoFlag:
;
;HTTP_QUERY_RAW_HEADERS = 21
;Receives all the headers returned by the server.
;Each header is terminated by "\0". An additional "\0" terminates the list of headers.
;
;HTTP_QUERY_CONTENT_LENGTH = 5
;Retrieves the size of the resource, in bytes.
;
;HTTP_QUERY_CONTENT_TYPE = 1
;Receives the content type of the resource (such as text/html).
;
;Find more at: http://msdn.microsoft.com/library/en-us/wininet/wininet/query_info_flags.asp
;
;Proxy Settings:
;
;INTERNET_OPEN_TYPE_PRECONFIG 0 // use registry configuration
;INTERNET_OPEN_TYPE_DIRECT 1 // direct to net
;INTERNET_OPEN_TYPE_PROXY 3 // via named proxy
;INTERNET_OPEN_TYPE_PRECONFIG_WITH_NO_AUTOPROXY 4 // prevent using java/script/INS
;
; Examples:
; url1 = http://www.autohotkey.com
; url2 = http://www.autohotkey.com/download/AutoHotkeyInstall.exe
; MsgBox % HttpQueryInfo(url1)
; MsgBox % HttpQueryInfo(url2, 5)
; MsgBox % HttpQueryInfo(url2, 1)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
HttpQueryInfo(URL, QueryInfoFlag=21, Proxy="", ProxyBypass="") {
hModule := DllCall("LoadLibrary", "str", "wininet.dll")
If (Proxy != "")
AccessType=3
Else
AccessType=1
io_hInternet := DllCall("wininet\InternetOpenA"
, "str", "" ;lpszAgent
, "uint", AccessType
, "str", Proxy
, "str", ProxyBypass
, "uint", 0) ;dwFlags
If (ErrorLevel != 0 or io_hInternet = 0) {
DllCall("FreeLibrary", "uint", hModule)
return, -1
}
iou_hInternet := DllCall("wininet\InternetOpenUrlA"
, "uint", io_hInternet
, "str", url
, "str", "" ;lpszHeaders
, "uint", 0 ;dwHeadersLength
, "uint", 0x80000000 ;dwFlags: INTERNET_FLAG_RELOAD = 0x80000000 // retrieve the original item
, "uint", 0) ;dwContext
If (ErrorLevel != 0 or iou_hInternet = 0) {
DllCall("FreeLibrary", "uint", hModule)
return, -1
}
VarSetCapacity(buffer, 1024, 0)
VarSetCapacity(buffer_len, 4, 0)
Loop, 5
{
hqi := DllCall("wininet\HttpQueryInfoA"
, "uint", iou_hInternet
, "uint", QueryInfoFlag ;dwInfoLevel
, "uint", &buffer
, "uint", &buffer_len
, "uint", 0) ;lpdwIndex
If (hqi = 1) {
hqi=success
break
}
}
IfNotEqual, hqi, success, SetEnv, res, timeout
If (hqi = "success") {
p := &buffer
Loop
{
l := DllCall("lstrlen", "UInt", p)
VarSetCapacity(tmp_var, l+1, 0)
DllCall("lstrcpy", "Str", tmp_var, "UInt", p)
p += l + 1
res := res . "`n" . tmp_var
If (*p = 0)
Break
}
StringTrimLeft, res, res, 1
}
DllCall("wininet\InternetCloseHandle", "uint", iou_hInternet)
DllCall("wininet\InternetCloseHandle", "uint", io_hInternet)
DllCall("FreeLibrary", "uint", hModule)
return, res
} |
mfg
o-w _________________ Garten ist eine Kunstnatur
Das Leben ist nicht fair. Es ist nur fairer als der Tod, das ist alles.
Obi-Wahns Codeschnipsel @ securityvision.ch |
|
| Nach oben |
|
 |
Gast
|
Verfasst am: So Feb 04, 2007 8:03 pm Titel: Download Youtube Videos funktioniert bei mir nicht |
|
|
Hallo,
die aus dem "Download Youtube Videos (Pure AHK Solution)" kopierte ahk-Datei funkioniert nur bis zu einem gewissen Punkt. Wenn ich die ahk-Datei starte, bekomme ich die Aufforderung "Video-URL, YouTube-URL eingeben". Wenn ich dann z. B. "http://www.youtube.com/watch?v=3CqbAyPx_uk" reinkopiere, gehts zu "Video-Informationen bestätigen". Nach dem Bestätigen mit "OK" wird die Messagebox lediglich zum Symbol - mehr passiert leider nicht. Habe ich da etwas falsch gemacht?
Noch eine zweite Frage: würde das auch mit z. B. "http://www.youporn.com/" funktionieren?
Danke im voraus |
|
| Nach oben |
|
 |
Obi-Wahn
Anmeldedatum: 19.04.2006 Beiträge: 729 Wohnort: Wien
|
Verfasst am: Mo Feb 05, 2007 7:49 am Titel: |
|
|
Hi!
Das ist schon korrekt so. Ich hab mich bisher noch nicht mit statusboxen beschäftigt, als ich dieses Script schrieb.
Das Script wird gestartet, dann die URL eingegeben und danach minimiert sich das script. Das Video wird aber gleichzeitig heruntergeladen, das Script beendet sich nacher selbst.
Zu Youporn: Möglichweise. Einfach mal ausprobieren. Wenn nicht, dann ist ein anderer Aufbau als bei YouTube gegeben. Dann müsste man den quellcode abändern...
Mfg
O-W _________________ Garten ist eine Kunstnatur
Das Leben ist nicht fair. Es ist nur fairer als der Tod, das ist alles.
Obi-Wahns Codeschnipsel @ securityvision.ch |
|
| Nach oben |
|
 |
Gast
|
Verfasst am: Mo Feb 05, 2007 1:24 pm Titel: |
|
|
Hallo Obi-Wahn,
stimmt. Hat doch irgendwie gefunzt - wird als *.flv - file gespeichert!
Jedoch das nächste Problem: wie startet man eine *.flv?
Nochmals danke im voraus
Lord Steven |
|
| Nach oben |
|
 |
BoBo Gast
|
Verfasst am: Mo Feb 05, 2007 2:26 pm Titel: |
|
|
| Zitat: | | Jedoch das nächste Problem: wie startet man eine *.flv? | Wie jede andere Datei. Google nach "Flash Player" .. |
|
| Nach oben |
|
 |
Obi-Wahn
Anmeldedatum: 19.04.2006 Beiträge: 729 Wohnort: Wien
|
Verfasst am: Mo Feb 05, 2007 2:35 pm Titel: |
|
|
FLV's sind FLashVideos. Um sie abzuspielen braucht man einen Flash-Videoplayer.
RIVA (HIER DER LINK MIT DEM ENCODER) bietet einen Player und auch einen Encoder (Link) der den player gleich beinhaltet zum konvertieren in .mpg. _________________ Garten ist eine Kunstnatur
Das Leben ist nicht fair. Es ist nur fairer als der Tod, das ist alles.
Obi-Wahns Codeschnipsel @ securityvision.ch |
|
| Nach oben |
|
 |
garry
Anmeldedatum: 25.10.2005 Beiträge: 437 Wohnort: switzerland
|
|
| Nach oben |
|
 |
BoBo Gast
|
Verfasst am: Mo Feb 05, 2007 3:14 pm Titel: |
|
|
Nur mal kurz eingestreut für Freunde von FSK > 16 Inhalten. Es sollte klar sein das Downloads solcher Art sowieso besser manuell/gesichtet vorgenommen werden.
"Wer die Hände in den Schoss legt muss nicht untätig bleiben", hat zwar was aber automatisierte Downloads per Suche nach Schlüssel-/Neigungsbegriffen (z.B. die bekannte "rassierte Katze") bergen das Risiko das Mann/Frau ungewollt juristsch relevantes Material downloaded, und Mann/Frau den eigenen Namen anschließend sowohl in der Presse, als auch auf dem Aktendeckel eines Staatsanwaltes wiederfindet. Zu Recht, IMHO.
Might be off topic, aber ich dachte besser mal gesagt. |
|
| Nach oben |
|
 |
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten.
|
Powered by phpBB © 2001, 2005 phpBB Group Deutsche Übersetzung von phpBB.de
|