# Applescript: générer un fichier html avec iTunes



## ramien (28 Août 2010)

Bonjour à tous.

Je souhaite générer un fichier html dans lequel se trouve le nom de la piste jouée par iTunes ainsi que le nom de l'artiste.

Étant débutant en applescript j'ai eu la chance de tomber sur le script de Doug trackReporter.
Il permet de créer le fichier html que je souhaite.
Cependant j'aurai voulu que le script sépare le nom de la piste et le nom de l'artiste dans deux div  différentes.

Voici le code de trackReporter:

```
-- declare variables for later use
global sample_frequency -- how often we should check iTunes
global itunes_active -- if iTunes is active or not
global User_choice -- option returned from initial dialog display
global data_dir -- directory where log file lives
global file_name -- name of log file
global data_file -- the concatenated directory and name
global theTune -- current song and artist in comma list
global ftp_address -- for ftp upload
global ftp_user -- for ftp upload
global ftp_password -- for ftp upload
global dirty_path -- for ftp upload
global start_disk -- name of the startup disk

-- grab the name of our start up disk
set start_disk to "/" & searchReplace(path to startup disk as string, ":", "")

-- choose local folder to save the file to
set data_dir to choose folder with prompt "Choose the folder to save the local log file to."

-- enter the file name and indicate how often to update it
display dialog "Enter a name for the log file and indicate how often you want to update it:" default answer "currentTrack.html" buttons {"15", "30", "60"} default button 1
set dialogInfo to result
set selectedButton to button returned of dialogInfo
get selectedButton
set sample_frequency to selectedButton
set file_name to text returned of dialogInfo

set data_file to data_dir & file_name

-- enter ftp address and directory
display dialog "Enter the FTP address that you wish to upload the logfile to:" default answer "ftp://ftp.YOURDOMAIN.com"
set dialogInfo to result

set ftp_address to text returned of dialogInfo

-- enter the username
display dialog "Enter the FTP username:" default answer "FTP_USERNAME"
set dialogInfo to result

set ftp_user to text returned of dialogInfo

-- enter the password
display dialog "Enter the FTP password:" default answer "FTP_PASSWORD"
set dialogInfo to result

set ftp_password to text returned of dialogInfo

-- start of monitoring section
on idle
	-- check if itunes is running
	set itunes_active to false
	
	tell application "Finder"
		if (get name of every process) contains "iTunes" then set itunes_active to true
	end tell
	
	-- if itunes is running then we are go
	if itunes_active then
		tell application "iTunes"
			
			-- if itunes is playing
			if player state is playing then
				
				-- get info on current track
				try
					my getCurrentTrack()
					my write_to_file(theTune, data_file, true)
					my uploadFile()
				on error -- playing but not started track yet
					my getCurrentTrack()
					my write_to_file(theTune, data_file, true)
					my uploadFile()
				end try
			else
				
				-- itunes is active but not playing so check back shortly 
				set idle_time to 15
				
			end if
			
		end tell
		
		set idle_time to sample_frequency
		
	else
		-- itunes is not currently active so wait a minute before checking again
		set idle_time to 60
		
	end if
	
	return idle_time
	
end idle

--
-- subroutineto get the current track from itunes
--
on getCurrentTrack()
	
	tell application "iTunes"
		set theTitle to name of current track
		set theArtist to artist of current track
	end tell
	
	set theTune to theTitle & "|" & theArtist as string
	
end getCurrentTrack


--function to write the track name to text file and upload it
on write_to_file(this_data, target_file, append_data)
	
	try
		set the target_file to the target_file as text
		set the open_target_file to open for access file target_file with write permission
		--if append_data is false then ¬
		set eof of the open_target_file to 0
		--write this_data to the open_target_file --starting at eof
		-- comment below line out if you don't want HTML headers and footers
		write "<HTML><HEAD></HEAD><BODY>" & this_data & "</BODY></HTML>" to the open_target_file --starting at eof
		-- Uncomment if you want no HTML headers or footers
		--write this_data to the open_target_file --starting at eof
		close access the open_target_file
		return true
	on error error_message number error_number
		return error_message
	end try
	
end write_to_file

--
-- subroutine to upload the file
--
on uploadFile()
	try
		with timeout of 30 seconds
			set theText to ":" & data_dir
			set dirty_path to searchReplace(theText, ":", "/")
			
			set shellCommand to "cd " & searchReplace(dirty_path, start_disk, "") & ";curl -s -m 120 -T " & file_name & " -u " & ftp_user & ":" & ftp_password & " " & ftp_address
			-- ===============================
			-- uncomment the next line for debugging
			-- ===============================
			-- display dialog shellCommand
			do shell script shellCommand
		end timeout
	on error error_message number error_number
		tell application (path to frontmost application as text)
			beep
			display dialog the error_message buttons {"Cancel"} default button 1
		end tell
	end try
end uploadFile

--
-- subroutine to fix the applescript urls to work with the unix curl command
--
on searchReplace(theText, SearchString, ReplaceString)
	set OldDelims to AppleScript's text item delimiters
	set AppleScript's text item delimiters to SearchString
	set newText to text items of theText
	set AppleScript's text item delimiters to ReplaceString
	set newText to newText as text
	set AppleScript's text item delimiters to OldDelims
	return newText
end searchReplace


--
-- sub routine to handle quit requests
--
on quit
	my write_to_file("OFFLINE", data_file, true)
	my uploadFile()
	continue quit
end quit
```

