AppleScript: merkwürdiges Problem in iTunes Script

maceis

maceis

Aktives Mitglied
Thread Starter
Dabei seit
24.09.2003
Beiträge
16.880
Reaktionspunkte
626
Hallo zusammen,

ich bin gerade über ein merkwürdiges Problem in Applescript gestolpert.
Und zwar kann ich innerhalb eines "tell Application "iTunes""-Blocks alle Eigenschaften aus einem date object extrahieren, nur das Jahr nicht. Außerhalb des tell-Blocks geht es dann aber wieder.
Code:
tell application "iTunes"
    set myList to every track whose album contains "bla bla"
    set myDate to date added of item 1 of myList as date
    set myWeekday to weekday of myDate
    set myDay to day of myDate
    set myTime to time string of myDate
    set myDateString to date string of myDate
    --set myYear to year of myDate
end tell
set myYear to year of myDate

Für das auskommentierte Kommando erhalte ich den Fehler:
error "„iTunes“ hat einen Fehler erhalten: „year of date \"Freitag, 2. Januar 2015 um 19:19:15\"“ kann nicht gelesen werden." number -1728 from year of date "Freitag, 2. Januar 2015 um 19:19:15"

Eigentlich wollte ich ein Script schreiben, dass alle Tracks abarbeitet die in einem bestimmten Jahr hinzugefügt wurden.
Hat jemand eine Ahnung woher das Problem kommt, bzw. wie ich das umgehen kann.
Ich verwende MacOS Version 10.14.3.

Danke und Gruß
maceis
 
Guten Abend,

das Jahr ist ein Attribut vom Titel innerhalb des iTunes-Blocks.
D.h. das Schlüsselwort ist reserviert und erwartet ein Objekt vom Typ/Klasse Track.

Generell sollten immer alle Anweisungen, die nicht in direktem Zusammenhang mit der angesprochenen Anwendungen stehen, in einem einem “tell me” (was immer das Skript selbst ist) ausgelagert werden.
Ansonsten strapaziert man eine Anwendung unnötig.

Bei so kleinen Sachen kein Problem.
Aber wenn das in eine Schleife kommt, dann ist das unnötig.

Machen Dir einfach eine kleine Methode:
on isInFavoriteYear(someYear)
Darin kannst Du dann einfach true und false zurückgeben.

Viele Grüße
 
das Jahr ist ein Attribut vom Titel innerhalb des iTunes-Blocks.
D.h. das Schlüsselwort ist reserviert und erwartet ein Objekt vom Typ/Klasse Track.
Danke. Damit ist klar, warum ausgerechnet das Jahr anders funktioniert.
Hätte man auch selbst drauf kommen können, aber ich ich mach nur noch selten was in AS.

Das mit "tell me" hab ich auf die schnelle nicht hinbekommen.
tell me to set myYear to (year of myDate)
So gehts jedenfalls nicht.

Ich hab das Script zwar schon anderweitig umgemodelt, so dass ich ein Start- und Enddatum verwenden kann, wüsste aber gerne, wie ich das mit "tell me" umsetzen müsste.

Gruß
maceis
 
Siehe unten, so würde ich es machen…

Bin gerade selbst überrascht, dass "tell me" nicht (mehr) geht.
Alternativ kannst Du auch "System Events" nehmen.

Viele Grüße

Code:
--

property pFavoriteYear : 2018

--

my runMyTunesAction()

--

on runMyTunesAction()
	
	--
	
	tell application "iTunes"
		
		--
		
		set theSelection to selection
		
		if ((count of theSelection) < 1) then
			
			return {}
			
		end if
		
		--
		
		set theFilteredList to {}
		
		--
		
		repeat with nTrack in theSelection
			
			--
			
			set myDate to date added of nTrack
			
			--
			
			if (my isFavoriteYearFromDate(myDate) is true) then
				
				--
				
				set end of theFilteredList to nTrack
				
				--
				
			end if
			
			--
			
		end repeat
		
		--
		
		return theFilteredList
		
		--
		
	end tell
	
	--
	
end runMyTunesAction

--

on isFavoriteYearFromDate(aDate)
	
	--
	
	if (year of aDate is not pFavoriteYear) then
		
		return false
		
	end if
	
	--
	
	return true
	
	--
	
end isFavoriteYearFromDate

--
 
Danke für Deine Mühe.
Mit "System Events" klappt es.
Laut Doku verweist "me" auf das Skript Objekt.
Warum das innerhalb "tell ... "iTunes"" nicht funktioniert, wollte ich nicht mehr vertiefen.
Jedenfalls hab ich wieder was dazu gelernt (hoffentlich bleibt's hängen)

Gruß
maceis
 
Zurück
Oben Unten