imdb datenbank auslesen Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: imdb datenbank auslesen

22 Mar 2021, 06:19

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, :thumbup:
effel
Posts: 542
Joined: 16 Jan 2018, 13:34

Re: imdb datenbank auslesen

22 Mar 2021, 15:58

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:

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/

BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: imdb datenbank auslesen

23 Mar 2021, 01:27

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?
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?
just me
Posts: 9425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: imdb datenbank auslesen

23 Mar 2021, 03:33

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.

Code: Select all

JSON := Doc.querySelector("script[type='application/ld+json']").innerText
effel
Posts: 542
Joined: 16 Jan 2018, 13:34

Re: imdb datenbank auslesen

24 Mar 2021, 15:37

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.


forum2403.jpg
forum2403.jpg (136.13 KiB) Viewed 2036 times



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
}


;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################


;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################


;-------------------------------------------------------------------------------------------------------------------------
;#########################################################################################################################



BoBo wrote:
23 Mar 2021, 01:27
...das vom Anbieter retournierte JSON
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.
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: imdb datenbank auslesen

25 Mar 2021, 02:11

@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 :mrgreen:
just me
Posts: 9425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: imdb datenbank auslesen

25 Mar 2021, 05:01

Moin @effel,

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)
Das kannst Du an den Anfang des Skripts setzen. Es sollte nur einmal ausgeführt werden.

Code: Select all

LV_SetImageList(HIL, 1)
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:

Code: Select all

...
IconIndex := IL_Add(HIL, "Downgeloadetes.jpg", 0xFFFFFF, 1)
LV_Add("Icon" . IconIndex, ...)
...
Wenn Du kein Icon hast, nimmst Du einen ungültigen Index wie z.b. 99999
effel
Posts: 542
Joined: 16 Jan 2018, 13:34

Re: imdb datenbank auslesen

26 Mar 2021, 19:08

Hallo,

Danke Just Me das hilft mir weiter

#1.jpg
#1.jpg (107.69 KiB) Viewed 1945 times

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.
effel
Posts: 542
Joined: 16 Jan 2018, 13:34

Re: imdb datenbank auslesen

26 Mar 2021, 19:11

BoBo wrote:
25 Mar 2021, 02:11
...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...
Danke @BoBo das kommt in einem anderen Tab, dieser Part war erstmal lernen wie das geht
effel
Posts: 542
Joined: 16 Jan 2018, 13:34

Re: imdb datenbank auslesen

28 Mar 2021, 15:01

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?

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>&nbsp;&raquo;
        </div>
@garry schau mal hier gibt es noch einiges mehr

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   
---------------------------
*/ ;###############################################################################################################

garry
Posts: 3740
Joined: 22 Dec 2013, 12:50

Re: imdb datenbank auslesen

29 Mar 2021, 02:39

@effel danke,jetzt ist auch der link ersichtlich , Biographie zu den Personen
just me
Posts: 9425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: imdb datenbank auslesen

29 Mar 2021, 11:23

Moin effel,

auf die Tabellendaten kann man natürlich auch per HTMLDOM zugreifen. Ich stelle morgen etwas ein.
just me
Posts: 9425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: imdb datenbank auslesen

30 Mar 2021, 04:52

Moin,

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")
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

Code: Select all

TableRows := CastList.getElementsByTagName("tr")
NumOfRows := TableRows.length
auslesen. Auf die einzelnen Reihen kann man per Index zugreifen

Code: Select all

RowIndex := 0 ; das erste Element hat den Index 0
While (RowIndex < NumOfRows) {
   TableRow := TableRows[RowIndex]
   RowIndex++
}
Die TabellenReihen bestehen widerum aus Zellen <td>. Um die auszulesen, erweitern wir das letzte Beispiel:

Code: Select all

RowIndex := 0 ; das erste Element hat den Index 0
While (RowIndex < NumOfRows) {
   Cols := TableRows[RowIndex].getElementsByTagName("td")
   RowIndex++
}
Und die einzelnen Zellen lassen sie auch per Index ansprechen. Das soll das letzte Beispiel veranschaulichen:

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++
}
Je nachdem, welche Informationen man auslesen will, muss das angepassst werden.
effel
Posts: 542
Joined: 16 Jan 2018, 13:34

Re: imdb datenbank auslesen

01 Apr 2021, 10:54

Hallo,

vielen Dank für deine Mühen, das funktioniert wie erhofft

Ich versuche an weitere Daten innerhalb dieser Abfrage zu kommen.

res.jpg
res.jpg (24.24 KiB) Viewed 1757 times

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>
"/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"


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>&nbsp;&raquo;
        </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"
*/
just me
Posts: 9425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: imdb datenbank auslesen

03 Apr 2021, 03:16

Moin,

ich melde mich nachher noch mal.

Bis dann!
just me
Posts: 9425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: imdb datenbank auslesen

03 Apr 2021, 04:58

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.

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>&nbsp;&raquo;
</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"))
   }
}
effel
Posts: 542
Joined: 16 Jan 2018, 13:34

Re: imdb datenbank auslesen

05 Apr 2021, 16:58

just me wrote:
03 Apr 2021, 04:58
HTML-Zauberei
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"))
   }
}

just me
Posts: 9425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: imdb datenbank auslesen

06 Apr 2021, 06:37

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:

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 . ";"
   }
}
*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:

Code: Select all

Loop, % LoopCounter
{
   ActorsSaveVar .= FilmTitel
   For Each, Key In KeyArray
      ActorsSaveVar .= ";" . Obj2TreeArr[A_Index, Key]
   ActorsSaveVar .= "`n
   ...
}
Und wenn die Ausgaben wie in Deinem Skript sowieso eine festgelegte Reihenfolge haben, ist selbst das überflüssig.
effel
Posts: 542
Joined: 16 Jan 2018, 13:34

Re: imdb datenbank auslesen

06 Apr 2021, 10:16

just me wrote:
06 Apr 2021, 06:37
...Anmerkungen...
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

20210406162359.jpg
20210406162359.jpg (42.02 KiB) Viewed 1647 times


Ich merge grade zwei Script Dateien, langsam nimmt es Form an.

just me wrote:
06 Apr 2021, 06:37
Ich frage mich auch, wofür Du die eingeschobene Arraydimension Obj2TreeArr[Split.1, 13, "ActorPicName"] := ActorPicName brauchst
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"))
   }
}

;#########################################################################################################################
;-------------------------------------------------------------------------------------------------------------------------


Unbenannt.png
Unbenannt.png (241.01 KiB) Viewed 1647 times
just me
Posts: 9425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: imdb datenbank auslesen

07 Apr 2021, 04:14

Moin effel,

bei den ; ? ging es mir nur um die 'verdrehte' Reihenfolge.

Nun zum Array:

Code: Select all

MeinArray[Hauptindex, Unterindex, Schlüssel] := Wert
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.

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: gero, Helmut2 and 42 guests