Je pense que la partie qui m'interesse se trouve içi:
write "<HTML><HEAD></HEAD><BODY>" & this_data & "</BODY></HTML>" to the open_target_file --starting at eof

J'ai donc essayé de rajouter le code pour deux div, ce qui donne:

write "<HTML><HEAD></HEAD><BODY><div id="titre">" &</div> this_data <div id="artiste">& "</div></BODY></HTML>" to the open_target_file --starting at eof

Bien sur cela ne fonctionne pas.

Si quelqu'un a une petite idée à ce sujet...


----------



## Anonyme (28 Août 2010)

Bonjour,

Deux modifications à faire :
1-

```
write "<HTML><HEAD></HEAD><BODY><div id=\"titre\">" & item 1 of this_data & "</div><div id=\"artiste\">" & item 2 of this_data & "</div></BODY></HTML>" to the open_target_file --starting at eof
```

2- Dans la fonction *getCurrentTrack()* remplace la ligne set theTune to theTitle & "|" & theArtist as string
par cette ligne 
	
	



```
set theTune to {theTitle, theArtist}
```
.


----------



## ramien (31 Août 2010)

Bonjour,
merci pour ton aide. 

j'ai remplacer le code.
puis j'ai compilé le script, mis dans le répertoire script iTunes, lancé iTunes puis le script.
Le script se lance, il me demande donc la racine d'un répertoire pour le .html les accès ftp.
Cependant, après avoir mis mon mot de passe le script se ferme tout seul.

Je ne sais pas trop à quoi cela est dû. Peut être à l'extension du fichier.
Sur le fichier récupérer chez Doug l'extension est un .reporter je ne sais pas si cela à une quelconque valeur.


----------



## Anonyme (31 Août 2010)

Bonjour,


Je viens de tester le script *Track.reporter* et aucun problème ici.

Mais si le dossier ou son chemin contient un espace ou un caractère réservés du shell, il y aura une erreur.
Remplace la ligne de l'upload par celui-ci : 

```
set shellCommand to "cd " & (quoted form of searchReplace(dirty_path, start_disk, "")) & ";/usr/bin/curl -s -m 120 -T " & file_name & " -u " & ftp_user & ":" & ftp_password & " " & ftp_address
```


Ton problème principal doit être (le type du script)  en l'enregistrant .

*Solution :* 
ouvre *Track.reporter* dans l'éditeur de script
Fais "Enregistrer sous.."
Sélectionne "*Application*" pour le format du fichier si tu as (Snow Leopard) , "*Progiciel*" pour Leopard ou moins
Coche "*Rester en arrière-plan*"
Décoche "*Écran de démarrage*" et "*Exécutable seulement*".
Cic sur le bouton "Enregistrer".

Teste-le. si ça fonctionne, enregistre-le  avec les mêmes réglages sauf coche "Exécutable seulement", pour que personne ne puisse voir le mot de passe, car on ne pourra plus le décompiler.


----------



## ramien (1 Septembre 2010)

Nickel ça fonctionne parfaitement, je te remercie.
En effet je l'enregistrai en tant qu'application alors que je suis sur Leopard.

