imdb datenbank auslesen Topic is solved
Moderator: jNizM
Re: imdb datenbank auslesen
Yep, das stelle ich nicht in Frage. Mir ist jedoch nicht wirklich klar warum man/frau über den source-code der Seite Klimmzüge macht (es sei denn wg des Reizes einer Herausforderung), wenn der (oder alternative) Anbieter bereits eine Schnittstelle mit dem selben output explizit bereitstellt?! Anyway. IMHO sind deine Lösungen über jeden Einwand erhaben, und für mich eine stetige Wissensquelle, doch das war auch nicht der Hintergrund meiner Einlassung(en). Greetz,
Re: imdb datenbank auslesen
hallo @bobo
vielen Dank für deinen API Code und das du ihn so spät gepostet hast.
Sehr Cool! Mit spät meine ich, dass Just Me die Frage als abgehackt gelesen hätte und vielleicht nicht mit seiner Ausführung gekommen wäre.
@just me
Dir auch meinen Dank für diese tollen Zeilen
Damit habe ich alle Variablen des Json in einem Array, einfach wunderbar.
Ich muss den JSON Code händig aus dem HTML kopieren, gibt es auch eine Möglichkeit das der Script den JSON selbst findet?
Ist der Anfang des Json Codes immer so <script type="application/ld+json"> deklariert?
Dann wüsste ich gerne wo/wie die [10215376] Parent Var erzeugt wird.
Ich versuche es grade in eine für mich 'griffigere' ArrayStruktur zu bringen, das läuft ganz gut.
Die Array ist für eine Filmdatenbank gedacht, daher übergebe ich hier auch den FileName
Bei der Struktur dachte ich es etwa so:
macht das Sinn? oder hat jemand einen besseren Weg?
vielen Dank für deinen API Code und das du ihn so spät gepostet hast.
Sehr Cool! Mit spät meine ich, dass Just Me die Frage als abgehackt gelesen hätte und vielleicht nicht mit seiner Ausführung gekommen wäre.
@just me
Dir auch meinen Dank für diese tollen Zeilen
Damit habe ich alle Variablen des Json in einem Array, einfach wunderbar.
Ich muss den JSON Code händig aus dem HTML kopieren, gibt es auch eine Möglichkeit das der Script den JSON selbst findet?
Ist der Anfang des Json Codes immer so <script type="application/ld+json"> deklariert?
Dann wüsste ich gerne wo/wie die [10215376] Parent Var erzeugt wird.
Ich versuche es grade in eine für mich 'griffigere' ArrayStruktur zu bringen, das läuft ganz gut.
Die Array ist für eine Filmdatenbank gedacht, daher übergebe ich hier auch den FileName
Bei der Struktur dachte ich es etwa so:
Code: Select all
xx := "https://www.imdb.com/"
array[FileName, parent, K] := V
array[FileName, parent, K] := V
array[FileName, parent, K] := xx V
;#####################################################
array[FileName, 10215376, @type] := person
array[FileName, 10215376, name] := Keith Giffen
array[FileName, 10215376, url] := xx /name/nm0317493/
Code: Select all
Obj2Tree(Obj, Parent := 0) {
For K, V In Obj {
If IsObject(V)
{
Obj2Tree(V, TV_Add(K, Parent, "Expand"))
FileAppend, % Parent A_Tab K A_Tab V "`n", yy.txt ; test
}
Else
{
TV_Add(V, TV_Add(K, Parent, "Expand"))
FileAppend, % Parent A_Tab K A_Tab V "`n", yy.txt ; test
}
}
}
macht das Sinn? oder hat jemand einen besseren Weg?
Code: Select all
0 @context http://schema.org
0 @type Movie
10215376 @type Person
10215376 name James D'Arcy
10215376 url /name/nm0195439/
10213696 1
10215712 @type Person
10215712 name Roger Morlidge
10215712 url /name/nm0605943/
10213696 2
10214368 @type Person
10214368 name Gabrielle Anwar
10214368 url /name/nm0000270/
10213696 3
10469872 @type Person
10469872 name Vincent D'Onofrio
10469872 url /name/nm0000352/
10213696 4
10213696 actor
10470656 @type AggregateRating
10470656 bestRating 10.0
10470656 ratingCount 967
10470656 ratingValue 5.9
10470656 worstRating 1.0
10213696 aggregateRating
0 contentRating R
10468976 @type Person
10468976 name Piers Ashworth
10468976 url /name/nm0039328/
10468864 1
10470768 @type Person
10470768 name Arthur Conan Doyle
10470768 url /name/nm0236279/
10468864 2
10472864 @type Organization
10472864 url /company/co0489955/
10468864 3
10473984 @type Organization
10473984 url /company/co0073776/
10468864 4
10474768 @type Organization
10474768 url /company/co0020879/
10468864 5
10474656 @type Organization
10474656 url /company/co0086742/
10468864 6
10471408 @type Organization
10471408 url /company/co0086743/
10468864 7
10472192 @type Organization
10472192 url /company/co0006634/
10468864 8
10472752 @type Organization
10472752 url /company/co0014957/
10468864 9
0 creator
0 datePublished 2002-10-25
0 description Sherlock is a TV movie starring James D'Arcy, Roger Morlidge, and Gabrielle Anwar. Early in his crime-solving career, Sherlock Holmes attempts to prevent Moriarty from cornering the heroin market.
10603808 @type Person
10603808 name Graham Theakston
10603808 url /name/nm0857280/
0 director
0 duration PT1H40M
10604816 1 Action
10604816 2 Adventure
10604816 3 Crime
10604816 4 Drama
10604816 5 Mystery
10604816 6 Thriller
0 genre
0 image https://m.media-amazon.com/images/M/MV5BZDJkNTRjNTYtNTEyYy00M2EwLWE3MGEtNWNiYWNjODdhZTk3XkEyXkFqcGdeQXVyMTk5MjAyMjM@._V1_.jpg
0 keywords character name as title,serial murder,sherlock holmes character,professor moriarty character,dr. john watson character
0 name Sherlock
10608864 @type Review
10608192 @type Person
10608192 name RobinSisson
10608864 author
10608864 dateCreated 2004-04-10
10608864 inLanguage English
10610096 @type CreativeWork
10610096 url /title/tt0337593/
10608864 itemReviewed
10608864 name Just...bad
10608864 reviewBody I saw this movie recently with the very greatest of hopes.
I have been a Sherlock Holmes fan for as long as I can remember, so when I saw the box for this film on the shelves at my local video store, I yanked it up without even looking at the synopsis on the back. After watching the movie, I might have enjoyed the synopsis more...a LOT more.
The characters were two-dimensional and under-developed at very best: no depth at all was brought to any one of them, but for the struggling Rebecca Doyle, portrayed by Gabrielle Anwar...and in this setting, finding anything to like about her was a struggle. James D'Arcy never even saw the mark in attempting to bring humanity to the legendary Holmes; he just came off weak and vacillating in D'Arcy's hands. Vincent D'Onofrio - of whom I am an incredible fan normally, and who is notoriously known as "the Human Chameleon" for his most uncanny ability to lose himself in a role - just phoned this performance in, when I'd have loved to have seen a far more layered interpretation of this legendary bad guy. Roger Morlidge does a serviceable job of Dr. Watson, but it's just not enough.
The plot was presumptuous of far too much detail relevant to the Holmes legend to introduce such intricacies as the reasoning behind the heroin addiction suffered by he and his brother, without providing much substantive sub-plot to make it plausible...or even make us care.
The fencing battles between Holmes and Moriarty are well-executed, but only consume a cumulative twenty minutes of the film at the very most.
Writer Piers Ashworth didn't think outside the box in his creation of this "new perspective", he just created a new box and hopped right in. Director Graham Theakston didn't seem to even attempt to transcend the poor scripting with crafty, smart, or inspiring visuals.
I just didn't get it.
0 review
0 url /title/tt0337593/
Re: imdb datenbank auslesen
In meinem 'AHK omdb Abfrage'-script wird durch die Funktion URLDownloadToVar das vom Anbieter retournierte JSON in das includierte JSON.ahk geladen und als object ausgegeben. Meinst du so etwas?Ich muss den JSON Code händig aus dem HTML kopieren, gibt es auch eine Möglichkeit das der Script den JSON selbst findet?
Ist der Anfang des Json Codes immer so <script type="application/ld+json"> deklariert?
Re: imdb datenbank auslesen
Moin @effel,
in den beiden Downloads, die ich getestet habe, fand sich das JSON-Objekt unter <script type="application/ld+json"> recht nahe dem Anfang der Datei. Ich würde mich deshalb bis auf Weiteres darauf verlassen, dass man so das 'richtige' Objekt findet.
Die 10215376 Werte sind so etwas wie HWNDs, die ein Element im TreeView identifizieren. Bis auf das 0 Element werden die immer neu vergeben. Es bringt deshalb nichts, sie abzuspeichern. Das im HTML beschriebene JSON-Objekt ist ja nach dem Auslesen erst einmal nur Text. Den kannst Du direkt abspeichern und bei Bedarf wieder in ein AHK-Objekt umwandeln.
Das Auslesen des JSON per HTML-DOM erledigt das o.a.
in den beiden Downloads, die ich getestet habe, fand sich das JSON-Objekt unter <script type="application/ld+json"> recht nahe dem Anfang der Datei. Ich würde mich deshalb bis auf Weiteres darauf verlassen, dass man so das 'richtige' Objekt findet.
Die 10215376 Werte sind so etwas wie HWNDs, die ein Element im TreeView identifizieren. Bis auf das 0 Element werden die immer neu vergeben. Es bringt deshalb nichts, sie abzuspeichern. Das im HTML beschriebene JSON-Objekt ist ja nach dem Auslesen erst einmal nur Text. Den kannst Du direkt abspeichern und bei Bedarf wieder in ein AHK-Objekt umwandeln.
Das Auslesen des JSON per HTML-DOM erledigt das o.a.
Code: Select all
JSON := Doc.querySelector("script[type='application/ld+json']").innerText
Re: imdb datenbank auslesen
Hallo, ich nochmal
irgendwie will das mit den Bildern nicht synchron laufen. Die ListView bekomme ich mit Daten gefüllt, aber das mit den Bildern ist den Tag über mein Problem, daher frage ich mal nach Hilfe.
Sorry für den vielen überflüssigen Code, aber es werden je nach Film mehr oder weniger Daten zurück gegeben, das muss erstmal so bleiben.
Hallo @bobo ich habe deinem Code noch . "&plot=full" hinzugefügt. Wenn man die Anfrage immer zweimal startet, bekommt man mehr Daten.
Die kurze Variante ist keine abgeschnittene lange Version. Ich finde auch anders gefasste Texte.
omdb("tt0383164")
Ørnen, ein isländischer Inspektor der dänischen Polizei, wird zum Polizeichef einer neuen Task Force zur Aufklärung der internationalen Kriminalität ernannt. Zusammen mit einem Team talentierter und vielfältiger Ermittler bearbeitet er explosive und komplexe Fälle mit allen verfügbaren Mitteln.
Da immer mehr Verbrechen und Kriminelle Grenzen überschreiten, bildet die dänische Polizei ein internationales Kriminalpolizei-Team. Die Hälfte der isländischen "Ørnen" führt das vielfältige 6-köpfige Team. Die neueste Technologie (2004-6) wird verwendet.
Als bekennender Daten-Messi speichere ich das mal alles ab.
irgendwie will das mit den Bildern nicht synchron laufen. Die ListView bekomme ich mit Daten gefüllt, aber das mit den Bildern ist den Tag über mein Problem, daher frage ich mal nach Hilfe.
Sorry für den vielen überflüssigen Code, aber es werden je nach Film mehr oder weniger Daten zurück gegeben, das muss erstmal so bleiben.
Code: Select all
;ListView wäre besser
;ListView wäre besser
;https://www.autohotkey.com/boards/viewtopic.php?f=9&t=88450&sid=ec950572524ba9b8b32632dd9e17fdb9
#SingleInstance force
#NoEnv
SetBatchLines, -1
FileEncoding, UTF-8
;##############################
FileDelete, ViewIt3.txt
APIkey := ""
;##############################
;http://www.autohotkey.com/forum/viewtopic.php?t=43242
#Include M:\GUI Datenbank\LVA.ahk
#Include JSON.ahk
ImageArr := object()
ImageCounter := 0
Gui, New
Gui, Font, s12
Gui, +hwndHGUI +LastFound
FileDelete, rows.txt
rows = Cover|Actors|Awards|BoxOffice|Country|Director|DVD|Genre|imdbID|imdbRating|imdbVotes|Language|Metascore|Plot|Poster|Production|Rated|Released|Response|Runtime|Title|totalSeasons|Type|Website|Writer|Year
RowsArr := StrSplit(Rows,"|")
MaxRows := RowsArr.Count() ;25
FileAppend, % MaxRows "`n" rows, rows.txt
;Run, rows.txt
; Gui, Add, ListView, w1200 h800 vLV AltSubmit Grid cBlack BackgroundFFDD99, ScreenPrint|ID|Actors|Genres|PicFileVar|1|2|3|4|5|6|7|8|9|0|11|12|13|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28
Gui, Add, ListView, w1200 h800 vLV AltSubmit Grid cBlack BackgroundFFDD99, % Rows
Loop, % LV_GetCount("Columns")
LV_ModifyCol(A_Index, "AutoHdr")
LV_ModifyCol(1, 150)
imdbObj := omdb("tt0383164",,,APIkey)
Gosub Start
imdbObj := omdb("tt3896198",,,APIkey)
Gosub Start
;----------------------------------------------------------------------------------------------------
; ; Ratings " -> Objekt`n"
HIL := IL_Create()
ImgW := 150 ; Breite der Bilder
ImgH := 220 ; Höhe der Bilder
IL_SetSize(HIL, ImgW, ImgH)
For i, v in AhkObj
{
;MsgBox,,%A_LineNumber% %A_Index%, % A_Index i "`n" v "`n" AhkObj[AhkObj["imdbID"], "imdbID"]
If InStr(IconAll, AhkObj[AhkObj["imdbID"], "imdbID"])
Continue
UrlDownLoadToFile, % AhkObj[AhkObj["imdbID"], "Poster"], % AhkObj[AhkObj["imdbID"], "imdbID"] ".jpg"
xImg := AhkObj[AhkObj["imdbID"], "imdbID"] ".jpg"
;IL_Add(HIL, AhkObj[AhkObj["imdbID"], "imdbID"] ".jpg", 0xFFFFFF, 1)
IL_Add(HIL, AhkObj["imdbID"] ".jpg", 0xFFFFFF, 1)
IconAll .= AhkObj[AhkObj["imdbID"], "imdbID"] "|"
}
LV_SetImageList(HIL, 1)
FileAppend, % ViewIt3, ViewIt3.txt
;Run, ViewIt3.txt
Loop, Parse, ViewIt3, `n,`r
{
LVSplit := StrReplace(A_LoopField,";")
;LV_Add("Icon1", StrSplit(LVSplit, ";")*) ;LV_Add is a variadic function
LV_Add("Icon1", "", StrSplit(A_LoopField, ";")*) ;LV_Add is a variadic function
}
/*
LV_Add("Icon" . A_Index, ""
, Explore
, AhkObj[AhkObj["imdbID"], "xActors", "all"]
, AhkObj[AhkObj["imdbID"], "xGenre", "all"]
, AhkObj[AhkObj["imdbID"], "Plot"]
, keys)
LV_Add("Icon", ""
, Explore
, AhkObj["tt0383164", "xActors", "all"]
, AhkObj["tt0383164", "xGenre", "all"]
, AhkObj["tt0383164", "Plot"]
, keys)
LV_Add("Icon0", ""
, Explore
, AhkObj["tt3896198", "xActors", "all"]
, AhkObj["tt3896198", "xGenre", "all"]
, AhkObj["tt3896198", "Plot"]
, keys)
*/
LVA_ListViewAdd("LV", "+AR cfFF0000 cbFFDD99")
OnMessage("0x4E", "LVA_OnNotify")
Gui, Show, , LV
Return
;----------------------------------------------------------------------------------------------------
Start:
AhkObj := JSON2AHK(imdbObj)
;MsgBox,,%A_LineNumber%-imdbObj, % imdbObj ; ok
Keys := AhkObj.Count()
For Key, Wert In AhkObj
{
Keys .= "`n" . Key . " -> " . (IsObject(Wert) ? "Objekt" : "Wert")
;MsgBox,,%A_LineNumber%-Keys, 0, Keys der ersten Ebene, %Keys% ; ok
;x:=AhkObj[AhkObj[Key], wert] := AhkObj[wert] ;test
;MsgBox,,%A_LineNumber%, % AhkObj[AhkObj[Key], wert]
;imdbID := AhkObj[AhkObj["imdbID"], "imdbID"] := AhkObj["imdbID"]
}
;MsgBox,,%A_LineNumber%-AhkObj[AhkObj["imdbID"], "title"], % AhkObj[AhkObj["imdbID"], "title"] ; ok
imdbID := AhkObj[AhkObj["imdbID"], "imdbID"] := AhkObj["imdbID"]
;MsgBox,,%A_LineNumber%, % AhkObj[AhkObj["imdbID"], "imdbID"]
Actors := AhkObj[AhkObj["imdbID"], "Actors"] := AhkObj["Actors"]
;#########################
xActors := StrSplit(AhkObj[AhkObj["imdbID"], "Actors"],",")
Loop % xActors.Count()
If !((xActors.Count())=A_Index)
AhkObj[AhkObj["imdbID"], "xActors", "all"] .= LTrim(xActors[A_Index], A_Space) "`n"
else
AhkObj[AhkObj["imdbID"], "xActors", "all"] .= LTrim(xActors[A_Index], A_Space)
;MsgBox,,%A_LineNumber%A_Index:%A_Index%
; , % "Title: " AhkObj["Title"] "`nActors: " AhkObj[AhkObj["imdbID"], "xActors", "all"] ; OK
Awards := AhkObj[AhkObj["imdbID"], "Awards"] := AhkObj["Awards"]
BoxOffice := AhkObj[AhkObj["imdbID"], "BoxOffice"] := AhkObj["BoxOffice"]
Country := AhkObj[AhkObj["imdbID"], "Country"] := AhkObj["Country"]
Director := AhkObj[AhkObj["imdbID"], "Director"] := AhkObj["Director"]
DVD := AhkObj[AhkObj["imdbID"], "DVD"] := AhkObj["DVD"]
Genres := AhkObj[AhkObj["imdbID"], "Genre"] := AhkObj["Genre"]
;#########################
xGenres := StrSplit(AhkObj[AhkObj["imdbID"], "Genre"],",")
Loop % xGenres.Count()
If !((xGenres.Count())=A_Index)
AhkObj[AhkObj["imdbID"], "xGenre", "all"] .= LTrim(xGenres[A_Index], A_Space) "`n"
else
AhkObj[AhkObj["imdbID"], "xGenre", "all"] .= LTrim(xGenres[A_Index], A_Space)
;MsgBox,,AhkObj[AhkObj["imdbID"], "imdbID"]A_Index:%A_Index%
; , % "Title: " AhkObj["Title"] "`nGenre: " AhkObj[AhkObj["imdbID"], "xGenre", "all"] ; OK
imdbRating := AhkObj[AhkObj["imdbID"], "imdbRating"] := AhkObj["imdbRating"]
imdbVotes := AhkObj[AhkObj["imdbID"], "imdbVotes"] := AhkObj["imdbVotes"]
Language := AhkObj[AhkObj["imdbID"], "Language"] := AhkObj["Language"]
Metascore := AhkObj[AhkObj["imdbID"], "Metascore"] := AhkObj["Metascore"]
Plot := AhkObj[AhkObj["imdbID"], "Plot"] := AhkObj["Plot"]
Poster := AhkObj[AhkObj["imdbID"], "Poster"] := AhkObj["Poster"]
Production := AhkObj[AhkObj["imdbID"], "Production"] := AhkObj["Production"]
ImageCounter++
ImageArr[ImageCounter] := AhkObj[AhkObj["imdbID"], "Poster"] := AhkObj["Poster"]
Rated := AhkObj[AhkObj["imdbID"], "Rated"] := AhkObj["Rated"]
;Ratings -> Objekt
Released := AhkObj[AhkObj["imdbID"], "Released"] := AhkObj["Released"]
Response := AhkObj[AhkObj["imdbID"], "Response"] := AhkObj["Response"]
Runtime := AhkObj[AhkObj["imdbID"], "Runtime"] := AhkObj["Runtime"]
Title := AhkObj[AhkObj["imdbID"], "Title"] := AhkObj["Title"]
totalSeasons := AhkObj[AhkObj["imdbID"], "totalSeasons"] := AhkObj["totalSeasons"]
Title := AhkObj[AhkObj["imdbID"], "Title"] := AhkObj["Title"]
Type := AhkObj[AhkObj["imdbID"], "Type"] := AhkObj["Type"]
Website := AhkObj[AhkObj["imdbID"], "Website"] := AhkObj["Website"]
Writer := AhkObj[AhkObj["imdbID"], "Writer"] := AhkObj["Writer"]
Year := AhkObj[AhkObj["imdbID"], "Year"] := AhkObj["Year"]
ViewIt1 := "Actors:`n" AhkObj[AhkObj["imdbID"], "xActors", "all"] "`n"
. "Awards:`t" Awards "`n"
. "BoxOffice:`t" BoxOffice "`n"
. "Country:`t" Country "`n"
. "Director:`t" Director "`n"
. "DVD:`t" DVD "`n"
; . "Genre:`t" Genre "`n"
. "Genre:`n" AhkObj[AhkObj["imdbID"], "xGenre", "all"] "`n"
. "imdbID:`t" imdbID "`n"
. "imdbRating:`t" imdbRating "`n"
. "imdbVotes:`t" imdbVotes "`n"
. "Language:`t" Language "`n"
. "Metascore:`t" Metascore "`n"
. "Plot:`t" Plot "`n"
. "Poster:`t" Poster "`n"
. "Production:`t" Production "`n"
. "Rated:`t" Rated "`n"
. "Ratings:`t" Ratings " -> Objekt`n"
. "Released:`t" Released "`n"
. "Response:`t" Response "`n"
. "Runtime:`t" Runtime "`n"
. "Title:`t" Title "`n"
. "totalSeasons:`t" totalSeasons "`n"
. "Type:`t" Type "`n"
. "Website:`t" Website "`n"
. "Writer:`t" Writer "`n"
. "Year:`t" Year "`n"
;MsgBox,,%A_LineNumber%-ViewIt, % ViewIt1
ViewIt2 := "Actors:`t" Actors "`n"
. "Awards:`t" Awards "`n"
. "BoxOffice:`t" BoxOffice "`n"
. "Country:`t" Country "`n"
. "Director:`t" Director "`n"
. "DVD:`t" DVD "`n"
. "Genre:`t" Genre "`n"
. "imdbID:`t" imdbID "`n"
. "imdbRating:`t" imdbRating "`n"
. "imdbVotes:`t" imdbVotes "`n"
. "Language:`t" Language "`n"
. "Metascore:`t" Metascore "`n"
. "Plot:`t" Plot "`n"
. "Poster:`t" Poster "`n"
. "Production:`t" Production "`n"
. "Rated:`t" Rated "`n"
. "Ratings:`t" Ratings " -> Objekt`n"
. "Released:`t" Released "`n"
. "Response:`t" Response "`n"
. "Runtime:`t" Runtime "`n"
. "Title:`t" Title "`n"
. "totalSeasons:`t" totalSeasons "`n"
. "Type:`t" Type "`n"
. "Website:`t" Website "`n"
. "Writer:`t" Writer "`n"
. "Year:`t" Year "`n"
ViewIt3 .= Actors ";"
. Awards ";"
. BoxOffice ";"
. Country ";"
. Director ";"
. DVD ";"
. Genre ";"
. imdbID ";"
. imdbRating ";"
. imdbVotes ";"
. Language ";"
. Metascore ";"
. Plot ";"
. Poster ";"
. Production ";"
. Rated ";"
; . Ratings " -> Objekt`n"
. Released ";"
. Response ";"
. Runtime ";"
. Title ";"
. totalSeasons ";"
. Type ";"
. Website ";"
. Writer ";"
. Year "`n"
Return
GuiClose:
ExitApp
;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################
; IL_SetSize(ILID, W, H)
; Function: Sets the dimensions of images in an image list and removes all images from the list.
; Parameters: ILID - The unique ID (HIMAGELIST) of the ImageList returned by IL_Create().
; W - The width, in pixels, of all images in the image list.
; H - The height, in pixels, of all images in the image list.
; Return values: Returns nonzero if successful, or zero otherwise.
; MSDN: http://msdn.microsoft.com/en-us/library/bb775224(VS.85).aspx
; Remarks: All images in an image list have the same dimensions.
; ======================================================================================================================
IL_SetSize(ILID, W, H) {
Return DllCall("ComCtl32.dll\ImageList_SetIconSize", "Ptr", ILID, "Int", W, "Int", H, "Int")
}
;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################
/*
;xxl := omdb("A Scanner Darkly")
xxl := omdb("tt0383164")
;xxl := omdb("Blade Runner")
;MsgBox,,4, % xxl
FileAppend, % xxl "`n############################################`n", xxl.txt
;FileDelete, xxl.txt
;FileAppend, % xxl , xxl.txt
;run xxl.txt
*/
;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################
omdb(req:="",year:="",p:=0,APIkey:="") {
if !req
Return "Missing parameter"
req := SubStr(req,1,2)="tt" ? "i=" . req . "&plot=full"
: (p > 0) ? "s=" . StrReplace(req,A_Space,"+") . "&y=" . year . "&page=" . p . "&plot=full"
: (req != "") ? "t=" . StrReplace(req,A_Space,"+") . "&y=" . year . "&plot=full"
: ""
myAPIkey:= APIkey ; http://omdbapi.com/apikey.aspx
reqURL := "http://www.omdbapi.com/?apikey="
. myAPIkey
. "&"
. req
; omdb := JSON.Load(UrlDownloadToVar(reqURL)) ; laden in ein object
omdb := UrlDownloadToVar(reqURL) ;
Return omdb
}
;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################
UrlDownloadToVar(url) {
req := ComObjCreate("Msxml2.XMLHTTP")
req.open("GET", url, False)
req.Send()
Return req.responseText
}
;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################
; ======================================================================================================================
; https://www.autohotkey.com/boards/viewtopic.php?p=350106#p350106 by Teadrinker, modified by just me
; ======================================================================================================================
DocumentFromHTML(HTML) {
Local
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################
; ======================================================================================================================
; Originally released by teadrinker -> https://www.autohotkey.com/boards/viewtopic.php?p=333543#p333543
; ======================================================================================================================
JSON2AHK(JSON, Recursive := False) {
Local
Static Doc := ComObjCreate("htmlfile")
, __ := Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
, JS := Doc.parentWindow
If (!Recursive)
Obj := JSON2AHK(JS.eval("(" . JSON . ")"), True)
Else If !IsObject(JSON)
Obj := JSON
Else If (JSON.toString() != "[object Object]") {
Obj := []
Loop % JSON.length
Obj.Push(JSON2AHK(JSON[A_Index - 1], True) )
}
Else {
Obj := {}
Keys := JS.Object.keys(JSON)
Loop % Keys.length {
K := Keys[A_Index - 1]
Obj[K] := JSON2AHK(JSON[K], True)
}
}
Return Obj
}
;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################
;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################
;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################
Das hat sich erledigt
Hallo @bobo ich habe deinem Code noch . "&plot=full" hinzugefügt. Wenn man die Anfrage immer zweimal startet, bekommt man mehr Daten.
Die kurze Variante ist keine abgeschnittene lange Version. Ich finde auch anders gefasste Texte.
omdb("tt0383164")
Ørnen, ein isländischer Inspektor der dänischen Polizei, wird zum Polizeichef einer neuen Task Force zur Aufklärung der internationalen Kriminalität ernannt. Zusammen mit einem Team talentierter und vielfältiger Ermittler bearbeitet er explosive und komplexe Fälle mit allen verfügbaren Mitteln.
Da immer mehr Verbrechen und Kriminelle Grenzen überschreiten, bildet die dänische Polizei ein internationales Kriminalpolizei-Team. Die Hälfte der isländischen "Ørnen" führt das vielfältige 6-köpfige Team. Die neueste Technologie (2004-6) wird verwendet.
Als bekennender Daten-Messi speichere ich das mal alles ab.
Re: imdb datenbank auslesen
@effel omdb unterscheidet bzgl der Ausgabe zwischen der Suche über die Parameter titel/imdb (liefert nur ersten Treffer, jedoch umfangreicherer output plus optionalem Parameter "plot"), und der allgemeinen Suche über den search-Parameter (mit allen Treffern, aber geringerem output und dem Parameter 'page').
JFTR, die umfangreichste Ausgabe bekomme ich über die Abfrage auf imdb über RapidKey.
Und ja, ich bin immer noch der Meinung, das anstatt eines winzigen Images je Zeile, stattdessen das Image (zur aktuell ausgewählten Zeile!) in voller Größe auf einem separaten Bereich der GUI (bevorzugt rechts, weil Leserichtung) platziert werden sollte. Dann gibt solche Probleme wie winziges Image, dafür aber aufgeblasene Zeilen (die jeweils schlechtesten Optionen beider Welten) einfach nicht. Nuff said
JFTR, die umfangreichste Ausgabe bekomme ich über die Abfrage auf imdb über RapidKey.
Und ja, ich bin immer noch der Meinung, das anstatt eines winzigen Images je Zeile, stattdessen das Image (zur aktuell ausgewählten Zeile!) in voller Größe auf einem separaten Bereich der GUI (bevorzugt rechts, weil Leserichtung) platziert werden sollte. Dann gibt solche Probleme wie winziges Image, dafür aber aufgeblasene Zeilen (die jeweils schlechtesten Optionen beider Welten) einfach nicht. Nuff said
Re: imdb datenbank auslesen
Moin @effel,
wenn das 'synchron' laufen soll, musst Du den Ablauf auch 'synchron' programmieren.
Das kannst Du an den Anfang des Skripts setzen. Es sollte nur einmal ausgeführt werden.
Das solltest Du direkt hinter dem Gui, Add, ListView, ... unterbringen. Es sollte auch nur einmal ausgeführt werden.
IL_Add() und LV_Add() gehören meiner Meinung nach in die Start: Routine, die bei dieser Gelegenheit einen 'passenderen' Namen bekommen könnte. IL_Add() liefert den Index des hinzugefügten Icons. Diesen Index kannst Du in LV_Add() nutzen:Wenn Du kein Icon hast, nimmst Du einen ungültigen Index wie z.b. 99999
wenn das 'synchron' laufen soll, musst Du den Ablauf auch 'synchron' programmieren.
Code: Select all
HIL := IL_Create()
ImgW := 150 ; Breite der Bilder
ImgH := 220 ; Höhe der Bilder
IL_SetSize(HIL, ImgW, ImgH)
Code: Select all
LV_SetImageList(HIL, 1)
IL_Add() und LV_Add() gehören meiner Meinung nach in die Start: Routine, die bei dieser Gelegenheit einen 'passenderen' Namen bekommen könnte. IL_Add() liefert den Index des hinzugefügten Icons. Diesen Index kannst Du in LV_Add() nutzen:
Code: Select all
...
IconIndex := IL_Add(HIL, "Downgeloadetes.jpg", 0xFFFFFF, 1)
LV_Add("Icon" . IconIndex, ...)
...
Re: imdb datenbank auslesen
Hallo,
Danke Just Me das hilft mir weiter
Danke Just Me das hilft mir weiter
Code: Select all
#NoEnv
#SingleInstance force
#Persistent
FileEncoding, UTF-8
SetBatchLines, -1
SetTimer,UPDATEDSCRIPT,500
#Include M:\GUI Datenbank\LVA.ahk
#Include JSON.ahk
APIkey := "nimmDeinen"
LVcounter := 0
FileCopy, ListViewLoad.txt, %A_Now%-Old-ListViewLoad.txt
FileDelete, ListViewLoad.txt
Gui, New
Gui, Font, s12
Gui, +hwndHGUI +LastFound
;Gui, Add, Tab3, gTab3 x10 y7 Buttons +0x8 vResizeTab, PlayList|Serien|Filme|LVA_SetCellHistory|Einstellung
FileDelete, rows.txt
rows = Cover|Actors|Awards|BoxOffice|Country|Director|DVD|Genre|imdbID|imdbRating|imdbVotes|Language|Metascore|Plot|Poster|Production|Rated|Released|Response|Runtime|Title|totalSeasons|Type|Website|Writer|Year
RowsArr := StrSplit(Rows,"|")
MaxRows := RowsArr.Count() ;25
FileAppend, % MaxRows "`n" rows, rows.txt
HIL := IL_Create()
ImgW := 150 ; Breite der Bilder
ImgH := 220 ; Höhe der Bilder
IL_SetSize(HIL, ImgW, ImgH)
Gui, Add, ListView, w1200 h800 +LV0x00010000 +LV0x20 vLV AltSubmit Grid cBlack BackgroundFFDD99, % Rows
LV_SetImageList(HIL, 1)
Loop, % LV_GetCount("Columns")
; LV_ModifyCol(A_Index, "AutoHdr")
LV_ModifyCol(A_Index, 150)
Gosub TestMe
Run, ListViewLoad.txt
LVA_ListViewAdd("LV", "+AR cfFF0000 cbFFDD99")
OnMessage("0x4E", "LVA_OnNotify")
Gui, Show, , LV
Return
/*
;imdbArr := JSON2AHK(imdb)
;MsgBox,,%A_LineNumber%-imdbObj, % imdbObj ; {"Title":"Mr. Robot","Year":"2015–2019","Rated":"TV-MA","Released":"24 Jun 2015","Runtime":"49 min","Genre":"Crime, Drama, Thriller","Director":"N/A","Writer":"Sam Esmail","Actors":"Rami Malek, Christian Slater, Carly Chaikin, Martin Wallström","Plot":"Elliot, a brilliant but highly unstable young cyber-security engineer and vigilante hacker, becomes a key figure in a complex game of global dominance when he and his shadowy allies try to take down the corrupt corporation he works for.","Language":"English, Swedish, Danish, Chinese, Persian, Spanish, Arabic, German","Country":"USA","Awards":"Won 2 Golden Globes. Another 19 wins & 78 nominations.","Poster":"https://m.media-amazon.com/images/M/MV5BMzgxMmQxZjQtNDdmMC00MjRlLTk1MDEtZDcwNTdmOTg0YzA2XkEyXkFqcGdeQXVyMzQ2MDI5NjU@._V1_SX300.jpg","Ratings":[{"Source":"Internet Movie Database","Value":"8.5/10"}],"Metascore":"N/A","imdbRating":"8.5","imdbVotes":"334,252","imdbID":"tt4158110","Type":"series","totalSeasons":"4","Response":"True"}
;MsgBox,,%A_LineNumber%-imdbObj, % imdbArr["imdbID"] ;tt4158110
;MsgBox,,%A_LineNumber%-imdbObj, % imdbArr[imdbArr["imdbID"], "imdbID"] ; tt4158110
*/
TestMe:
;/*
drei := true
;drei := false
imdbObj := omdb("tt4158110",,,APIkey) ; mr. Robot
imdbArr := JSON2AHK(imdbObj)
Gosub, ListViewLoad
If drei
{
imdbObj := omdb("tt3896198",,,APIkey) ; Guardians of the Galaxy V.2
imdbArr := JSON2AHK(imdbObj)
Gosub, ListViewLoad
imdbObj := omdb("tt0383164",,,APIkey) ; Der Adler
imdbArr := JSON2AHK(imdbObj)
Gosub, ListViewLoad
}
;*/
Return
Tab3:
Return
;#########################################################################################################################
; ======================================================================================================================
ListViewLoad:
ListViewLoad := imdbArr[imdbArr["imdbID"], "Actors"] ";"
. imdbArr[imdbArr["imdbID"], "Awards"] ";"
. imdbArr[imdbArr["imdbID"], "BoxOffice"] ";"
. imdbArr[imdbArr["imdbID"], "Country"] ";"
. imdbArr[imdbArr["imdbID"], "Director"] ";"
. imdbArr[imdbArr["imdbID"], "DVD"] ";"
. imdbArr[imdbArr["imdbID"], "Genre"] ";"
. imdbArr[imdbArr["imdbID"], "imdbID"] ";"
. imdbArr[imdbArr["imdbID"], "imdbRating"] ";"
. imdbArr[imdbArr["imdbID"], "imdbVotes"] ";"
. imdbArr[imdbArr["imdbID"], "Language"] ";"
. imdbArr[imdbArr["imdbID"], "Metascore"] ";"
. imdbArr[imdbArr["imdbID"], "Plot"] ";"
. imdbArr[imdbArr["imdbID"], "Poster"] ";"
. imdbArr[imdbArr["imdbID"], "Production"] ";"
. imdbArr[imdbArr["imdbID"], "Rated"] ";"
. imdbArr[imdbArr["imdbID"], "Released"] ";"
. imdbArr[imdbArr["imdbID"], "Response"] ";"
. imdbArr[imdbArr["imdbID"], "Runtime"] ";"
. imdbArr[imdbArr["imdbID"], "Title"] ";"
. imdbArr[imdbArr["imdbID"], "totalSeasons"] ";"
. imdbArr[imdbArr["imdbID"], "Type"] ";"
. imdbArr[imdbArr["imdbID"], "Website"] ";"
. imdbArr[imdbArr["imdbID"], "Writer"] ";"
. imdbArr[imdbArr["imdbID"], "Year"] "`n"
FileAppend, % ListViewLoad "", ListViewLoad.txt
GuiControl, -Redraw, LV
LVcounter++
Img%LVcounter% := (imdbArr[imdbArr["imdbID"], "imdbID"]) ".jpg"
IL_Add(HIL, Img%LVcounter%, 0xFFFFFF, 1)
LV_Add("Icon" . LVcounter, "", StrSplit(ListViewLoad, ";")*) ;LV_Add is a variadic function
GuiControl, +Redraw, LV
Return
;#########################################################################################################################
; ======================================================================================================================
; Originally released by teadrinker -> https://www.autohotkey.com/boards/viewtopic.php?p=333543#p333543
; ======================================================================================================================
JSON2AHK_(JSON, Recursive := False) {
Local
Static Doc := ComObjCreate("htmlfile")
, __ := Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
, JS := Doc.parentWindow
If (!Recursive)
Obj := JSON2AHK(JS.eval("(" . JSON . ")"), True)
Else If !IsObject(JSON)
Obj := JSON
Else If (JSON.toString() != "[object Object]") {
Obj := []
Loop % JSON.length
Obj.Push(JSON2AHK(JSON[A_Index - 1], True) )
}
Else {
Obj := {}
Keys := JS.Object.keys(JSON)
Loop % Keys.length {
K := Keys[A_Index - 1]
Obj[K] := JSON2AHK(JSON[K], True)
}
}
Return Obj
}
;#########################################################################################################################
; ======================================================================================================================
JSON2AHK(JSON, Recursive := False) {
Local
Static Doc := ComObjCreate("htmlfile")
, __ := Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
, JS := Doc.parentWindow
If (!Recursive)
Obj := JSON2AHK(JS.eval("(" . JSON . ")"), True)
Else If !IsObject(JSON)
Obj := JSON
Else If (JSON.toString() != "[object Object]") {
Obj := []
Loop % JSON.length
Obj.Push(JSON2AHK(JSON[A_Index - 1], True) )
}
Else {
Obj := {}
Keys := JS.Object.keys(JSON)
Loop % Keys.length {
K := Keys[A_Index - 1]
Obj[K] := JSON2AHK(JSON[K], True)
}
}
imdbID := Obj[Obj["imdbID"], "imdbID"] := Obj["imdbID"] ; muss oben stehen
IfNotExist % (Obj[Obj["imdbID"], "imdbID"])
FileCreateDir % (Obj[Obj["imdbID"], "imdbID"])
Keys := Obj[Obj["imdbID"], "Keys"] := Obj.Count()
Actors := Obj[Obj["imdbID"], "Actors"] := Obj["Actors"]
Awards := Obj[Obj["imdbID"], "Awards"] := Obj["Awards"]
BoxOffice := Obj[Obj["imdbID"], "BoxOffice"] := Obj["BoxOffice"]
Country := Obj[Obj["imdbID"], "Country"] := Obj["Country"]
Director := Obj[Obj["imdbID"], "Director"] := Obj["Director"]
DVD := Obj[Obj["imdbID"], "DVD"] := Obj["DVD"]
Genres := Obj[Obj["imdbID"], "Genre"] := Obj["Genre"]
imdbRating := Obj[Obj["imdbID"], "imdbRating"] := Obj["imdbRating"]
imdbVotes := Obj[Obj["imdbID"], "imdbVotes"] := Obj["imdbVotes"]
Language := Obj[Obj["imdbID"], "Language"] := Obj["Language"]
Metascore := Obj[Obj["imdbID"], "Metascore"] := Obj["Metascore"]
Plot := Obj[Obj["imdbID"], "Plot"] := Obj["Plot"]
Poster := Obj[Obj["imdbID"], "Poster"] := Obj["Poster"]
UrlDownLoadToFile, % Obj[Obj["imdbID"], "Poster"], % Obj[Obj["imdbID"], "imdbID"] ".jpg"
Rated := Obj[Obj["imdbID"], "Rated"] := Obj["Rated"]
Released := Obj[Obj["imdbID"], "Released"] := Obj["Released"]
Response := Obj[Obj["imdbID"], "Response"] := Obj["Response"]
Runtime := Obj[Obj["imdbID"], "Runtime"] := Obj["Runtime"]
Title := Obj[Obj["imdbID"], "Title"] := Obj["Title"]
totalSeasons := Obj[Obj["imdbID"], "totalSeasons"] := Obj["totalSeasons"]
Title := Obj[Obj["imdbID"], "Title"] := Obj["Title"]
Type := Obj[Obj["imdbID"], "Type"] := Obj["Type"]
Website := Obj[Obj["imdbID"], "Website"] := Obj["Website"]
Writer := Obj[Obj["imdbID"], "Writer"] := Obj["Writer"]
Year := Obj[Obj["imdbID"], "Year"] := Obj["Year"]
Return Obj
}
;#########################################################################################################################
; ======================================================================================================================
; https://www.autohotkey.com/boards/viewtopic.php?p=388487#p388487 by BoBo
; ======================================================================================================================
omdb(req:="",year:="",p:=0,APIkey:="") {
if !req
Return "Missing parameter"
req := SubStr(req,1,2)="tt" ? "i=" . req . "&plot=full"
: (p > 0) ? "s=" . StrReplace(req,A_Space,"+") . "&y=" . year . "&page=" . p . "&plot=full"
: (req != "") ? "t=" . StrReplace(req,A_Space,"+") . "&y=" . year . "&plot=full"
: ""
myAPIkey:= APIkey ; http://omdbapi.com/apikey.aspx
reqURL := "http://www.omdbapi.com/?apikey="
. myAPIkey
. "&"
. req
; omdb := JSON.Load(UrlDownloadToVar(reqURL)) ; laden in ein object
omdb := UrlDownloadToVar(reqURL) ;
Return omdb
}
;#########################################################################################################################
; ======================================================================================================================
UrlDownloadToVar(url) {
req := ComObjCreate("Msxml2.XMLHTTP")
req.open("GET", url, False)
req.Send()
Return req.responseText
}
;#########################################################################################################################
; ======================================================================================================================
; https://www.autohotkey.com/boards/viewtopic.php?p=350106#p350106 by Teadrinker, modified by just me
; ======================================================================================================================
DocumentFromHTML(HTML) {
Local
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
;#########################################################################################################################
;-------------------------------------------------------------------------------------------------------------------------
; https://www.autohotkey.com/boards/viewtopic.php?p=389488#p389488
; ======================================================================================================================
; IL_SetSize(ILID, W, H)
; Function: Sets the dimensions of images in an image list and removes all images from the list.
; Parameters: ILID - The unique ID (HIMAGELIST) of the ImageList returned by IL_Create().
; W - The width, in pixels, of all images in the image list.
; H - The height, in pixels, of all images in the image list.
; Return values: Returns nonzero if successful, or zero otherwise.
; MSDN: http://msdn.microsoft.com/en-us/library/bb775224(VS.85).aspx
; Remarks: All images in an image list have the same dimensions.
; ======================================================================================================================
IL_SetSize(ILID, W, H) {
Return DllCall("ComCtl32.dll\ImageList_SetIconSize", "Ptr", ILID, "Int", W, "Int", H, "Int")
}
;#########################################################################################################################
;-------------------------------------------------------------------------------------------------------------------------
UPDATEDSCRIPT:
FileGetAttrib,attribs,%A_ScriptFullPath%
IfInString,attribs,A
{
FileSetAttrib,-A,%A_ScriptFullPath%
SplashTextOn,,,Updated script,
Sleep,1500
Reload
}
;SetTimer,UPDATEDSCRIPT,500
Return
;#########################################################################################################################
;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################
;-------------------------------------------------------------------------------------------------------------------------
Last edited by effel on 26 Mar 2021, 19:32, edited 1 time in total.
Re: imdb datenbank auslesen
Hallo,
am Ende wird es ein MIX aus konventionell und mit API-Key geladenen Daten werden
@Just Me
Den folgenden HTML würde ich jetzt mit xStr() parsen oder geht das auch anders/besser?
@garry schau mal hier gibt es noch einiges mehr
am Ende wird es ein MIX aus konventionell und mit API-Key geladenen Daten werden
@Just Me
Den folgenden HTML würde ich jetzt mit xStr() parsen oder geht das auch anders/besser?
Code: Select all
<h2>Cast</h2>
<table class="cast_list">
<tr><td colspan="4" class="castlist_label">Cast overview, first billed only:</td></tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm0000226/?ref_=tt_cl_i1"
><img height="44" width="32" alt="Will Smith" title="Will Smith" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BNTczMzk1MjU1MV5BMl5BanBnXkFtZTcwNDk2MzAyMg@@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0000226/?ref_=tt_cl_t1"
> Will Smith
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0000226?ref_=tt_cl_t1" >Robert Neville</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm0103797/?ref_=tt_cl_i2"
><img height="44" width="32" alt="Alice Braga" title="Alice Braga" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMTgwNjE4NzU4M15BMl5BanBnXkFtZTcwMDQ5NDI2MQ@@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0103797/?ref_=tt_cl_t2"
> Alice Braga
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0103797?ref_=tt_cl_t2" >Anna</a>
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2253071/?ref_=tt_cl_i3"
><img height="44" width="32" alt="Charlie Tahan" title="Charlie Tahan" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BNGM4MjRjMjUtYzRiMC00OWU2LThmNWItYmUxNDljMDczYTA5XkEyXkFqcGdeQXVyMjQwMDg0Ng@@._V1_UY44_CR1,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm2253071/?ref_=tt_cl_t3"
> Charlie Tahan
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm2253071?ref_=tt_cl_t3" >Ethan</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm0724757/?ref_=tt_cl_i4"
><img height="44" width="32" alt="Salli Richardson-Whitfield" title="Salli Richardson-Whitfield" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMjE2OTcxMDIwN15BMl5BanBnXkFtZTYwNTUzOTQ1._V1_UY44_CR1,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0724757/?ref_=tt_cl_t4"
> Salli Richardson-Whitfield
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0724757?ref_=tt_cl_t4" >Zoe Neville</a>
(as Salli Richardson)
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2405238/?ref_=tt_cl_i5"
><img height="44" width="32" alt="Willow Smith" title="Willow Smith" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMjAzMzM0NTY5NV5BMl5BanBnXkFtZTgwNDIxODk2NDM@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm2405238/?ref_=tt_cl_t5"
> Willow Smith
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm2405238?ref_=tt_cl_t5" >Marley Neville</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm0287756/?ref_=tt_cl_i6"
><img height="44" width="32" alt="Darrell Foster" title="Darrell Foster" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMTg2MzIzOTc3Nl5BMl5BanBnXkFtZTgwOTQ1NzMzMDI@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0287756/?ref_=tt_cl_t6"
> Darrell Foster
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0287756?ref_=tt_cl_t6" >Mike - Military Escort</a>
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm0333318/?ref_=tt_cl_i7"
><img height="44" width="32" alt="April Grace" title="April Grace" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMjc1MzViYTYtZjQzMS00OTQ4LWFiNDItOThjMzc5ZjgxOGEyXkEyXkFqcGdeQXVyMjQwMDg0Ng@@._V1_UY44_CR1,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0333318/?ref_=tt_cl_t7"
> April Grace
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0333318?ref_=tt_cl_t7" >TV Personality</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm0005231/?ref_=tt_cl_i8"
><img height="44" width="32" alt="Dash Mihok" title="Dash Mihok" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMjEzNzEyMjIxNV5BMl5BanBnXkFtZTYwNDE1Mjc1._V1_UY44_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0005231/?ref_=tt_cl_t8"
> Dash Mihok
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0005231?ref_=tt_cl_t8" >Alpha Male</a>
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2724906/?ref_=tt_cl_i9"
><img height="44" width="32" alt="Joanna Numata" title="Joanna Numata" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BOWE1ZTQ0N2EtMDljOC00MWJlLWFiMDUtYTkxZDRjODMxZGM0L2ltYWdlL2ltYWdlXkEyXkFqcGdeQXVyNTc3MjUzNTI@._V1_UY44_CR23,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm2724906/?ref_=tt_cl_t9"
> Joanna Numata
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm2724906?ref_=tt_cl_t9" >Alpha Female</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm8421984/?ref_=tt_cl_i10"
><img height="44" width="32" alt="Abbey" title="Abbey" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="" /></a> </td>
<td>
<a href="/name/nm8421984/?ref_=tt_cl_t10"
> Abbey
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm8421984?ref_=tt_cl_t10" >Sam</a>
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2869725/?ref_=tt_cl_i11"
><img height="44" width="32" alt="Kona" title="Kona" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="" /></a> </td>
<td>
<a href="/name/nm2869725/?ref_=tt_cl_t11"
> Kona
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm2869725?ref_=tt_cl_t11" >Sam</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm2677021/?ref_=tt_cl_i12"
><img height="44" width="32" alt="Samuel Glen" title="Samuel Glen" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="" /></a> </td>
<td>
<a href="/name/nm2677021/?ref_=tt_cl_t12"
> Samuel Glen
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm2677021?ref_=tt_cl_t12" >Military Driver - Jay</a>
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm0565503/?ref_=tt_cl_i13"
><img height="44" width="32" alt="James McCauley" title="James McCauley" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BZTg3OWY2YjItMzYzMy00MTQxLTkzYjQtMTQ1NjVmMTI0MTZkXkEyXkFqcGdeQXVyMjU1MjAzMzg@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0565503/?ref_=tt_cl_t13"
> James McCauley
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0565503?ref_=tt_cl_t13" >Male Evacuee</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm1677477/?ref_=tt_cl_i14"
><img height="44" width="32" alt="Marin Ireland" title="Marin Ireland" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BM2M4ZjVhY2YtMzU0ZC00NTY0LTk2NWYtNGU5OWI2N2VkZjU1XkEyXkFqcGdeQXVyMjQwMDg0Ng@@._V1_UY44_CR17,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm1677477/?ref_=tt_cl_t14"
> Marin Ireland
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm1677477?ref_=tt_cl_t14" >Woman Evacuee</a>
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2857229/?ref_=tt_cl_i15"
><img height="44" width="32" alt="Pedro Mojica" title="Pedro Mojica" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="" /></a> </td>
<td>
<a href="/name/nm2857229/?ref_=tt_cl_t15"
> Pedro Mojica
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm2857229?ref_=tt_cl_t15" >Sergeant</a>
</td>
</tr>
</table>
<div class="see-more">
<a href="fullcredits?ref_=tt_cl_sm#cast"
>See full cast</a> »
</div>
Code: Select all
;- imdb datenbank auslesen
;- https://www.autohotkey.com/boards/viewtopic.php?p=389068#p389068
#Warn
#NoEnv
HTML_File:= "M:\__ahk projekte aktuell\GUI Datenbank\CSV\Neuer Ordner\___save\I Am Legend (2007) - IMDb\I Am Legend (2007) - IMDb.htm"
F1=%a_scriptdir%\I_Am_Legend_htm-extract.txt
ifexist,%f1%
filedelete,%f1%
SetBatchLines, -1
SetWorkingDir, %A_ScriptDir%
FileRead, HTML, %HTML_File%
;##################################################################################################################################################
Doc := DocumentFromHTML(HTML)
VarSetCapacity(HTML, 0)
JSON := Doc.querySelector("script[type='application/ld+json']").innerText
AhkObj := JSON2AHK(JSON)
Keys := AhkObj.Count() . ":`n"
For Key, V In AhkObj
Keys .= "`n" . Key . " -> " . (IsObject(V) ? "Objekt" : "Wert")
xres := ""
For Key, V In AhkObj
xres .= %Key% := Key . "`t" . v . "`n"
; ------------------------------------------------------------------------------
Director := ""
If AhkObj["director", "@type"] = "Person"
Director .= AhkObj["director", "@type"] . "`t" . "https://www.imdb.com" . AhkObj["director", "url"] . "`t" . AhkObj["director", "name"] . "`n"
Actors := ""
For K, V In AhkObj["actor"]
Actors .= V["@type"] . "`t" . "https://www.imdb.com" . V["url"] . "`t" . V["name"] . "`n"
Creators := ""
For K, V In AhkObj["creator"]
Creators .= V["@type"] . "`t" . "https://www.imdb.com" . V["url"] . "`t" . V["name"] . "`n"
Genre := ""
For K, V In AhkObj["Genre"]
Genre .= k . "`t" . v . "`n"
;MsgBox, 0, (Zeilennummer %A_LineNumber%) Summary, % Genre
;----------------------------------
Fileappend,Keys der ersten Ebene=`r`n %Keys%`r`n---------------`r`nActors=`r`n%Actors%`r`nCreators=`r`n%Creators%`r`nDirector=`r`n%director%`r`n,%f1%,utf-8
; MsgBox, 0, (Zeilennummer %A_LineNumber%) Summary, Director:`n%Director%`nActors:`n%Actors%`nCreators:`n%Creators%`nGenre`n%Genre%`nWerte:`n%xres%
;##################################################################################################################################################
html = ; Actor/Producer Info [ example: Will Smith: /name/nm0000226/ ]
(
<meta name="request_id" content="RSC9757T0FQ765VHNN8X" />
<script type="application/ld+json">{
"@context": "http://schema.org",
"@type": "Person",
"url": "/name/nm0000226/",
"name": "Will Smith",
"image": "https://m.media-amazon.com/images/M/MV5BNTczMzk1MjU1MV5BMl5BanBnXkFtZTcwNDk2MzAyMg@@._V1_.jpg",
"jobTitle": [
"Music Department",
"Actor",
"Producer"
],
"description": "Willard Carroll \"Will\" Smith, Jr. (born September 25, 1968) is an American actor, comedian, producer, rapper, and songwriter. He has enjoyed success in television, film, and music. In April 2007, Newsweek called him \"the most powerful actor in Hollywood\". Smith has been nominated for five Golden Globe Awards, two Academy Awards, and has won four ...",
"birthDate": "1968-09-25"
}</script>
<script>
)
Doc := DocumentFromHTML(HTML)
VarSetCapacity(HTML, 0)
JSON := Doc.querySelector("script[type='application/ld+json']").innerText
AhkObj := JSON2AHK(JSON)
Keys := AhkObj.Count() . ":`n"
yres := ""
For Key, V In AhkObj
yres .= %Key% := Key . "`t" . v . "`n"
; ------------------------------------------------------------------------------
jobTitle := ""
For K, V In AhkObj["jobTitle"]
jobTitle .= k . "`t" . v . "`n"
;----------------------------------
Fileappend,Keys der ersten Ebene=`r`n %Keys%`r`n---------------`r`nActors=`r`n%Actors%`r`nCreators=`r`n%Creators%`r`nDirector=`r`n%director%`r`n,%f1%,utf-8
MsgBox, 0, (Zeilennummer %A_LineNumber%) Summary, Director:`n%Director%`nActors:`n%Actors%`n##################`n[ example: Will Smith: /name/nm0000226/ ]`njobTitle:`n%jobTitle%`nWerte:`n%yres%`n##################`nCreators:`n%Creators%`nGenre`n%Genre%`nWerte:`n%xres%
ExitApp
; ======================================================================================================================
; https://www.autohotkey.com/boards/viewtopic.php?p=350106#p350106 by Teadrinker, modified by just me
; ======================================================================================================================
DocumentFromHTML(HTML) {
Local
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
; ======================================================================================================================
; Originally released by teadrinker -> https://www.autohotkey.com/boards/viewtopic.php?p=333543#p333543
; ======================================================================================================================
JSON2AHK(JSON, Recursive := False) {
Local
Static Doc := ComObjCreate("htmlfile")
, __ := Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
, JS := Doc.parentWindow
If (!Recursive)
Obj := JSON2AHK(JS.eval("(" . JSON . ")"), True)
Else If !IsObject(JSON)
Obj := JSON
Else If (JSON.toString() != "[object Object]") {
Obj := []
Loop % JSON.length
Obj.Push(JSON2AHK(JSON[A_Index - 1], True) )
}
Else {
Obj := {}
Keys := JS.Object.keys(JSON)
Loop % Keys.length {
K := Keys[A_Index - 1]
Obj[K] := JSON2AHK(JSON[K], True)
}
}
Return Obj
}
/* ;###############################################################################################################
MsgBox:
---------------------------
(Zeilennummer 92) Summary
---------------------------
Director:
Person https://www.imdb.com/name/nm1349376/ Francis Lawrence
Actors:
Person https://www.imdb.com/name/nm0000226/ Will Smith
Person https://www.imdb.com/name/nm0103797/ Alice Braga
Person https://www.imdb.com/name/nm2253071/ Charlie Tahan
Person https://www.imdb.com/name/nm0724757/ Salli Richardson-Whitfield
##################
[ example: Will Smith: /name/nm0000226/ ]
jobTitle:
1 Music Department
2 Actor
3 Producer
Werte:
@context http://schema.org
@type Person
birthDate 1968-09-25
description Willard Carroll "Will" Smith, Jr. (born September 25, 1968) is an American actor, comedian, producer, rapper, and songwriter. He has enjoyed success in television, film, and music. In April 2007, Newsweek called him "the most powerful actor in Hollywood". Smith has been nominated for five Golden Globe Awards, two Academy Awards, and has won four ...
image https://m.media-amazon.com/images/M/MV5BNTczMzk1MjU1MV5BMl5BanBnXkFtZTcwNDk2MzAyMg@@._V1_.jpg
jobTitle
name Will Smith
url /name/nm0000226/
##################
Creators:
Person https://www.imdb.com/name/nm0698873/ Mark Protosevich
Person https://www.imdb.com/name/nm0326040/ Akiva Goldsman
Person https://www.imdb.com/name/nm0558577/ Richard Matheson
Person https://www.imdb.com/name/nm0181019/ John William Corrington
Person https://www.imdb.com/name/nm0181020/ Joyce Hooper Corrington
Organization https://www.imdb.com/company/co0002663/
Organization https://www.imdb.com/company/co0108864/
Organization https://www.imdb.com/company/co0093488/
Organization https://www.imdb.com/company/co0072775/
Organization https://www.imdb.com/company/co0070636/
Organization https://www.imdb.com/company/co0159772/
Organization https://www.imdb.com/company/co0011134/
Genre
1 Action
2 Adventure
3 Drama
4 Sci-Fi
5 Thriller
Werte:
@context http://schema.org
@type Movie
actor
aggregateRating
contentRating PG-13
creator
datePublished 2007-12-12
description I Am Legend is a movie starring Will Smith, Alice Braga, and Charlie Tahan. Years after a plague kills most of humanity and transforms the rest into monsters, the sole survivor in New York City struggles valiantly to find a cure.
director
duration PT1H41M
genre
image https://m.media-amazon.com/images/M/MV5BYTE1ZTBlYzgtNmMyNS00ZTQ2LWE4NjEtZjUxNDJkNTg2MzlhXkEyXkFqcGdeQXVyNjU0OTQ0OTY@._V1_.jpg
keywords post apocalypse,new york city,virus,loneliness,survivalist
name I Am Legend
review
trailer
url /title/tt0480249/
---------------------------
OK
---------------------------
*/ ;###############################################################################################################
Re: imdb datenbank auslesen
@effel danke,jetzt ist auch der link ersichtlich , Biographie zu den Personen
Re: imdb datenbank auslesen
Moin effel,
auf die Tabellendaten kann man natürlich auch per HTMLDOM zugreifen. Ich stelle morgen etwas ein.
auf die Tabellendaten kann man natürlich auch per HTMLDOM zugreifen. Ich stelle morgen etwas ein.
Re: imdb datenbank auslesen
Moin,
ich hatte da schon etwas vorbereitet. Die Tabelle hat wohl als einzige die Klasse cast_list. Damit kann man die Tabelle mit
auslesen.
Eine Tabelle besteht aus einem oder keinem Tabellenheader <th> und Tabellenreihen <tr>. Einen Header gibt es hier nicht, bzw. versteckt er sich wohl in der ersten Reihe. Die Reihen kann man mit
auslesen. Auf die einzelnen Reihen kann man per Index zugreifen
Die TabellenReihen bestehen widerum aus Zellen <td>. Um die auszulesen, erweitern wir das letzte Beispiel:
Und die einzelnen Zellen lassen sie auch per Index ansprechen. Das soll das letzte Beispiel veranschaulichen:
Je nachdem, welche Informationen man auslesen will, muss das angepassst werden.
ich hatte da schon etwas vorbereitet. Die Tabelle hat wohl als einzige die Klasse cast_list. Damit kann man die Tabelle mit
Code: Select all
CastList := Doc.querySelector("table.cast_list")
Eine Tabelle besteht aus einem oder keinem Tabellenheader <th> und Tabellenreihen <tr>. Einen Header gibt es hier nicht, bzw. versteckt er sich wohl in der ersten Reihe. Die Reihen kann man mit
Code: Select all
TableRows := CastList.getElementsByTagName("tr")
NumOfRows := TableRows.length
Code: Select all
RowIndex := 0 ; das erste Element hat den Index 0
While (RowIndex < NumOfRows) {
TableRow := TableRows[RowIndex]
RowIndex++
}
Code: Select all
RowIndex := 0 ; das erste Element hat den Index 0
While (RowIndex < NumOfRows) {
Cols := TableRows[RowIndex].getElementsByTagName("td")
RowIndex++
}
Code: Select all
CastList := Doc.querySelector("table.cast_list")
TableRows := CastList.getElementsByTagName("tr")
NumOfRows := TableRows.length
RowIndex := 1 ; erste Zeile überspringen
While (RowIndex < NumOfRows) {
Cols := TableRows[RowIndex].getElementsByTagName("td")
Actor := Trim(Cols[1].querySelector("A[href^='/name']").innertext, " `t`r`n")
; Characters := Cols[3].querySelectorAll("A[href*='character']")
Characters := Trim(Cols[3].innertext, " `t`r`n")
MsgBox, 0, Row %RowIndex% of %NumOfRows%, Actor:`n%Actor%`nCharacters:`n%Characters%
RowIndex++
}
Re: imdb datenbank auslesen
Hallo,
vielen Dank für deine Mühen, das funktioniert wie erhofft
Ich versuche an weitere Daten innerhalb dieser Abfrage zu kommen.
Zeigst du mir, wie ich auch hier an die Links komme?
Z.B <a href="/title/tt0480249/characters/nm2253071?ref_=tt_cl_t3" >Ethan</a> hier möchte ich auch die URL Informationen "/title/tt0480249/characters/nm2253071?ref_=tt_cl_t3" speichern.
Ein paar Versuche habe ich schon gemacht, aber hier liegt es eindeutig daran, das ich nichtmal im Ansatz verstehe was hier passiert.
Vielleicht würde ich es besser aufnehmen, wenn du mir zeigst wie man den folgenden Text zerlegt.
"/name/nm0565503/?ref_=tt_cl_i13"
"44"
"32"
alt="James McCauley" title="James McCauley"
src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png"
loadlate="https://m.media-amazon.com/images/M/MV5BZTg3OWY2YjItMzYzMy00MTQxLTkzYjQtMTQ1NjVmMTI0MTZkXkEyXkFqcGdeQXVyMjU1MjAzMzg@._V1_UX32_CR0,0,32,44_AL_.jpg"
vielen Dank für deine Mühen, das funktioniert wie erhofft
Ich versuche an weitere Daten innerhalb dieser Abfrage zu kommen.
Zeigst du mir, wie ich auch hier an die Links komme?
Z.B <a href="/title/tt0480249/characters/nm2253071?ref_=tt_cl_t3" >Ethan</a> hier möchte ich auch die URL Informationen "/title/tt0480249/characters/nm2253071?ref_=tt_cl_t3" speichern.
Ein paar Versuche habe ich schon gemacht, aber hier liegt es eindeutig daran, das ich nichtmal im Ansatz verstehe was hier passiert.
Vielleicht würde ich es besser aufnehmen, wenn du mir zeigst wie man den folgenden Text zerlegt.
Code: Select all
<td class="primary_photo">
<a href="/name/nm0565503/?ref_=tt_cl_i13"
><img height="44" width="32" alt="James McCauley" title="James McCauley" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BZTg3OWY2YjItMzYzMy00MTQxLTkzYjQtMTQ1NjVmMTI0MTZkXkEyXkFqcGdeQXVyMjU1MjAzMzg@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
"44"
"32"
alt="James McCauley" title="James McCauley"
src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png"
loadlate="https://m.media-amazon.com/images/M/MV5BZTg3OWY2YjItMzYzMy00MTQxLTkzYjQtMTQ1NjVmMTI0MTZkXkEyXkFqcGdeQXVyMjU1MjAzMzg@._V1_UX32_CR0,0,32,44_AL_.jpg"
Code: Select all
;imdb datenbank auslesen Seite 2
;https://www.autohotkey.com/boards/viewtopic.php?f=9&t=88144&start=20
#SingleInstance force
#NoEnv
html =
(
<h2>Cast</h2>
<table class="cast_list">
<tr><td colspan="4" class="castlist_label">Cast overview, first billed only:</td></tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm0000226/?ref_=tt_cl_i1"
><img height="44" width="32" alt="Will Smith" title="Will Smith" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BNTczMzk1MjU1MV5BMl5BanBnXkFtZTcwNDk2MzAyMg@@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0000226/?ref_=tt_cl_t1"
> Will Smith
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0000226?ref_=tt_cl_t1" >Robert Neville</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm0103797/?ref_=tt_cl_i2"
><img height="44" width="32" alt="Alice Braga" title="Alice Braga" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMTgwNjE4NzU4M15BMl5BanBnXkFtZTcwMDQ5NDI2MQ@@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0103797/?ref_=tt_cl_t2"
> Alice Braga
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0103797?ref_=tt_cl_t2" >Anna</a>
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2253071/?ref_=tt_cl_i3"
><img height="44" width="32" alt="Charlie Tahan" title="Charlie Tahan" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BNGM4MjRjMjUtYzRiMC00OWU2LThmNWItYmUxNDljMDczYTA5XkEyXkFqcGdeQXVyMjQwMDg0Ng@@._V1_UY44_CR1,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm2253071/?ref_=tt_cl_t3"
> Charlie Tahan
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm2253071?ref_=tt_cl_t3" >Ethan</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm0724757/?ref_=tt_cl_i4"
><img height="44" width="32" alt="Salli Richardson-Whitfield" title="Salli Richardson-Whitfield" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMjE2OTcxMDIwN15BMl5BanBnXkFtZTYwNTUzOTQ1._V1_UY44_CR1,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0724757/?ref_=tt_cl_t4"
> Salli Richardson-Whitfield
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0724757?ref_=tt_cl_t4" >Zoe Neville</a>
(as Salli Richardson)
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2405238/?ref_=tt_cl_i5"
><img height="44" width="32" alt="Willow Smith" title="Willow Smith" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMjAzMzM0NTY5NV5BMl5BanBnXkFtZTgwNDIxODk2NDM@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm2405238/?ref_=tt_cl_t5"
> Willow Smith
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm2405238?ref_=tt_cl_t5" >Marley Neville</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm0287756/?ref_=tt_cl_i6"
><img height="44" width="32" alt="Darrell Foster" title="Darrell Foster" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMTg2MzIzOTc3Nl5BMl5BanBnXkFtZTgwOTQ1NzMzMDI@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0287756/?ref_=tt_cl_t6"
> Darrell Foster
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0287756?ref_=tt_cl_t6" >Mike - Military Escort</a>
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm0333318/?ref_=tt_cl_i7"
><img height="44" width="32" alt="April Grace" title="April Grace" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMjc1MzViYTYtZjQzMS00OTQ4LWFiNDItOThjMzc5ZjgxOGEyXkEyXkFqcGdeQXVyMjQwMDg0Ng@@._V1_UY44_CR1,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0333318/?ref_=tt_cl_t7"
> April Grace
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0333318?ref_=tt_cl_t7" >TV Personality</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm0005231/?ref_=tt_cl_i8"
><img height="44" width="32" alt="Dash Mihok" title="Dash Mihok" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMjEzNzEyMjIxNV5BMl5BanBnXkFtZTYwNDE1Mjc1._V1_UY44_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0005231/?ref_=tt_cl_t8"
> Dash Mihok
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0005231?ref_=tt_cl_t8" >Alpha Male</a>
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2724906/?ref_=tt_cl_i9"
><img height="44" width="32" alt="Joanna Numata" title="Joanna Numata" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BOWE1ZTQ0N2EtMDljOC00MWJlLWFiMDUtYTkxZDRjODMxZGM0L2ltYWdlL2ltYWdlXkEyXkFqcGdeQXVyNTc3MjUzNTI@._V1_UY44_CR23,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm2724906/?ref_=tt_cl_t9"
> Joanna Numata
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm2724906?ref_=tt_cl_t9" >Alpha Female</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm8421984/?ref_=tt_cl_i10"
><img height="44" width="32" alt="Abbey" title="Abbey" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="" /></a> </td>
<td>
<a href="/name/nm8421984/?ref_=tt_cl_t10"
> Abbey
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm8421984?ref_=tt_cl_t10" >Sam</a>
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2869725/?ref_=tt_cl_i11"
><img height="44" width="32" alt="Kona" title="Kona" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="" /></a> </td>
<td>
<a href="/name/nm2869725/?ref_=tt_cl_t11"
> Kona
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm2869725?ref_=tt_cl_t11" >Sam</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm2677021/?ref_=tt_cl_i12"
><img height="44" width="32" alt="Samuel Glen" title="Samuel Glen" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="" /></a> </td>
<td>
<a href="/name/nm2677021/?ref_=tt_cl_t12"
> Samuel Glen
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm2677021?ref_=tt_cl_t12" >Military Driver - Jay</a>
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm0565503/?ref_=tt_cl_i13"
><img height="44" width="32" alt="James McCauley" title="James McCauley" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BZTg3OWY2YjItMzYzMy00MTQxLTkzYjQtMTQ1NjVmMTI0MTZkXkEyXkFqcGdeQXVyMjU1MjAzMzg@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm0565503/?ref_=tt_cl_t13"
> James McCauley
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm0565503?ref_=tt_cl_t13" >Male Evacuee</a>
</td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm1677477/?ref_=tt_cl_i14"
><img height="44" width="32" alt="Marin Ireland" title="Marin Ireland" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BM2M4ZjVhY2YtMzU0ZC00NTY0LTk2NWYtNGU5OWI2N2VkZjU1XkEyXkFqcGdeQXVyMjQwMDg0Ng@@._V1_UY44_CR17,0,32,44_AL_.jpg" /></a> </td>
<td>
<a href="/name/nm1677477/?ref_=tt_cl_t14"
> Marin Ireland
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm1677477?ref_=tt_cl_t14" >Woman Evacuee</a>
</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2857229/?ref_=tt_cl_i15"
><img height="44" width="32" alt="Pedro Mojica" title="Pedro Mojica" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="" /></a> </td>
<td>
<a href="/name/nm2857229/?ref_=tt_cl_t15"
> Pedro Mojica
</a> </td>
<td class="ellipsis">
...
</td>
<td class="character">
<a href="/title/tt0480249/characters/nm2857229?ref_=tt_cl_t15" >Sergeant</a>
</td>
</tr>
</table>
<div class="see-more">
<a href="fullcredits?ref_=tt_cl_sm#cast"
>See full cast</a> »
</div>
)
doc := DocumentFromHtml(html)
CastList := Doc.querySelector("table.cast_list")
TableRows := CastList.getElementsByTagName("tr")
NumOfRows := TableRows.length
RowIndex := 1 ; erste Zeile überspringen
While (RowIndex < NumOfRows) {
Cols := TableRows[RowIndex].getElementsByTagName("td")
;--------------------------------------
AllCols .= Trim(Cols[1].innertext, " `t`r`n")
/*
<td>
<a href="/name/nm1677477/?ref_=tt_cl_t14"
> Marin Ireland
</a> </td>
*/
;--------------------------------------
. Trim(Cols[2].innertext, " `t`r`n")
/*
<td class="ellipsis">
...
</td>
*/
;--------------------------------------
. Trim(Cols[3].innertext, " `t`r`n") "`n"
/*
<td class="character">
<a href="/title/tt0480249/characters/nm1677477?ref_=tt_cl_t14" >Woman Evacuee</a>
</td>
*/
RowIndex++
}
MsgBox,,Res, % AllCols
DocumentFromHtml(html) {
doc := ComObjCreate("htmlfile")
doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
doc.write(html)
Return doc
}
/*
doc := DocumentFromHtml(html)
CastList := Doc.querySelector("table.cast_list")
TableRows := CastList.getElementsByTagName("tr")
NumOfRows := TableRows.length
RowIndex := 1 ; erste Zeile überspringen
xVier := TableRows[1] A_Tab TableRows[2] A_Tab TableRows[3]
While (RowIndex < NumOfRows) {
Cols := TableRows[RowIndex].getElementsByTagName("td")
Actor := Trim(Cols[1].querySelector("A[href^='/name']").innertext, " `t`r`n")
;xEins .= "Test " A_Index "`n"
xEins .= Trim(Cols[1].querySelector("A[href^='/name']").innertext, " `t`r`n")
;xZwei .= Trim(Cols[1].querySelector("A[href^='/href']").innertext, " `t`r`n")
xDrei .= Trim(Cols[3].querySelector("A[href^='/title']").innertext, " `t`r`n")
;xEins .= Cols[1].querySelector("A[href*='character']")
xZwei .= Trim(Cols[2].innertext, " `t`r`n")
;xZwei .= Cols[A_Index]
;xVier .= TableRows[1] A_Tab TableRows[2] A_Tab TableRows[3]
Characters := Trim(Cols[3].innertext, " `t`r`n")
res .= RowIndex " " NumOfRows "`t" Actor "`t" Characters "`n"
; MsgBox, 0, Row %RowIndex% of %NumOfRows%, Actor:`n%Actor%`nCharacters:`n%Characters%
RowIndex++
}
MsgBox,,Res, % Res . "`n"
. "CastList:`n" . CastList . "`n"
. "TableRows:`n" . TableRows . "`n"
. "NumOfRows:`n" . NumOfRows . "`n"
. "xEins:`n" . xEins . "`n"
. "xZwei:`n" . xZwei . "`n"
. "xDrei:`n" . xDrei . "`n"
. "xVier:`n" . xVier . "`n"
*/
Re: imdb datenbank auslesen
Moin,
ich melde mich nachher noch mal.
Bis dann!
ich melde mich nachher noch mal.
Bis dann!
Re: imdb datenbank auslesen
Hallo,
ich habe ein bisserl "HTML-Zauberei" geschrieben. Ich habe ja schon gesagt, dass ich jetzt erst begonnen habe, mich mit der QuerySelector() Methode zu beschäftigen. Sie ergänzt die anderen HTML-Get-Methoden um deutlich mehr Möglichkeiten für eine gezielte Auswahl. Ob das für Dich interessant ist, musst Du selbst entscheiden. Wenn der Aufbau der HTML-Daten bekannt und konstant ist, kommt man mit InStr(), RegExMatch() oder xStr() auch gut ans Ziel. Die HTML-Methoden kann man dann dafür nutzen, HTML-Blöcke als Quelltext (.innerhtml) auszulesen.
ich habe ein bisserl "HTML-Zauberei" geschrieben. Ich habe ja schon gesagt, dass ich jetzt erst begonnen habe, mich mit der QuerySelector() Methode zu beschäftigen. Sie ergänzt die anderen HTML-Get-Methoden um deutlich mehr Möglichkeiten für eine gezielte Auswahl. Ob das für Dich interessant ist, musst Du selbst entscheiden. Wenn der Aufbau der HTML-Daten bekannt und konstant ist, kommt man mit InStr(), RegExMatch() oder xStr() auch gut ans Ziel. Die HTML-Methoden kann man dann dafür nutzen, HTML-Blöcke als Quelltext (.innerhtml) auszulesen.
Code: Select all
#NoEnv
SetBatchLines, -1
HTML =
(
<h2>Cast</h2>
<table class="cast_list">
<tr>
<td colspan="4" class="castlist_label">Cast overview, first billed only:</td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm0000226/?ref_=tt_cl_i1" >
<img height="44" width="32" alt="Will Smith" title="Will Smith" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BNTczMzk1MjU1MV5BMl5BanBnXkFtZTcwNDk2MzAyMg@@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td> <td>
<a href="/name/nm0000226/?ref_=tt_cl_t1" > Will Smith </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm0000226?ref_=tt_cl_t1" >Robert Neville</a> </td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm0103797/?ref_=tt_cl_i2" >
<img height="44" width="32" alt="Alice Braga" title="Alice Braga" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMTgwNjE4NzU4M15BMl5BanBnXkFtZTcwMDQ5NDI2MQ@@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td> <td>
<a href="/name/nm0103797/?ref_=tt_cl_t2" > Alice Braga </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm0103797?ref_=tt_cl_t2" >Anna</a> </td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2253071/?ref_=tt_cl_i3" >
<img height="44" width="32" alt="Charlie Tahan" title="Charlie Tahan" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BNGM4MjRjMjUtYzRiMC00OWU2LThmNWItYmUxNDljMDczYTA5XkEyXkFqcGdeQXVyMjQwMDg0Ng@@._V1_UY44_CR1,0,32,44_AL_.jpg" /></a> </td> <td>
<a href="/name/nm2253071/?ref_=tt_cl_t3" > Charlie Tahan </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm2253071?ref_=tt_cl_t3" >Ethan</a> </td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm0724757/?ref_=tt_cl_i4" >
<img height="44" width="32" alt="Salli Richardson-Whitfield" title="Salli Richardson-Whitfield" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMjE2OTcxMDIwN15BMl5BanBnXkFtZTYwNTUzOTQ1._V1_UY44_CR1,0,32,44_AL_.jpg" /></a> </td> <td>
<a href="/name/nm0724757/?ref_=tt_cl_t4" > Salli Richardson-Whitfield </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm0724757?ref_=tt_cl_t4" >Zoe Neville</a> (as Salli Richardson) </td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2405238/?ref_=tt_cl_i5" >
<img height="44" width="32" alt="Willow Smith" title="Willow Smith" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMjAzMzM0NTY5NV5BMl5BanBnXkFtZTgwNDIxODk2NDM@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td> <td>
<a href="/name/nm2405238/?ref_=tt_cl_t5" > Willow Smith </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm2405238?ref_=tt_cl_t5" >Marley Neville</a> </td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm0287756/?ref_=tt_cl_i6" >
<img height="44" width="32" alt="Darrell Foster" title="Darrell Foster" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMTg2MzIzOTc3Nl5BMl5BanBnXkFtZTgwOTQ1NzMzMDI@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td> <td>
<a href="/name/nm0287756/?ref_=tt_cl_t6" > Darrell Foster </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm0287756?ref_=tt_cl_t6" >Mike - Military Escort</a> </td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm0333318/?ref_=tt_cl_i7" >
<img height="44" width="32" alt="April Grace" title="April Grace" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMjc1MzViYTYtZjQzMS00OTQ4LWFiNDItOThjMzc5ZjgxOGEyXkEyXkFqcGdeQXVyMjQwMDg0Ng@@._V1_UY44_CR1,0,32,44_AL_.jpg" /></a> </td> <td>
<a href="/name/nm0333318/?ref_=tt_cl_t7" > April Grace </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm0333318?ref_=tt_cl_t7" >TV Personality</a> </td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm0005231/?ref_=tt_cl_i8" >
<img height="44" width="32" alt="Dash Mihok" title="Dash Mihok" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BMjEzNzEyMjIxNV5BMl5BanBnXkFtZTYwNDE1Mjc1._V1_UY44_CR0,0,32,44_AL_.jpg" /></a> </td> <td>
<a href="/name/nm0005231/?ref_=tt_cl_t8" > Dash Mihok </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm0005231?ref_=tt_cl_t8" >Alpha Male</a> </td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2724906/?ref_=tt_cl_i9" >
<img height="44" width="32" alt="Joanna Numata" title="Joanna Numata" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BOWE1ZTQ0N2EtMDljOC00MWJlLWFiMDUtYTkxZDRjODMxZGM0L2ltYWdlL2ltYWdlXkEyXkFqcGdeQXVyNTc3MjUzNTI@._V1_UY44_CR23,0,32,44_AL_.jpg" /></a> </td> <td>
<a href="/name/nm2724906/?ref_=tt_cl_t9" > Joanna Numata </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm2724906?ref_=tt_cl_t9" >Alpha Female</a> </td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm8421984/?ref_=tt_cl_i10" >
<img height="44" width="32" alt="Abbey" title="Abbey" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="" /></a> </td> <td>
<a href="/name/nm8421984/?ref_=tt_cl_t10" > Abbey </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm8421984?ref_=tt_cl_t10" >Sam</a> </td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2869725/?ref_=tt_cl_i11" >
<img height="44" width="32" alt="Kona" title="Kona" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="" /></a> </td> <td>
<a href="/name/nm2869725/?ref_=tt_cl_t11" > Kona </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm2869725?ref_=tt_cl_t11" >Sam</a> </td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm2677021/?ref_=tt_cl_i12" >
<img height="44" width="32" alt="Samuel Glen" title="Samuel Glen" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="" /></a> </td> <td>
<a href="/name/nm2677021/?ref_=tt_cl_t12" > Samuel Glen </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm2677021?ref_=tt_cl_t12" >Military Driver - Jay</a> </td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm0565503/?ref_=tt_cl_i13" >
<img height="44" width="32" alt="James McCauley" title="James McCauley" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BZTg3OWY2YjItMzYzMy00MTQxLTkzYjQtMTQ1NjVmMTI0MTZkXkEyXkFqcGdeQXVyMjU1MjAzMzg@._V1_UX32_CR0,0,32,44_AL_.jpg" /></a> </td> <td>
<a href="/name/nm0565503/?ref_=tt_cl_t13" > James McCauley </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm0565503?ref_=tt_cl_t13" >Male Evacuee</a> </td>
</tr>
<tr class="even">
<td class="primary_photo">
<a href="/name/nm1677477/?ref_=tt_cl_i14" >
<img height="44" width="32" alt="Marin Ireland" title="Marin Ireland" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="loadlate hidden " loadlate="https://m.media-amazon.com/images/M/MV5BM2M4ZjVhY2YtMzU0ZC00NTY0LTk2NWYtNGU5OWI2N2VkZjU1XkEyXkFqcGdeQXVyMjQwMDg0Ng@@._V1_UY44_CR17,0,32,44_AL_.jpg" /></a> </td> <td>
<a href="/name/nm1677477/?ref_=tt_cl_t14" > Marin Ireland </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm1677477?ref_=tt_cl_t14" >Woman Evacuee</a> </td>
</tr>
<tr class="odd">
<td class="primary_photo">
<a href="/name/nm2857229/?ref_=tt_cl_i15" >
<img height="44" width="32" alt="Pedro Mojica" title="Pedro Mojica" src="https://m.media-amazon.com/images/S/sash/N1QWYSqAfSJV62Y.png" class="" /></a> </td> <td>
<a href="/name/nm2857229/?ref_=tt_cl_t15" > Pedro Mojica </a> </td>
<td class="ellipsis"> ... </td>
<td class="character">
<a href="/title/tt0480249/characters/nm2857229?ref_=tt_cl_t15" >Sergeant</a> </td>
</tr>
</table>
<div class="see-more">
<a href="fullcredits?ref_=tt_cl_sm#cast" >See full cast</a> »
</div>
)
; ======================================================================================================================
Doc := DocumentFromHTML(HTML)
CastObj := {}
CastList := Doc.querySelector("table.cast_list")
TableRows := CastList.getElementsByTagName("tr")
NumOfRows := TableRows.length
RowIndex := 1 ; erste Zeile überspringen
While (RowIndex < NumOfRows) {
TR := TableRows[RowIndex]
Actor := {}
; Zweites <td> Element der Zeile
Actor["Actor"] := Trim(TR.querySelector("td:nth-child(2)").innertext, " `t`r`n")
; Viertes <td> Element der Zeile
Actor["Character"] := Trim(TR.querySelector("td:nth-child(4)").innertext, " `t`r`n")
; <td> Element der Klasse "primary_photo"
TD := TR.querySelector("td.primary_photo")
Photo := {}
Photo["HREF"] := TD.querySelector("a").href
Img := TD.querySelector("img")
For Each, Attr In ["Height", "Width", "Alt", "Title", "Src", "Loadlate"]
Photo[Attr] := Img.getAttribute(Attr)
Actor["Photo"] := Photo
CastObj.Push(Actor)
RowIndex++
}
; ======================================================================================================================
Gui, Add, TreeView, w1000 r40 AltSubmit vTV gSubTV
Obj2Tree(CastObj)
Gui, Show, , ObjektTree
Return
ExitApp
GuiClose:
ExitApp
SubTV:
If (A_GuiEvent = "Normal") && !TV_GetChild(A_EventInfo) {
Path := ""
ID := A_EventInfo
While (ID := TV_GetParent(ID)) {
TV_GetText(Txt, ID)
Path := Txt . (Path <> "" ? "|" . Path : "")
}
ToolTip, %Path%
}
Return
; ----------------------------------------------------------------------------------------------------------------------
DocumentFromHTML(HTML) {
Local
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
; ======================================================================================================================
Obj2Tree(Obj, Parent := 0) {
For K, V In Obj {
If IsObject(V)
Obj2Tree(V, TV_Add(K, Parent, "Expand"))
Else
TV_Add(V, TV_Add(K, Parent, "Expand"))
}
}
Re: imdb datenbank auslesen
Hallo, Just Me, vielen Dank, das ist gelinde ausgedrückt perfekt, ich könnte es zwar noch nicht für andere Seiten anwenden, aber damit kann ich es lernen.
Ich poste mal was ich bisher daraus gemacht habe, vielleicht kommt ja ein Dialog mit Denkanstößen zustande
Code: Select all
;imdb datenbank auslesen Seite 2
;https://www.autohotkey.com/boards/viewtopic.php?p=391696#p391696
#SingleInstance force
#NoEnv
SetKeyDelay 20
SetTitleMatchMode, 2
SetBatchLines, -1
UrlDownLoadToFile, https://www.imdb.com/title/tt0818165, html.txt
FileRead, html, html.txt
FilmTitel := "tt0818165"
Doc := DocumentFromHTML(HTML)
CastObj := {}
CastList := Doc.querySelector("table.cast_list")
TableRows := CastList.getElementsByTagName("tr")
NumOfRows := TableRows.length
RowIndex := 1 ; erste Zeile überspringen
While (RowIndex < NumOfRows) {
TR := TableRows[RowIndex]
Actor := {}
; Zweites <td> Element der Zeile
Actor["Actor"] := Trim(TR.querySelector("td:nth-child(2)").innertext, " `t`r`n")
; Viertes <td> Element der Zeile
Actor["Character"] := Trim(TR.querySelector("td:nth-child(4)").innertext, " `t`r`n")
; <td> Element der Klasse "primary_photo"
TD := TR.querySelector("td.primary_photo")
Photo := {}
Photo["HREF"] := TD.querySelector("a").href
Img := TD.querySelector("img")
For Each, Attr In ["Height", "Width", "Alt", "Title", "Src", "Loadlate"]
Photo[Attr] := Img.getAttribute(Attr)
Actor["Photo"] := Photo
CastObj.Push(Actor)
RowIndex++
For Each, Object In Actor {
If IsObject(Object)
For K, var In Object
Obj2TreeVar .= RowIndex-1 ";" A_Index ";" k ";" var "`n"
Else
Obj2TreeVar .= (A_Index-1) ? (RowIndex-1 ";" 9 ";" "Character" ";" Object "`n") : (RowIndex-1 ";" 8 ";" "Actor" ";" Object "`n")
}
}
LoopCounter := RowIndex-1
; ======================================================================================================================
Gui, Add, TreeView, w1000 r40 AltSubmit vTV gSubTV
Obj2Tree(CastObj)
Gui, Show, , ObjektTree
; ======================================================================================================================
Obj2TreeArr := object()
Loop, Parse, Obj2TreeVar, `n
{
ALoopField := A_LoopField
Split := StrSplit(ALoopField, ";")
Obj2TreeArr[Split.1, Split.2, Split.3] := Split[4]
If InStr(Split.4, "ref_")
{
HREFm := StrSplit(Split.4, "/")
Split[6] := "https://m.imdb.com/name/" HREFm[3]
Obj2TreeArr[Split.1, 11, "HREFm"] := Split[6]
Obj2TreeArr[Split.1, 12, "ActorID"] := HREFm[3]
}
; Split[7] := HREFm[3]
If InStr(Split.4, "_V1_")
{
ActorPictureSplit := StrSplit(Split.4, "_V1_") ; grosses ActorPicture
Split[5] := ActorPictureSplit[1] "_V1_.jpg"
Obj2TreeArr[Split.1, 10, "BigPicture"] := Split[5]
If !FileExist(FilmTitel "\Actors")
FileCreateDir, % FilmTitel "\Actors"
PicFileName := FilmTitel "\Actors\" FilmTitel A_Space HREFm[3] A_Space (Obj2TreeArr[Split.1, 8, "Actor"]) ".jpg" ; "tt0480249 nm0000226 Will Smith.jpg"
UrlDownLoadToFile, % Split[5], % PicFileName
Loop, % A_ScriptDir "\" FilmTitel "\Actors\*.jpg"
If InStr(A_LoopFilePath, (Obj2TreeArr[Split.1, 8, "Actor"]))
{
ALoopFileName := A_LoopFileName
If InStr(_V1_Counter, A_LoopFilePath)
continue
_V1_Counter .= A_LoopFilePath "|"
; https://www.autohotkey.com/boards/viewtopic.php?p=356281 by BoBo
; Eigenschaften/properties der Actoren aus Fotodatei laden
MaxGap := 12
SplitPath,% A_LoopFilePath, fileName, dirPath
Folder := ComObjCreate("Shell.Application").NameSpace(dirPath)
FolderItem := Folder.ParseName(fileName)
Gap := 0
While (Gap < MaxGap)
If (Value := Folder.GetDetailsOf(FolderItem, A_Index - 1))
{
ActorPicName := (A_Index - 1=0) ? (Value, Gap := 0) : ("", Gap := 0)
If ActorPicName
Obj2TreeArr[Split.1, 13, "ActorPicName"] := ActorPicName
ActorPicGröße := (A_Index - 1=1) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicGröße
Obj2TreeArr[Split.1, 14, "ActorPicGröße"] := ActorPicGröße
ActorPicDatum := (A_Index - 1=12) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicDatum
Obj2TreeArr[Split.1, 15, "ActorPicDatum"] := ActorPicDatum
ActorPicAutoren := (A_Index - 1=20) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicAutoren
Obj2TreeArr[Split.1, 16, "ActorPicAutoren"] := ActorPicAutoren
ActorPicCopyright := (A_Index - 1=25) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicCopyright
Obj2TreeArr[Split.1, 17, "ActorPicCopyright"] := ActorPicCopyright
ActorPicTitel := (A_Index - 1=21) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicTitel
Obj2TreeArr[Split.1, 18, "ActorPicTitel"] := ActorPicTitel
ActorPicAbmessungen := (A_Index - 1=31) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicAbmessungen
Obj2TreeArr[Split.1, 19, "ActorPicAbmessungen"] := ActorPicAbmessungen
propsAll .= Value ";", Gap := 0
}
Else
Gap++
;msgbox,,%A_LineNumber%, % Obj2TreeArr[Split.1, 13, "ActorPicName"], .1
}
;FileAppend, % propsAll, % ALoopFileName "-allPictureDetails.txt"
propsAll=""
}
If !FileExist(FilmTitel "\Actors")
FileCreateDir, % FilmTitel "\Actors"
; msgbox,,%A_LineNumber%, % Split[1] "`n" Split[2] "`n" Split[3] "`n" Split[4] "`n" Split[5] "`n" Split[6] "`n" Split[x]
}
Loop, % LoopCounter
{
ActorsSaveVar .= FilmTitel ";"
. Obj2TreeArr[A_Index, 12, "ActorID"] ";"
. Obj2TreeArr[A_Index, 8, "Actor"] ";"
. Obj2TreeArr[A_Index, 9, "Character"] ";"
. Obj2TreeArr[A_Index, 3, "HREF"] ";"
. Obj2TreeArr[A_Index, 4, "Loadlate"] ";"
. Obj2TreeArr[A_Index, 10, "BigPicture"] ";"
. Obj2TreeArr[A_Index, 11, "HREFm"] ";"
. Obj2TreeArr[A_Index, 13, "ActorPicName"] ";"
. Obj2TreeArr[A_Index, 14, "ActorPicGröße"] ";"
. Obj2TreeArr[A_Index, 15, "ActorPicDatum"] ";"
. Obj2TreeArr[A_Index, 16, "ActorPicAutoren"] ";"
. Obj2TreeArr[A_Index, 17, "ActorPicCopyright"] ";"
. Obj2TreeArr[A_Index, 18, "ActorPicTitel"] ";"
. Obj2TreeArr[A_Index, 19, "ActorPicAbmessungen"] "`n"
}
FileDelete, % FilmTitel "\Actors\" FilmTitel ".txt"
FileAppend, % ActorsSaveVar, % FilmTitel "\Actors\" FilmTitel ".txt"
Test := true_
If Test
Loop, % LoopCounter
{
MsgBox,,Zeile: %A_LineNumber% | %A_Index% %A_Space% %xcounter% Obj2TreeArr, % ""
. FilmTitel "`n"
. Obj2TreeArr[A_Index, 12, "ActorID"] "`n"
. Obj2TreeArr[A_Index, 8, "Actor"] "`n"
. Obj2TreeArr[A_Index, 9, "Character"] "`n"
. Obj2TreeArr[A_Index, 3, "HREF"] "`n"
. Obj2TreeArr[A_Index, 4, "Loadlate"] "`n"
. Obj2TreeArr[A_Index, 10, "BigPicture"] "`n"
. Obj2TreeArr[A_Index, 11, "HREFm"] "`n"
. Obj2TreeArr[A_Index, 13, "ActorPicName"] "`n"
. Obj2TreeArr[A_Index, 14, "ActorPicGröße"] "`n"
. Obj2TreeArr[A_Index, 15, "ActorPicDatum"] "`n"
. Obj2TreeArr[A_Index, 16, "ActorPicAutoren"] "`n"
. Obj2TreeArr[A_Index, 17, "ActorPicCopyright"] "`n"
. Obj2TreeArr[A_Index, 18, "ActorPicTitel"] "`n"
. Obj2TreeArr[A_Index, 19, "ActorPicAbmessungen"],7
}
MsgBox,,Zeile: #%A_LineNumber%, FERTIG!,1
Return
ExitApp
GuiClose:
ExitApp
SubTV:
If (A_GuiEvent = "Normal") && !TV_GetChild(A_EventInfo) {
Path := ""
ID := A_EventInfo
While (ID := TV_GetParent(ID)) {
TV_GetText(Txt, ID)
Path := Txt "`n" (Path <> "" ? "|" . Path : "") "`n" ID ; "`n`n" TV_GetParent(ID)
}
ToolTip, %Path%
}
;msgbox,,%A_LineNumber%, % Obj2TreeVar
; ----------------------------------------------------------------------------------------------------------------------
DocumentFromHTML(HTML) {
Local
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
; ======================================================================================================================
Obj2Tree(Obj, Parent := 0) {
For K, V In Obj {
If IsObject(V)
Obj2Tree(V, TV_Add(K, Parent, "Expand1"))
Else
TV_Add(V, TV_Add(K, Parent, "Expand1"))
}
}
Re: imdb datenbank auslesen
Moin,
ich habe zumindest ein paar Anmerkungen zum Auslesen der Daten aus den Bilddateien.
Du kennst die Indizes der Daten, die Dich interessieren. Die große Schleife über alle möglichen Daten macht deshalb für mich keinen Sinn. Du kannst ja direkt auf die Daten zugreifen. Das verkürzt auch die Laufzeit:*ungetestet*
Ich frage mich auch, wofür Du die eingeschobene Arraydimension Obj2TreeArr[Split.1, 13, "ActorPicName"] := ActorPicName brauchst. Wenn Du nur die Stringkeys in einer selbstbestimmten Reihenfolge auslesen willst, reicht dafür ein zusätzliches einfaches Array, in dem Du die Keys in der gewünschten Reihenfolge ablegst. Das kannst Du dann z.B. mit einer For-Schleife abarbeiten:
Und wenn die Ausgaben wie in Deinem Skript sowieso eine festgelegte Reihenfolge haben, ist selbst das überflüssig.
ich habe zumindest ein paar Anmerkungen zum Auslesen der Daten aus den Bilddateien.
Du kennst die Indizes der Daten, die Dich interessieren. Die große Schleife über alle möglichen Daten macht deshalb für mich keinen Sinn. Du kannst ja direkt auf die Daten zugreifen. Das verkürzt auch die Laufzeit:
Code: Select all
Details := {0: {I: 13, N: "ActorPicName"}
, 1: {I: 14, N: "ActorPicGröße"}
, 12: {I: 15, N: "ActorPicDatum"}
, 20: {I: 16, N: "ActorPicAutoren"}
, 21: {I: 18, N: "ActorPicTitel"} ; ?
, 25: {I: 17, N: "ActorPicCopyright"} ; ?
, 32: {I: 19, N: "ActorPicAbmessungen"}}
...
...
...
; Eigenschaften/properties der Actoren aus Fotodatei laden
SplitPath, %A_LoopFilePath%, fileName, dirPath
Folder := ComObjCreate("Shell.Application").NameSpace(dirPath)
For I, O In Details {
If (Value := Folder.GetDetailsOf(FolderItem, I)) {
Obj2TreeArr[Split.1, O.I, O.N] := Value
propsAll .= Value . ";"
}
}
Ich frage mich auch, wofür Du die eingeschobene Arraydimension Obj2TreeArr[Split.1, 13, "ActorPicName"] := ActorPicName brauchst. Wenn Du nur die Stringkeys in einer selbstbestimmten Reihenfolge auslesen willst, reicht dafür ein zusätzliches einfaches Array, in dem Du die Keys in der gewünschten Reihenfolge ablegst. Das kannst Du dann z.B. mit einer For-Schleife abarbeiten:
Code: Select all
Loop, % LoopCounter
{
ActorsSaveVar .= FilmTitel
For Each, Key In KeyArray
ActorsSaveVar .= ";" . Obj2TreeArr[A_Index, Key]
ActorsSaveVar .= "`n
...
}
Re: imdb datenbank auslesen
Danke Just Me
Code: Select all
, 21: {I: 18, N: "ActorPicTitel"} ; ?
, 25: {I: 17, N: "ActorPicCopyright"} ; ?
Das ist kein Schreibfehler, Copyright ist bei den Schauspieler Bildern oft mit Daten gefüllt
Ich merge grade zwei Script Dateien, langsam nimmt es Form an.
Ich dachte, das ich die Datenstruktur so halte, dass alle Variablen in einer imdbArray gespeichert sind, (Obj2TreeArr wird auch zu imdbArray) ich speichere alles ab, auch die Daten die ich nicht für die GUI oder für den Ablauf des Programms benötige.
Das hat als einzigen Grund, das ich noch immer lernen muss wie ich mit Arrays verfahren kann
Nichtsdestotrotz freue ich mich über weitere Anmerkungen und Poste den aktuellen (grade zusammengefügten) Code der mit Key sogar funktioniert:
Die vorgeschlagenen Änderungen sind noch nicht berücksichtigt
Code: Select all
#NoEnv
#SingleInstance force
#Persistent
FileEncoding, UTF-8
SetBatchLines, -1
SetTitleMatchMode, 2
SetKeyDelay 20
SetTimer,UPDATEDSCRIPT,500
#Include M:\GUI Datenbank\LVA.ahk
#Include JSON.ahk
APIkey := "nimmDeinen"
LVcounter := 0
FileCopy, ListViewLoad.txt, %A_Now%-Old-ListViewLoad.txt
FileDelete, ListViewLoad.txt
Gui, New
Gui, Font, s12
Gui, +hwndHGUI +LastFound
Gui, Add, Tab3, gTab3 x10 y7 Buttons +0x8 vResizeTab, PlayList|Actors|Serien|Filme|LVA_SetCellHistory|Einstellung
Gui, Tab, Actors,, exact
HILActors := IL_Create() ; ActorsView
ImgW := 64 ; Breite der Bilder
ImgH := 88 ; Höhe der Bilder
IL_SetSize(HILActors, ImgW, ImgH)
RowsLVActors = Foto|FilmID|ActorID|Actor|Character|Loadlate|HREF|BigPicture|ActorPicName|ActorPicGröße|ActorPicAutoren|ActorPicDatum|ActorPicCopyright|ActorPicTitel|ActorPicAbmessungen|ActorPicBewertung
RowsLVActorsArr := StrSplit(Rows,"|")
MaxRowsLVActors := RowsArr.Count() ;25
Gui, Add, ListView, w1200 h800 +LV0x00010000 +LV0x20 vLVActors AltSubmit Grid cBlack BackgroundFFDD99, % RowsLVActors
LV_SetImageList(HILActors, 1)
LVA_ListViewAdd("LVActors", "+AR cfFF0000 cbFFDD99")
Loop, % LV_GetCount("Columns")
; LV_ModifyCol(A_Index, "AutoHdr")
LV_ModifyCol(A_Index, 164)
LV_ModifyCol(1, 64)
LV_ModifyCol(2, 120)
LV_ModifyCol(3, 120)
LV_ModifyCol(4, 164)
LV_ModifyCol(5, 164)
LV_ModifyCol(6, 64)
LV_ModifyCol(7, 64)
LV_ModifyCol(8, 64)
LV_ModifyCol(9, 164)
LV_ModifyCol(10, 164)
LV_ModifyCol(11, 0)
LV_ModifyCol(12, 0)
LV_ModifyCol(13, 0)
LV_ModifyCol(14, 0)
LV_ModifyCol(15, 0)
LV_ModifyCol(16, 0)
;Gui, Tab, Playlist,, exact
GUi, Tab, PlayList,, Exact
HIL := IL_Create()
ImgW := 150 ; Breite der Bilder
ImgH := 220 ; Höhe der Bilder
IL_SetSize(HIL, ImgW, ImgH)
FileDelete, rows.txt
rows = Cover|Actors|Awards|BoxOffice|Country|Director|DVD|Genre|imdbID|imdbRating|imdbVotes|Language|Metascore|Plot|Poster|Production|Rated|Released|Response|Runtime|Title|totalSeasons|Type|Website|Writer|Year
RowsArr := StrSplit(Rows,"|")
MaxRows := RowsArr.Count() ;25
FileAppend, % MaxRows "`n" rows, rows.txt
Gui, Add, ListView, w1200 h800 +LV0x00010000 +LV0x20 vLV AltSubmit Grid cBlack BackgroundFFDD99, % Rows
LV_SetImageList(HIL, 1)
LVA_ListViewAdd("LV", "+AR cfFF0000 cbFFDD99")
Loop, % LV_GetCount("Columns")
; LV_ModifyCol(A_Index, "AutoHdr")
LV_ModifyCol(A_Index, 150)
Gui, Show, , % A_ScriptName
Gosub TestMe
;Run, ListViewLoad.txt
OnMessage("0x4E", "LVA_OnNotify")
Return
/*
;imdbArr := JSON2AHK(imdb)
;MsgBox,,%A_LineNumber%-imdbObj, % imdbObj ; {"Title":"Mr. Robot","Year":"2015–2019","Rated":"TV-MA","Released":"24 Jun 2015","Runtime":"49 min","Genre":"Crime, Drama, Thriller","Director":"N/A","Writer":"Sam Esmail","Actors":"Rami Malek, Christian Slater, Carly Chaikin, Martin Wallström","Plot":"Elliot, a brilliant but highly unstable young cyber-security engineer and vigilante hacker, becomes a key figure in a complex game of global dominance when he and his shadowy allies try to take down the corrupt corporation he works for.","Language":"English, Swedish, Danish, Chinese, Persian, Spanish, Arabic, German","Country":"USA","Awards":"Won 2 Golden Globes. Another 19 wins & 78 nominations.","Poster":"https://m.media-amazon.com/images/M/MV5BMzgxMmQxZjQtNDdmMC00MjRlLTk1MDEtZDcwNTdmOTg0YzA2XkEyXkFqcGdeQXVyMzQ2MDI5NjU@._V1_SX300.jpg","Ratings":[{"Source":"Internet Movie Database","Value":"8.5/10"}],"Metascore":"N/A","imdbRating":"8.5","imdbVotes":"334,252","imdbID":"tt4158110","Type":"series","totalSeasons":"4","Response":"True"}
;MsgBox,,%A_LineNumber%-imdbObj, % imdbArr["imdbID"] ;tt4158110
;MsgBox,,%A_LineNumber%-imdbObj, % imdbArr[imdbArr["imdbID"], "imdbID"] ; tt4158110
*/
TestMe:
;/*
drei := true
imdbObj := omdb("tt4158110",,,APIkey) ; mr. Robot
imdbArr := JSON2AHK(imdbObj)
Gosub, ListViewLoad
If drei
{
imdbObj := omdb("tt3896198",,,APIkey) ; Guardians of the Galaxy V.2
imdbArr := JSON2AHK(imdbObj)
Gosub, ListViewLoad
imdbObj := omdb("tt0383164",,,APIkey) ; Der Adler
imdbArr := JSON2AHK(imdbObj)
Gosub, ListViewLoad
FilmTitel := "tt3896198"
Gosub, LoadActores
FilmTitel := "tt4158110"
Gosub, LoadActores
FilmTitel := "tt0383164"
Gosub, LoadActores
}
;*/
Return
Tab3:
Return
;#########################################################################################################################
; ======================================================================================================================
LoadActores:
;imdb datenbank auslesen Seite 2
;https://www.autohotkey.com/boards/viewtopic.php?p=391696#p391696
UrlDownLoadToFile, % "https://www.imdb.com/title/" FilmTitel, html.txt
FileRead, html, html.txt
;FilmTitel := "tt0818165"
Doc := DocumentFromHTML(HTML)
CastObj := {}
CastList := Doc.querySelector("table.cast_list")
TableRows := CastList.getElementsByTagName("tr")
NumOfRows := TableRows.length
RowIndex := 1 ; erste Zeile überspringen
While (RowIndex < NumOfRows) {
TR := TableRows[RowIndex]
Actor := {}
; Zweites <td> Element der Zeile
Actor["Actor"] := Trim(TR.querySelector("td:nth-child(2)").innertext, " `t`r`n")
; Viertes <td> Element der Zeile
Actor["Character"] := Trim(TR.querySelector("td:nth-child(4)").innertext, " `t`r`n")
; <td> Element der Klasse "primary_photo"
TD := TR.querySelector("td.primary_photo")
Photo := {}
Photo["HREF"] := TD.querySelector("a").href
Img := TD.querySelector("img")
For Each, Attr In ["Height", "Width", "Alt", "Title", "Src", "Loadlate"]
Photo[Attr] := Img.getAttribute(Attr)
Actor["Photo"] := Photo
CastObj.Push(Actor)
RowIndex++
For Each, Object In Actor {
If IsObject(Object)
For K, var In Object
Obj2TreeVar .= RowIndex-1 ";" A_Index ";" k ";" var "`n"
Else
Obj2TreeVar .= (A_Index-1) ? (RowIndex-1 ";" 9 ";" "Character" ";" Object "`n") : (RowIndex-1 ";" 8 ";" "Actor" ";" Object "`n")
}
}
LoopCounter := RowIndex-1
; ======================================================================================================================
;Gui, Add, TreeView, w1000 r40 AltSubmit vTV gSubTV
;Obj2Tree(CastObj)
;Gui, Show, , ObjektTree
; ======================================================================================================================
propsAllArr := object()
Obj2TreeArr := object()
Loop, Parse, Obj2TreeVar, `n
{
ALoopField := A_LoopField
Split := StrSplit(ALoopField, ";")
Obj2TreeArr[Split.1, Split.2, Split.3] := Split[4]
If InStr(Split.4, "ref_")
{
HREFm := StrSplit(Split.4, "/")
Split[6] := "https://m.imdb.com/name/" HREFm[3]
Obj2TreeArr[Split.1, 11, "HREFm"] := Split[6]
Obj2TreeArr[Split.1, 12, "ActorID"] := HREFm[3]
}
; Split[7] := HREFm[3]
If InStr(Split.4, "_V1_")
{
ActorPictureSplit := StrSplit(Split.4, "_V1_") ; grosses ActorPicture
Split[5] := ActorPictureSplit[1] "_V1_.jpg"
Obj2TreeArr[Split.1, 10, "BigPicture"] := Split[5]
If !FileExist(FilmTitel "\Actors")
FileCreateDir, % FilmTitel "\Actors"
PicFileName := FilmTitel "\Actors\" FilmTitel A_Space HREFm[3] A_Space (Obj2TreeArr[Split.1, 8, "Actor"]) ".jpg" ; "tt0480249 nm0000226 Will Smith.jpg"
UrlDownLoadToFile, % Split[5], % PicFileName
Loop, % A_ScriptDir "\" FilmTitel "\Actors\*.jpg"
If InStr(A_LoopFilePath, (Obj2TreeArr[Split.1, 8, "Actor"]))
{
ALoopFileName := A_LoopFileName
If InStr(_V1_Counter, A_LoopFilePath)
continue
_V1_Counter .= A_LoopFilePath "|"
; https://www.autohotkey.com/boards/viewtopic.php?p=356281 by BoBo
; Eigenschaften/properties der Actoren aus Fotodatei laden
MaxGap := 12
SplitPath,% A_LoopFilePath, fileName, dirPath
Folder := ComObjCreate("Shell.Application").NameSpace(dirPath)
FolderItem := Folder.ParseName(fileName)
Gap := 0
While (Gap < MaxGap)
If (Value := Folder.GetDetailsOf(FolderItem, A_Index - 1))
{
ActorPicName := (A_Index - 1=0) ? (Value, Gap := 0) : ("", Gap := 0)
If ActorPicName
Obj2TreeArr[Split.1, 13, "ActorPicName"] := ActorPicName
ActorPicGröße := (A_Index - 1=1) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicGröße
Obj2TreeArr[Split.1, 14, "ActorPicGröße"] := ActorPicGröße
ActorPicDatum := (A_Index - 1=12) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicDatum
Obj2TreeArr[Split.1, 15, "ActorPicDatum"] := ActorPicDatum
ActorPicAutoren := (A_Index - 1=20) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicAutoren
Obj2TreeArr[Split.1, 16, "ActorPicAutoren"] := ActorPicAutoren
ActorPicCopyright := (A_Index - 1=25) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicCopyright
Obj2TreeArr[Split.1, 17, "ActorPicCopyright"] := ActorPicCopyright
ActorPicTitel := (A_Index - 1=21) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicTitel
Obj2TreeArr[Split.1, 18, "ActorPicTitel"] := ActorPicTitel
ActorPicAbmessungen := (A_Index - 1=31) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicAbmessungen
Obj2TreeArr[Split.1, 19, "ActorPicAbmessungen"] := ActorPicAbmessungen
ActorPicBewertung := (A_Index - 1=19) ? (Value ";", Gap := 0) : ("", Gap := 0)
If ActorPicBewertung
Obj2TreeArr[Split.1, 20, "ActorPicBewertung"] := ActorPicBewertung
propsAllArr[A_Index - 1] := Value
propsAll .= A_Index - 1 " : " Value " | ", Gap := 0
}
Else
Gap++
;msgbox,,%A_LineNumber%, % Obj2TreeArr[Split.1, 13, "ActorPicName"], .1
}
;FileDelete, % ALoopFileName "-allPictureDetails.txt"
;FileAppend, % propsAll, % ALoopFileName "-allPictureDetails.txt"
;Run, % ALoopFileName "-allPictureDetails.txt"
propsAll=""
}
If !FileExist(FilmTitel "\Actors")
FileCreateDir, % FilmTitel "\Actors"
; msgbox,,%A_LineNumber%, % Split[1] "`n" Split[2] "`n" Split[3] "`n" Split[4] "`n" Split[5] "`n" Split[6] "`n" Split[x]
}
Gosub, ListViewLoadActors
Test := true_
If Test
Loop, % LoopCounter
{
MsgBox,,Zeile: %A_LineNumber% | %A_Index% %A_Space% %xcounter% Obj2TreeArr, % ""
. FilmTitel "`n"
. Obj2TreeArr[A_Index, 12, "ActorID"] "`n"
. Obj2TreeArr[A_Index, 8, "Actor"] "`n"
. Obj2TreeArr[A_Index, 9, "Character"] "`n"
. Obj2TreeArr[A_Index, 3, "HREF"] "`n"
. Obj2TreeArr[A_Index, 4, "Loadlate"] "`n"
. Obj2TreeArr[A_Index, 10, "BigPicture"] "`n"
. Obj2TreeArr[A_Index, 11, "HREFm"] "`n"
. Obj2TreeArr[A_Index, 13, "ActorPicName"] "`n"
. Obj2TreeArr[A_Index, 14, "ActorPicGröße"] "`n"
. Obj2TreeArr[A_Index, 15, "ActorPicDatum"] "`n"
. Obj2TreeArr[A_Index, 16, "ActorPicAutoren"] "`n"
. Obj2TreeArr[A_Index, 17, "ActorPicCopyright"] "`n"
. Obj2TreeArr[A_Index, 18, "ActorPicTitel"] "`n"
. Obj2TreeArr[A_Index, 19, "ActorPicAbmessungen"] "`n"
. Obj2TreeArr[A_Index, 20, "ActorPicBewertung"],7
}
properties := ""
For i, v In propsAllArr {
properties .= i A_Tab v "`n"
}
;FileDelete, properties.txt
;FileAppend, % properties, properties.txt
;Run, properties.txt
MsgBox,,Zeile: #%A_LineNumber%, FERTIG!,1
Return
;#########################################################################################################################
; ======================================================================================================================
ListViewLoad:
Gui, ListView, LV
ListViewLoad := imdbArr[imdbArr["imdbID"], "Actors"] ";"
. imdbArr[imdbArr["imdbID"], "Awards"] ";"
. imdbArr[imdbArr["imdbID"], "BoxOffice"] ";"
. imdbArr[imdbArr["imdbID"], "Country"] ";"
. imdbArr[imdbArr["imdbID"], "Director"] ";"
. imdbArr[imdbArr["imdbID"], "DVD"] ";"
. imdbArr[imdbArr["imdbID"], "Genre"] ";"
. imdbArr[imdbArr["imdbID"], "imdbID"] ";"
. imdbArr[imdbArr["imdbID"], "imdbRating"] ";"
. imdbArr[imdbArr["imdbID"], "imdbVotes"] ";"
. imdbArr[imdbArr["imdbID"], "Language"] ";"
. imdbArr[imdbArr["imdbID"], "Metascore"] ";"
. imdbArr[imdbArr["imdbID"], "Plot"] ";"
. imdbArr[imdbArr["imdbID"], "Poster"] ";"
. imdbArr[imdbArr["imdbID"], "Production"] ";"
. imdbArr[imdbArr["imdbID"], "Rated"] ";"
. imdbArr[imdbArr["imdbID"], "Released"] ";"
. imdbArr[imdbArr["imdbID"], "Response"] ";"
. imdbArr[imdbArr["imdbID"], "Runtime"] ";"
. imdbArr[imdbArr["imdbID"], "Title"] ";"
. imdbArr[imdbArr["imdbID"], "totalSeasons"] ";"
. imdbArr[imdbArr["imdbID"], "Type"] ";"
. imdbArr[imdbArr["imdbID"], "Website"] ";"
. imdbArr[imdbArr["imdbID"], "Writer"] ";"
. imdbArr[imdbArr["imdbID"], "Year"] "`n"
FileAppend, % ListViewLoad "", ListViewLoad.txt
GuiControl, -Redraw, LV
LVcounter++
Img%LVcounter% := (imdbArr[imdbArr["imdbID"], "imdbID"]) ".jpg"
IL_Add(HIL, Img%LVcounter%, 0xFFFFFF, 1)
LV_Add("Icon" . LVcounter, "", StrSplit(ListViewLoad, ";")*)
lva_Refresh("LV")
lva_Refresh(LV)
GuiControl, +Redraw, LV
Return
;#########################################################################################################################
; ======================================================================================================================
ListViewLoadActors:
Gui, ListView, LVActors
/*
xRowsLVActors = FilmID|ActorID|Actor|Character|Loadlate|HREF|BigPicture|ActorPicName|ActorPicGröße|ActorPicAutoren|ActorPicDatum|ActorPicCopyright|ActorPicTitel|ActorPicAbmessungen|ActorPicBewertung
GuiControl, -Redraw, LVActors
LVcounterActors++
Img%LVcounterActors% := A_ScriptDir "\" FilmTitel "\Actors\" Obj2TreeArr[A_Index, 13, "ActorPicName"]
IL_Add(HILActors, Img%LVcounterActors%, 0xFFFFFF, 1)
LV_Add("Icon" . 999999, "", StrSplit(xRowsLVActors, "|")*)
GuiControl, +Redraw, LVActors
*/
Loop, % LoopCounter
{
If Obj2TreeArr[A_Index, 9, "Character"]
{
ListViewLoadActors := FilmTitel ";"
. Obj2TreeArr[A_Index, 12, "ActorID"] ";"
. Obj2TreeArr[A_Index, 8, "Actor"] ";"
. Obj2TreeArr[A_Index, 9, "Character"] ";"
. Obj2TreeArr[A_Index, 4, "Loadlate"] ";"
. Obj2TreeArr[A_Index, 3, "HREF"] ";"
. Obj2TreeArr[A_Index, 10, "BigPicture"] ";"
. Obj2TreeArr[A_Index, 13, "ActorPicName"] ";"
. Obj2TreeArr[A_Index, 14, "ActorPicGröße"] ";"
. Obj2TreeArr[A_Index, 16, "ActorPicAutoren"] ";"
. Obj2TreeArr[A_Index, 15, "ActorPicDatum"] ";"
. Obj2TreeArr[A_Index, 17, "ActorPicCopyright"] ";"
. Obj2TreeArr[A_Index, 18, "ActorPicTitel"] ";"
. Obj2TreeArr[A_Index, 19, "ActorPicAbmessungen"] ";"
. Obj2TreeArr[A_Index, 20, "ActorPicBewertung"] "`n"
; MsgBox,,%A_LineNumber% ActorPicName,% Obj2TreeArr[A_Index, 13, "ActorPicName"]
GuiControl, -Redraw, LVActors
LVcounterActors++
Img%LVcounterActors% := A_ScriptDir "\" FilmTitel "\Actors\" Obj2TreeArr[A_Index, 13, "ActorPicName"]
IL_Add(HILActors, Img%LVcounterActors%, 0xFFFFFF, 1)
LV_Add("Icon" . LVcounterActors, "", StrSplit(ListViewLoadActors, ";")*)
lva_Refresh("LVActors")
lva_Refresh(LVActors)
GuiControl, +Redraw, LVActors
}}
FileDelete, % FilmTitel "\Actors\" FilmTitel ".txt"
FileAppend, % ActorsSaveVar, % FilmTitel "\Actors\" FilmTitel ".txt"
Return
;#########################################################################################################################
; ======================================================================================================================
; Originally released by teadrinker -> https://www.autohotkey.com/boards/viewtopic.php?p=333543#p333543
; ======================================================================================================================
JSON2AHK_(JSON, Recursive := False) {
Local
Static Doc := ComObjCreate("htmlfile")
, __ := Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
, JS := Doc.parentWindow
If (!Recursive)
Obj := JSON2AHK(JS.eval("(" . JSON . ")"), True)
Else If !IsObject(JSON)
Obj := JSON
Else If (JSON.toString() != "[object Object]") {
Obj := []
Loop % JSON.length
Obj.Push(JSON2AHK(JSON[A_Index - 1], True) )
}
Else {
Obj := {}
Keys := JS.Object.keys(JSON)
Loop % Keys.length {
K := Keys[A_Index - 1]
Obj[K] := JSON2AHK(JSON[K], True)
}
}
Return Obj
}
;#########################################################################################################################
; ======================================================================================================================
JSON2AHK(JSON, Recursive := False) {
Local
Static Doc := ComObjCreate("htmlfile")
, __ := Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
, JS := Doc.parentWindow
If (!Recursive)
Obj := JSON2AHK(JS.eval("(" . JSON . ")"), True)
Else If !IsObject(JSON)
Obj := JSON
Else If (JSON.toString() != "[object Object]") {
Obj := []
Loop % JSON.length
Obj.Push(JSON2AHK(JSON[A_Index - 1], True) )
}
Else {
Obj := {}
Keys := JS.Object.keys(JSON)
Loop % Keys.length {
K := Keys[A_Index - 1]
Obj[K] := JSON2AHK(JSON[K], True)
}
}
imdbID := Obj[Obj["imdbID"], "imdbID"] := Obj["imdbID"] ; muss oben stehen
IfNotExist % (Obj[Obj["imdbID"], "imdbID"])
FileCreateDir % (Obj[Obj["imdbID"], "imdbID"])
imdbID := Obj[Obj["imdbID"], "imdbID"] := Obj["imdbID"] ; muss oben stehen
IfNotExist % (Obj[Obj["imdbID"], "imdbID"])
FileCreateDir % (Obj[Obj["imdbID"], "imdbID"])
KeysObjCount := Obj[Obj["imdbID"], "KeysObjCount"] := Obj.Count()
Actors := Obj[Obj["imdbID"], "Actors"] := Obj["Actors"]
Awards := Obj[Obj["imdbID"], "Awards"] := Obj["Awards"]
BoxOffice := Obj[Obj["imdbID"], "BoxOffice"] := Obj["BoxOffice"]
Country := Obj[Obj["imdbID"], "Country"] := Obj["Country"]
Director := Obj[Obj["imdbID"], "Director"] := Obj["Director"]
DVD := Obj[Obj["imdbID"], "DVD"] := Obj["DVD"]
Genres := Obj[Obj["imdbID"], "Genre"] := Obj["Genre"]
imdbRating := Obj[Obj["imdbID"], "imdbRating"] := Obj["imdbRating"]
imdbVotes := Obj[Obj["imdbID"], "imdbVotes"] := Obj["imdbVotes"]
Language := Obj[Obj["imdbID"], "Language"] := Obj["Language"]
Metascore := Obj[Obj["imdbID"], "Metascore"] := Obj["Metascore"]
Plot := Obj[Obj["imdbID"], "Plot"] := Obj["Plot"]
Poster := Obj[Obj["imdbID"], "Poster"] := Obj["Poster"]
IfNotExist % (Obj[Obj["imdbID"], "imdbID"]) "\" (Obj[Obj["imdbID"], "imdbID"]) ".jpg"
; UrlDownLoadToFile, % (Obj[Obj["imdbID"], "Poster"])
UrlDownLoadToFile, % StrReplace((Obj[Obj["imdbID"], "Poster"]), "SX300") ; grosses poster
, % (Obj[Obj["imdbID"], "imdbID"]) "\" (Obj[Obj["imdbID"], "imdbID"]) ".jpg"
IfNotExist % (Obj[Obj["imdbID"], "imdbID"]) ".jpg"
; UrlDownLoadToFile, % (Obj[Obj["imdbID"], "Poster"]) ; kleines poster <50KB
UrlDownLoadToFile, % StrReplace((Obj[Obj["imdbID"], "Poster"]), "SX300") ; grosses poster >50KB
, % (Obj[Obj["imdbID"], "imdbID"]) ".jpg"
Rated := Obj[Obj["imdbID"], "Rated"] := Obj["Rated"]
Released := Obj[Obj["imdbID"], "Released"] := Obj["Released"]
Response := Obj[Obj["imdbID"], "Response"] := Obj["Response"]
Runtime := Obj[Obj["imdbID"], "Runtime"] := Obj["Runtime"]
Title := Obj[Obj["imdbID"], "Title"] := Obj["Title"]
totalSeasons := Obj[Obj["imdbID"], "totalSeasons"] := Obj["totalSeasons"]
Type := Obj[Obj["imdbID"], "Type"] := Obj["Type"]
Website := Obj[Obj["imdbID"], "Website"] := Obj["Website"]
Writer := Obj[Obj["imdbID"], "Writer"] := Obj["Writer"]
Year := Obj[Obj["imdbID"], "Year"] := Obj["Year"]
Return Obj
}
;#########################################################################################################################
; ======================================================================================================================
; https://www.autohotkey.com/boards/viewtopic.php?p=388487#p388487 by BoBo
; ======================================================================================================================
omdb(req:="",year:="",p:=0,APIkey:="") {
if !req
Return "Missing parameter"
req := SubStr(req,1,2)="tt" ? "i=" . req . "&plot=full"
: (p > 0) ? "s=" . StrReplace(req,A_Space,"+") . "&y=" . year . "&page=" . p . "&plot=full"
: (req != "") ? "t=" . StrReplace(req,A_Space,"+") . "&y=" . year . "&plot=full"
: ""
myAPIkey:= APIkey ; http://omdbapi.com/apikey.aspx
reqURL := "http://www.omdbapi.com/?apikey="
. myAPIkey
. "&"
. req
; omdb := JSON.Load(UrlDownloadToVar(reqURL)) ; laden in ein object
omdb := UrlDownloadToVar(reqURL) ;
Return omdb
}
;#########################################################################################################################
; ======================================================================================================================
UrlDownloadToVar(url) {
req := ComObjCreate("Msxml2.XMLHTTP")
req.open("GET", url, False)
req.Send()
Return req.responseText
}
;#########################################################################################################################
; ======================================================================================================================
; https://www.autohotkey.com/boards/viewtopic.php?p=350106#p350106 by Teadrinker, modified by just me
; ======================================================================================================================
DocumentFromHTML(HTML) {
Local
Doc := ComObjCreate("htmlfile")
Doc.write("<meta http-equiv=""X-UA-Compatible"" content=""IE=9"">")
Doc.write(HTML)
Return Doc
}
;#########################################################################################################################
;-------------------------------------------------------------------------------------------------------------------------
; https://www.autohotkey.com/boards/viewtopic.php?p=389488#p389488
; ======================================================================================================================
; IL_SetSize(ILID, W, H)
; Function: Sets the dimensions of images in an image list and removes all images from the list.
; Parameters: ILID - The unique ID (HIMAGELIST) of the ImageList returned by IL_Create().
; W - The width, in pixels, of all images in the image list.
; H - The height, in pixels, of all images in the image list.
; Return values: Returns nonzero if successful, or zero otherwise.
; MSDN: http://msdn.microsoft.com/en-us/library/bb775224(VS.85).aspx
; Remarks: All images in an image list have the same dimensions.
; ======================================================================================================================
IL_SetSize(ILID, W, H) {
Return DllCall("ComCtl32.dll\ImageList_SetIconSize", "Ptr", ILID, "Int", W, "Int", H, "Int")
}
;#########################################################################################################################
;-------------------------------------------------------------------------------------------------------------------------
UPDATEDSCRIPT:
FileGetAttrib,attribs,%A_ScriptFullPath%
IfInString,attribs,A
{
FileSetAttrib,-A,%A_ScriptFullPath%
SplashTextOn,,,Updated script,
Sleep,1500
Reload
}
;SetTimer,UPDATEDSCRIPT,500
Return
;#########################################################################################################################
;-------------------------------------------------------------------------------------------------------------------------
SubTV:
If (A_GuiEvent = "Normal") && !TV_GetChild(A_EventInfo) {
Path := ""
ID := A_EventInfo
While (ID := TV_GetParent(ID)) {
TV_GetText(Txt, ID)
Path := Txt "`n" (Path <> "" ? "|" . Path : "") "`n" ID ; "`n`n" TV_GetParent(ID)
}
ToolTip, %Path%
}
;msgbox,,%A_LineNumber%, % Obj2TreeVar
; ======================================================================================================================
Obj2Tree(Obj, Parent := 0) {
For K, V In Obj {
If IsObject(V)
Obj2Tree(V, TV_Add(K, Parent, "Expand1"))
Else
TV_Add(V, TV_Add(K, Parent, "Expand1"))
}
}
;#########################################################################################################################
;-------------------------------------------------------------------------------------------------------------------------
Re: imdb datenbank auslesen
Moin effel,
bei den ; ? ging es mir nur um die 'verdrehte' Reihenfolge.
Nun zum Array:
ist ein dreidimensionales Array. In Deinem Skript werden einem Hauptindex mehrere Werte mit unterschiedlichem Unterindex zugewiesen. Hauptindex enthält damit ein eigenes Array. Das ist ok.
Nun wird aber jedem Unterindex nur genau ein Schlüssel zugewiesen, und diesem wieder genau ein Wert. Jeder Unterindex enthält damit ein assoziatives Array mit einem Schlüssel/Wert-Paar. Und das erschließt sich mir nicht.
Du verhinderst damit den direkten Zugriff auf einen Wert über einen eindeutigen Schlüssel, weil der immer in einer ebenfalls eindeutigen Unterindex-Dimension gekapselt ist. Ich kann keinen adäquaten Vorteil erkennen.
bei den ; ? ging es mir nur um die 'verdrehte' Reihenfolge.
Nun zum Array:
Code: Select all
MeinArray[Hauptindex, Unterindex, Schlüssel] := Wert
Nun wird aber jedem Unterindex nur genau ein Schlüssel zugewiesen, und diesem wieder genau ein Wert. Jeder Unterindex enthält damit ein assoziatives Array mit einem Schlüssel/Wert-Paar. Und das erschließt sich mir nicht.
Du verhinderst damit den direkten Zugriff auf einen Wert über einen eindeutigen Schlüssel, weil der immer in einer ebenfalls eindeutigen Unterindex-Dimension gekapselt ist. Ich kann keinen adäquaten Vorteil erkennen.