/***************************************
***** Michigan-Crawler *************
****************************************
Benutzung:
AutoHotkey installieren, falls noch nicht geschehen
Script unter Michigan-Crawler.ahk speichern
Im Browser die URL-Adresse der ersten Seite finden (die gewünschte Zoom-Stufe auswählen usw)
Script starten
Die URL-Adresse eingeben (Als Default steht da das Buch "Die Musen 1813")
Den Ziel-Ordner für die Scans auswählen
Warten... Der Fortschritt kann im eingegebenen Ordner überwacht werden.
Wenn nötig, kann das Script vorzeitig gestoppt werden: Rechtsklik auf das "H"-Symbol im System Tray, "Exit" wählen.
****************************************
*/
InputBox, seite, Erste Seite eingeben, Geben Sie die URL der ersten Seite des Buches ein,,,,,,,, http://babel.hathitrust.org/cgi/m/mdp/pt?seq=5&view=image&id=mdp.39015037389668&size=400
FileSelectFolder, dest, , , Wählen Sie den Ziel-Ordner für die Scans.
Loop
{
content:=LadeHTMLSeite(seite, "Page.htm")
bildLink:=ListMitLinks(seite, content, "src=""(/cache/.*?)""", 1)
LadeBild(bildLink, dest)
seite:=ListMitLinks(seite, content, "ext \[n\]"" href=""(htt.*?)""", 1)
if ! seite
{
msgBox, Michigan-Crawler: %A_Index% Bilder runtergeladen
ExitApp
}
Sleep 5000 ; Zeitverzögerung. Gegebenenfalls anpassen: 1000 entspricht einer Sekunde.
}
LadeBild(bildPath, wohin, pattern="", replacement="")
{
;msgbox, % bildPath
bildName:=RegExReplace(bildPath, "[^\w\.]", "-")
;msgbox, % bildName
StringReplace, bildName, bildName, http---
;msgbox, % bildName
if(pattern)
bildName:=RegExReplace(bildName, pattern, replacement)
bildName:=wohin . "\" . bildName
;msgbox, % bildName
;IniWrite, %bildName%, Global.ini, Internet, amLaden
;IniWrite, 0, Global.ini, Internet, Bild_Geladen
ifNotExist, %bildName%
{
UrlDownloadToFile, %bildPath%, %bildName%
if ErrorLevel {
FileAppend, % A_Now() . " Problem beim Laden " . bildPath . "`n", % A_ScriptDir . "\LadeBild.txt"
;MsgBox ,,,Problem LadeBild %bildPath% %bildName%,1
;MsgBox ,,,Problem LadeBild,1
SoundBeep, 1000, 100
FileDelete, %bildName%
ExitApp
}
FileAppend, % A_Now() . " " . bildPath . "-->" . bildName . "`n", % A_ScriptDir . "\LadeBild.txt"
;doppelBild:=IsDupeFile(bildName)
if doppelBild
{
SoundBeep, 750, 500
FileAppend, % BildPath . " ist doppelt mit " . doppelBild . "`n", % A_ScriptDir . "\DoppelBild.txt"
}
return bildName
}
return bildName
}
LadeHTMLSeite(homepage, wohin)
{
If (Instr(homepage, "/")) ;Nur für nicht lokale Dateien
{
UrlDownloadToFile, %homepage%, %wohin%
if ErrorLevel
{
FileAppend, % A_Now() . Problem LadeHTMLSeite . homepage . "`n", % A_ScriptDir . "\LogInternetTools.txt"
;MsgBox,,, Problem LadeHTMLSeite,1
}
}
else wohin:=homepage ;Lokale Dateien direct in variable laden
FileRead, content, %wohin%
content:=RegExReplace(content, "[\r\n]", "")
content:=RegExReplace(content, "\s{2,}", " ")
return content
}
ListMitLinks(url, content, pattern, numOfMatch)
{
if ! content
content:=LadeHTMLSeite(homepage, "PageListMitLinks.htm") ; umgestiegen auf content-Variable (is besser)
if (RegExMatch(content, "i)<base\shref.+?['""](.+?)['""]>", baseAddr)>0)
{
url:=baseAddr1
}
homepage:=url
foundPos:=0
j:=1
Loop
{
foundPos:= RegExMatch(content, pattern , bild, foundPos+1)
if (foundPos==0)
{
j--
break
}
list:=list . LinkFullPath(homepage, bild%numOfMatch%) . "`n"
j++
}
if (j<1)
{
FileAppend, % A_Now() . " cannot match " . homepage . "`n", % A_ScriptDir . "\LogInternetTools.txt"
;Run, % A_ScriptDir . "\LogInternetTools.txt"
}
else
{
FileAppend, % A_Now() . " matched " . j . " sites " . homepage . "`n", % A_ScriptDir . "\LogInternetTools.txt"
}
list:=RegExReplace(list, "\s$", "")
return list
}
A_Now()
{
FormatTime, var, , HH:mm:ss dd.MM.yyyy
return var
}
LinkFullPath(domain, site)
{
if (SubStr(site, 1, 7)=="http://")
return site
site:=RegExReplace(site, "(\.\./)", "", count)
if (InStr(domain, "?"))
domain:=SubStr(domain, 1, InStr(domain, "?")-1)
if ( SubStr(site, 1, 1)=="/")
domain:=SubStr(domain, 1, InStr(domain, "/", false, 8)-1) ;ab pos 8, damit http:// nicht erkannt wird
else
domain:=SubStr(domain, 1, InStr(domain, "/", false,0))
Loop %count%
{
domain:=SubStr(domain, 1, StrLen(domain)-1)
domain:=SubStr(domain, 1, InStr(domain, "/", false, 0))
}
return domain . site
}