En fait le but de ce script serai d'afficher sur la sidebar d'un blog type wordpress la musique jouée par iTunes.
Par la suite j'aimerai aussi qu'il upload la jaquette en l'ayant redimensionner en petite taille environ 50x50px.

Du coup les div me permettent de leurs ajouter des propriétés css.
Cependant je me demande si le fichier html doit faire appel à une feuille de style,
ou si cet élément html intégré à la page sera régit par les propriétés css de l'index.html.

Je ne sais pas trop si je suis clair ^o)  
Bref en tout cas merci beaucoup de ton aide


----------



## Anonyme (1 Septembre 2010)

Bonjour,

Pour l'upload de la jaquette, voici les trois fonctions modifiées ( on getCurrentTrack(), on write_to_file(this_data, target_file, append_data) et on uploadFile()).

```
on getCurrentTrack()
	
	tell application "iTunes" to tell current track
		set theTitle to name
		set theArtist to artist
		if exists artworks then
			set t_data to data of artwork 1
		else -- aucun artwork
			--  image d'un point d'interogation
			set t_data to «data PICT03640000000000320032001102FF0C00FFFE00000048000000480000000000000032003200000000001F800080008000001E0001000A000000000032003282000000029C000000010000000000000000000000000000000100000000000000000000000000004000000000000000000000000000000000400000000000320032000003000000000000000056706E67200000000000000000000000006170706C000000000000040000320032004800000048000000000202000103504E47000000000000000000000000000000000000000000000000000000000018FFFF89504E470D0A1A0A0000000D4948445200000032000000320802000000915D1FE6000000097048597300000B1300000B1301009A9C18000001B4494441545809ED563DCA8340108D1FB10868914ED24B2CBD416CBC8720E805D26A9163A44B95C63EA710827636365616B108A409C46FC28224B84566768510760B19C7F979BE37EEAAF57D3FFBBEF5F77D909E88142C8C2E8A2DC51686014C2C65B6B85B1DD78941F216ABC92DF7565BE086C29640BB4F5325C09A826F25E2A7023EE3E698607E2C8858555559969665B9AE6B18063F0EE585A222EB72B9F8BE3F745C2C16C7E351A420CB9D099688A208301D0E87B66DB32CB36D1B6EF33C7F3C1E2295E9B058E3DD6E97A6E98000A80258E01C3C34033D5BD046D334E8CDAE4992803DACD56A05367B34382906ED6DB859F7FBDDF3BCE57259D73537E073275DC4718F300C755D3F9D4EEC91C8784983B5DFEF413B98FA315C82470EACDBED669A661CC70404DC140967224C745114D7EB75B3D950A69B972307D6F97C86E28EE3F05A507C7260ADD7EBED76CB76070A8A51CE4FFF41C0A6100441D334A3D7263AE48808BF0F702C765D4744314AA388089FB484E36504E5D54181F59A3F914D1411089B08102BFB5B6C4D4A1514278AA8604DCD00A6BE1251B185610013AB664BB185610013AB664BB185610013FBA5B3F50FC1722669AF16BDEA0000000049454E44AE426082000700AE007C0007000100010003000300040000000D000C00100032003200E400E400280017000E10517569636B54696D65AA20657420756E0000280019000C11648E636F6D707265737365757220504E470028001B000027736F6E742072657175697320706F757220766973696F6E6E657220636574746520696D6167652E000000FF»
		end if
	end tell
	set theTune to {theTitle, theArtist, t_data}
end getCurrentTrack


--function to write the track name to text file and upload it
on write_to_file(this_data, target_file, append_data)
	
	try
		set the target_file to the target_file as text
		set the open_target_file to open for access file target_file with write permission
		--if append_data is false then ¬
		set eof of the open_target_file to 0
		--write this_data to the open_target_file --starting at eof
		-- comment below line out if you don't want HTML headers and footers
		write "<HTML><HEAD></HEAD><BODY><div id=\"titre\">" & item 1 of this_data & "</div><div id=\"artiste\">" & item 2 of this_data & "</div></BODY></HTML>" to the open_target_file --starting at eof
		-- Uncomment if you want no HTML headers or footers
		--write this_data to the open_target_file --starting at eof
		close access the open_target_file
	on error error_message number error_number
		return error_message
	end try
	
	
	set pictFile to (data_dir as string) & "artwork_of_current_track.jpg"
	try
		set the open_target_file to open for access file pictFile with write permission
		set eof open_target_file to 0
		write "" to open_target_file starting at eof -- efface le contenu du fichier
		set eof open_target_file to 512
		write (item 3 of this_data) to open_target_file starting at 513 -- fichier en format pict 
		close access the open_target_file
	on error error_message number error_number
		try
			close access pictFile
		end try
		return error_message
	end try
	-- converti le pict au format JPEG, 50 pixels x 50 pixels
	do shell script "/usr/bin/sips -z 50 50 -s format jpeg " & quoted form of POSIX path of pictFile
	return true
end write_to_file

--
-- subroutine to upload the file
--
on uploadFile()
	try
		with timeout of 30 seconds
			set theText to ":" & data_dir
			set dirty_path to searchReplace(theText, ":", "/")
			
			set shellCommand to "cd " & (quoted form of searchReplace(dirty_path, start_disk, "")) & ";/usr/bin/curl -s -m 120 -T " & file_name & " -u " & ftp_user & ":" & ftp_password & " " & ftp_address & " && /usr/bin/curl -s -m 120 -T artwork_of_current_track.jpg -u " & ftp_user & ":" & ftp_password & " " & ftp_address
			
			-- ===============================
			-- uncomment the next line for debugging
			-- ===============================
			-- display dialog shellCommand
			do shell script shellCommand
			
		end timeout
	on error error_message number error_number
		tell application (path to frontmost application as text)
			beep
			display dialog the error_message buttons {"Cancel"} default button 1
		end tell
	end try
end uploadFile
```


Pour le *css*, je n&#8217;y connais rien, si tu n'as pas de réponses ici, le mieux est de poser ta question dans le forum "*Développement web*".


----------



## ramien (2 Septembre 2010)

Je suis passer aujourd'hui sur iTunes 10 je sais pas si les scripts fonctionnent toujours dessus.
Quand je l'exécute il me met "The Command exited with a non-zero status" puis se ferme.

En tout cas merci vraiment de ton aide, j'espère pouvoir l'essayer au plus vite.
Pour le css j'ai surement trouver la solution: faire un include en php sur la page.
Mais du coup pour cela il faudrai que le fichier soit enregistrer en .inc.php avec seulement les div et non plus le head et body.
J'ai essayer en les supprimant mais cela ne fonctionne pas.


----------



## Anonyme (2 Septembre 2010)

ramien a dit:


> Je suis passer aujourd'hui sur iTunes 10 je sais pas si les scripts fonctionnent toujours dessus.
> Quand je l'exécute il me met "The Command exited with a non-zero status" puis se ferme.



Ici, le script fonctionne sans problème avec *iTunes 10*.

Ton erreur est  dans la commande *curl* de l'upload.
Est-ce que tu as modifié quelque chose dans cette commande  ?


----------



## ramien (3 Septembre 2010)

Après moultes péripéties j'ai enfin trouver la solution pour l'intégrer à ma sidebar.
Cela marche parfaitement, encore bravo.

Si tu a encore un peu de temps à m'accorder j'aimerai y apporter encore quelques modifications:
1- Rentrez directement les configurations (racine du dossier, adresse ftp, log) dans le script afin de n'avoir juste à l'activer sur iTunes pour qu'il se mette en route.
2- Pouvoir afficher en tête le morceaux joué puis les 2 derniers qui ont été joués.
3- Lorsque que iTunes ne joue rien ou est fermé gardez quand même les dernieres infos

ps: lorsque le script tourne il m'arrive souvent d'avoir la fenêtre avec le message "The Command exited with a non-zero status", mais il continu a fonctionner.


----------



## ramien (3 Septembre 2010)

ps2: comment transforme tu une image en code ?
Si mes recherches sont exactes, ton image est au format PICT. 
J'ai essayé de me faire une image sur photoshop, puis de l'enregistrer au format .pct mais je ne vois pas comment récupérer le code.


----------



## Anonyme (4 Septembre 2010)

ramien a dit:


> ps2: comment transforme tu une image en code ?


*Le plus simple :*
Dans Itunes  : mets ton image dans un piste, sélectionne cette piste

Exécute ce script dans l'éditeur de script

```
tell application "iTunes" to tell item i of (get selection)
	data of artwork 1 -- 2 si l'image est ajouté à une image existante
end tell
```
Récupère le code dans l'onglet "Résultat" de la fenêtre de l'éditeur de script.


----------



## ramien (4 Septembre 2010)

Erreur:
"La variable i n'est pas définie"

---------- Nouveau message ajouté à 05h48 ---------- Le message précédent a été envoyé à 05h42 ----------

en fait c'est bon j'ai remplacé le i par 1 cela fonctionne 

---------- Nouveau message ajouté à 06h01 ---------- Le message précédent a été envoyé à 05h48 ----------






a tu une idée d'où pourrai venir le problème de transcription des caractères spéciaux. (à/é/ù...) ?


----------



## Anonyme (4 Septembre 2010)

Bonjour,

Voici le script : il faut remplir les informations FTP dans les trois premières lignes du on run, remplacer les ******** par vos infos

```
global ftp_Login, data_dir, t_id, ecrit

on run
	set ftp_address to "ftp.********" -- votre adresse FTP 
	set ftp_user to "********" --  nom d'utilisateur FTP
	set ftp_password to "****" -- votre mot de passe FTP	
	
	set temppath to path to temporary items
	tell application "Finder" to set data_dir to (make new folder at temppath) as alias
	set ftp_Login to ftp_user & ":" & ftp_password & " " & ftp_address
	set t_id to 0
	set rc to character id 10
	try
		("" & data_dir & "currentTrack.html") as alias --le fichier existe, garde les dernieres infos
	on error
		-- le fichier n'existe pas, creation du fichier html, contient aucun texte
		do shell script "cd " & (quoted form of POSIX path of data_dir) & " && /bin/echo '<HTML><HEAD><meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"></HEAD><BODY>" & rc & "<div id=\"titre\"></div><div id=\"artiste\"></div>" & rc & "<div id=\"titre\"></div><div id=\"artiste\"></div>" & rc & "<div id=\"titre\"></div><div id=\"artiste\"></div>" & rc & "</BODY></HTML>' > currentTrack.html"
	end try
end run

on idle
	try
		tell application "iTunes" to if running and player state is playing then my getCurrentTrack()
	end try
	return 15 -- nombre de secondes avant la prochaibe vérification
end idle

on getCurrentTrack() -- subroutineto get the current track from itunes
	tell application "iTunes" to tell current track
		set currID to database ID
		if currID is not t_id then -- piste différente
			set ecrit to false
			if exists artworks then
				set t_data to data of artwork 1
			else -- aucun artwork, crée une image d'un point d'interogation
				set t_data to «data PICT03640000000000320032001102FF0C00FFFE00000048000000480000000000000032003200000000001F800080008000001E0001000A000000000032003282000000029C000000010000000000000000000000000000000100000000000000000000000000004000000000000000000000000000000000400000000000320032000003000000000000000056706E67200000000000000000000000006170706C000000000000040000320032004800000048000000000202000103504E47000000000000000000000000000000000000000000000000000000000018FFFF89504E470D0A1A0A0000000D4948445200000032000000320802000000915D1FE6000000097048597300000B1300000B1301009A9C18000001B4494441545809ED563DCA8340108D1FB10868914ED24B2CBD416CBC8720E805D26A9163A44B95C63EA710827636365616B108A409C46FC28224B84566768510760B19C7F979BE37EEAAF57D3FFBBEF5F77D909E88142C8C2E8A2DC51686014C2C65B6B85B1DD78941F216ABC92DF7565BE086C29640BB4F5325C09A826F25E2A7023EE3E698607E2C8858555559969665B9AE6B18063F0EE585A222EB72B9F8BE3F745C2C16C7E351A420CB9D099688A208301D0E87B66DB32CB36D1B6EF33C7F3C1E2295E9B058E3DD6E97A6E98000A80258E01C3C34033D5BD046D334E8CDAE4992803DACD56A05367B34382906ED6DB859F7FBDDF3BCE57259D73537E073275DC4718F300C755D3F9D4EEC91C8784983B5DFEF413B98FA315C82470EACDBED669A661CC70404DC140967224C745114D7EB75B3D950A69B972307D6F97C86E28EE3F05A507C7260ADD7EBED76CB76070A8A51CE4FFF41C0A6100441D334A3D7263AE48808BF0F702C765D4744314AA388089FB484E36504E5D54181F59A3F914D1411089B08102BFB5B6C4D4A1514278AA8604DCD00A6BE1251B185610013AB664BB185610013AB664BB185610013FBA5B3F50FC1722669AF16BDEA0000000049454E44AE426082000700AE007C0007000100010003000300040000000D000C00100032003200E400E400280017000E10517569636B54696D65AA20657420756E0000280019000C11648E636F6D707265737365757220504E470028001B000027736F6E742072657175697320706F757220766973696F6E6E657220636574746520696D6167652E000000FF»
			end if
			
			set ecrit to my write_to_file(get name, get artist, t_data)
			if ecrit then
				set t_id to currID
				set b to my uploadFile()
				if b then set ecrit to false
			end if
		else -- meme piste
			if ecrit then -- mais pas uploadé
				set b to my uploadFile()
				if b then set ecrit to false
			end if
		end if
	end tell
end getCurrentTrack

on write_to_file(titre, artiste, t_data)
	set newText to ""
	set data_file to ("" & data_dir & "currentTrack.html")
	set t to read alias data_file
	set tP to paragraphs of t
	set J to 0
	set rc to character id 10
	repeat with ligne in tP
		set p to contents of ligne
		if p starts with "<div id=\"titre\"" then
			set J to J + 1
			if J = 1 then -- insere les infos de la nouvelle piste , avant les infos de la piste 1
				set newText to newText & "<div id=\"titre\">" & titre & "</div><div id=\"artiste\">" & artiste & "</div>" & rc & p & rc
			else if J = 2 then -- ajoute les infos de la piste 2 à la troisieme position, les infos de la piste 3 ne seront pas ajoutés
				set newText to newText & p & rc
			end if
		else if p ends with "</HTML>" then
			set newText to newText & p
			exit repeat
		else
			set newText to newText & p & rc
		end if
	end repeat
	try
		set the open_target_file to open for access file data_file with write permission
		set eof of the open_target_file to 0
		write newText to the open_target_file as «class utf8»
		close access the open_target_file
	on error
		close access data_file
		return false
	end try
	
	
	set pictFile to "" & data_dir & "artwork_of_current_track.jpg"
	try
		set the open_target_file to open for access file pictFile with write permission
		set eof open_target_file to 0
		write "" to open_target_file starting at eof -- efface le contenu du fichier
		set eof open_target_file to 512
		write t_data to open_target_file starting at 513 -- fichier en format pict 
		close access the open_target_file
	on error
		close access pictFile
	end try
	-- converti le pict au format JPEG, 50 pixels x 50 pixels, qualité 95 pourcent
	do shell script "/usr/bin/sips -z 50 50 -s format jpeg  -s formatOptions 95 " & quoted form of POSIX path of pictFile
	return true
end write_to_file

on uploadFile() -- subroutine to upload the file
	try
		with timeout of 50 seconds
			do shell script "cd " & (quoted form of POSIX path of data_dir) & " && /usr/bin/curl -s -m 120 -T \"currentTrack.html\" -u " & ftp_Login & " && /usr/bin/curl -s -m 120 -T artwork_of_current_track.jpg -u " & ftp_Login
			return true
		end timeout
	on error
		return false
	end try
end uploadFile

on quit
	continue quit
end quit
```


il fait, ce que tu as demandé.
L'écriture dans le fichier HTML est au format *UTF8*,  le (*charset*) dans le fichier HTML est spécifiée pour ne pas avoir de problèmes avec les caractères.

Mais, il ne travaille pas pour rien, il écrit et upload si la piste n'est pas la même, car il attend que  la database id de la piste  soit différent.
La vérification se fait aux 15 secondes.

Le script fonctionne sur *Mac OS X 10.5* ou plus.
Si vous voulez l'avoir pour *Mac OS X 10.4.x* ou moins, c'est possible de le modifier.


----------



## ramien (4 Septembre 2010)

Voiçi comment cela rend sur la sidebar. 






Plus de problème avec les caractère spéciaux lorsque le titre est le plus récent. Quand il passe dans les anciens titres, cela semble être différent.

Sinon es-ce possible d'avoir chaque musique dans une div. Avec les 3 dernieres jaquettes.
Je t'ai schématisé cela sur photoshop






On y est presque !!


----------



## ramien (4 Septembre 2010)

(en gardant les div titre et artiste)


----------



## Anonyme (5 Septembre 2010)

Bonjour.

Les caractères spéciaux*: réglé, il fallait spécifier UTF8 à la lecture du fichier (la commande read).

L'upload des 4 fichiers se fait maintenant en un seul temps.
Les fichiers (HTML et jpg) sont enregistrés dans le bundle de l'application (le script).

Voici le script, les trois images sont référencées dans le fichier HTML.

```
global ftp_Login, data_dir, t_id, ecrit

on run
	set ftp_address to "ftp.****" -- votre adresse FTP 
	set ftp_user to "*********" --  nom d'utilisateur FTP
	set ftp_password to "*****" -- votre mot de passe FTP	
	
	set data_dir to ((path to me) as string) & "Contents:"
	set ftp_Login to ftp_user & ":" & ftp_password & " " & ftp_address
	set t_id to 0
	try
		("" & data_dir & "currentTrack.html") as alias --le fichier existe, garde les dernieres infos
	on error
		-- le fichier n'existe pas, creation du fichier html, contient aucun texte
		do shell script "cd " & (quoted form of POSIX path of data_dir) & " && /bin/echo '<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">
<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"></HEAD><BODY>
<div id=\"1\"<img src=\"artwork_1.jpg\" align=\"left\" width=\"50\" height=\"50\" />
<div id=\"titre\">...</div><div id=\"artiste\">...</div><br></div>
<div id=\"2\"<img src=\"artwork_2.jpg\" align=\"left\" width=\"50\" height=\"50\" />
<div id=\"titre\">...</div><div id=\"artiste\">...</div><br></div>
<div id=\"3\"<img src=\"artwork_3.jpg\" align=\"left\" width=\"50\" height=\"50\" />
<div id=\"titre\">...</div><div id=\"artiste\">...</div></div>
</BODY></HTML>' > currentTrack.html
touch artwork_1.jpg;touch artwork_2.jpg;touch artwork_3.jpg"
	end try
end run

on idle
	try
		tell application "iTunes" to if running and player state is playing then my getCurrentTrack()
	end try
	return 15 -- nombre de secondes avant la prochaibe vérification
end idle

on getCurrentTrack() -- subroutineto get the current track from itunes
	tell application "iTunes" to tell current track
		set currID to database ID
		if currID is not t_id then -- piste différente
			set ecrit to false
			if exists artworks then
				set t_data to data of artwork 1
			else -- aucun artwork, crée une image d'un point d'interogation
				set t_data to «data PICT03640000000000320032001102FF0C00FFFE00000048000000480000000000000032003200000000001F800080008000001E0001000A000000000032003282000000029C000000010000000000000000000000000000000100000000000000000000000000004000000000000000000000000000000000400000000000320032000003000000000000000056706E67200000000000000000000000006170706C000000000000040000320032004800000048000000000202000103504E47000000000000000000000000000000000000000000000000000000000018FFFF89504E470D0A1A0A0000000D4948445200000032000000320802000000915D1FE6000000097048597300000B1300000B1301009A9C18000001B4494441545809ED563DCA8340108D1FB10868914ED24B2CBD416CBC8720E805D26A9163A44B95C63EA710827636365616B108A409C46FC28224B84566768510760B19C7F979BE37EEAAF57D3FFBBEF5F77D909E88142C8C2E8A2DC51686014C2C65B6B85B1DD78941F216ABC92DF7565BE086C29640BB4F5325C09A826F25E2A7023EE3E698607E2C8858555559969665B9AE6B18063F0EE585A222EB72B9F8BE3F745C2C16C7E351A420CB9D099688A208301D0E87B66DB32CB36D1B6EF33C7F3C1E2295E9B058E3DD6E97A6E98000A80258E01C3C34033D5BD046D334E8CDAE4992803DACD56A05367B34382906ED6DB859F7FBDDF3BCE57259D73537E073275DC4718F300C755D3F9D4EEC91C8784983B5DFEF413B98FA315C82470EACDBED669A661CC70404DC140967224C745114D7EB75B3D950A69B972307D6F97C86E28EE3F05A507C7260ADD7EBED76CB76070A8A51CE4FFF41C0A6100441D334A3D7263AE48808BF0F702C765D4744314AA388089FB484E36504E5D54181F59A3F914D1411089B08102BFB5B6C4D4A1514278AA8604DCD00A6BE1251B185610013AB664BB185610013AB664BB185610013FBA5B3F50FC1722669AF16BDEA0000000049454E44AE426082000700AE007C0007000100010003000300040000000D000C00100032003200E400E400280017000E10517569636B54696D65AA20657420756E0000280019000C11648E636F6D707265737365757220504E470028001B000027736F6E742072657175697320706F757220766973696F6E6E657220636574746520696D6167652E000000FF»
			end if
			
			set ecrit to my write_to_file(get name, get artist, t_data)
			if ecrit then
				set t_id to currID
				set b to my uploadFile()
				if b then set ecrit to false
			end if
		else -- meme piste
			if ecrit then -- mais pas uploadé
				set b to my uploadFile()
				if b then set ecrit to false
			end if
		end if
	end tell
end getCurrentTrack

on write_to_file(titre, artiste, t_data)
	set newText to ""
	set data_file to ("" & data_dir & "currentTrack.html")
	set t to read alias data_file as «class utf8»
	set tP to paragraphs of t
	set J to 0
	set rc to character id 10
	repeat with ligne in tP
		set p to contents of ligne
		if p starts with "<div id=\"titre\"" then
			set J to J + 1
			if J = 1 then -- insere les infos de la nouvelle piste à la premiere position
				set newText to newText & "<div id=\"titre\">&nbsp;&nbsp;" & titre & "</div><div id=\"artiste\">&nbsp;&nbsp;" & artiste & "</div><br></div>" & rc
				set firstP to p
			else if J = 2 then -- insere les infos de la piste 1 à la deuxieme position
				set newText to newText & firstP & rc
				set secondP to p
			else if J = 3 then --insere les infos de la piste 2 à la troisieme position
				set newText to newText & secondP & rc
			end if
		else if p ends with "</HTML>" then
			set newText to newText & p
			exit repeat
		else
			set newText to newText & p & rc
		end if
	end repeat
	try
		set the open_target_file to open for access file data_file with write permission
		set eof of the open_target_file to 0
		write newText to the open_target_file as «class utf8»
		close access the open_target_file
	on error
		close access data_file
		return false
	end try
	
	set The_CD to (quoted form of POSIX path of data_dir)
	
	-- change les positions des images, renomme --> jaquette 2 devient 3, jaquette 1 devient 2
	do shell script "cd " & The_CD & " &&  /bin/mv -f artwork_2.jpg artwork_3.jpg; /bin/mv -f artwork_1.jpg artwork_2.jpg"
	set pictFile to "" & data_dir & "artwork_1.jpg"
	try
		set the open_target_file to open for access file pictFile with write permission
		set eof open_target_file to 0
		write "" to open_target_file starting at eof -- efface le contenu du fichier
		set eof open_target_file to 512
		write t_data to open_target_file starting at 513 -- fichier au format pict 
		close access the open_target_file
	on error
		close access pictFile
	end try
	-- converti le pict au format JPEG, 50 pixels x 50 pixels, qualité 95 pourcent
	do shell script "/usr/bin/sips -z 50 50 -s format jpeg  -s formatOptions 95 " & quoted form of POSIX path of pictFile
	return true
end write_to_file

on uploadFile() -- upload  les trois fichiers artwork_x et le fichier HTML (les infos des trois derniere pistes)
	try
		set The_CD to (quoted form of POSIX path of data_dir)
		with timeout of 50 seconds
			do shell script "cd " & The_CD & " && /usr/bin/curl -s -m 120 -T \"{currentTrack.html,artwork_1.jpg,artwork_2.jpg,artwork_3.jpg}\" -u " & ftp_Login
			return true
		end timeout
	on error
		return false
	end try
end uploadFile

on quit
	continue quit
end quit
```


----------



## ramien (5 Octobre 2011)

Suite à un changement d'hebergeur,
mon site est contenu non plus à la racine mais dans le dossier /www
comment faire pour que le fichier currentTrack.html soit placer dans ce dossier ?

merci


----------

