<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<atom:link href="http://forum.ubuntu-fr.org/extern.php?action=feed&amp;tid=338854&amp;type=rss" rel="self" type="application/rss+xml" />
		<title><![CDATA[Forum Ubuntu-fr.org / [script] importation de playlists de iTunes vers Rhythmbox]]></title>
		<link>http://forum.ubuntu-fr.org/viewtopic.php?id=338854</link>
		<description><![CDATA[Les sujets les plus récents dans [script] importation de playlists de iTunes vers Rhythmbox.]]></description>
		<lastBuildDate>Tue, 21 May 2013 05:20:11 +0000</lastBuildDate>
		<generator>FluxBB</generator>
		<item>
			<title><![CDATA[Réponse à&#160;:  [script] importation de playlists de iTunes vers Rhythmbox]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=13616761#p13616761</link>
			<description><![CDATA[<p>Bonjour,</p><p>ce post est un peu vieux mais on ne sait jamais. Est-ce que l&#039;on peut copier directement le script que tu proposes? comment fait-on pour créer un fichier .pl?</p><p>merci d&#039;avance</p>]]></description>
			<author><![CDATA[dummy@example.com (sly38)]]></author>
			<pubDate>Tue, 21 May 2013 05:20:11 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=13616761#p13616761</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [script] importation de playlists de iTunes vers Rhythmbox]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=10307261#p10307261</link>
			<description><![CDATA[<p>La rapidité par contre ce n&#039;est pas le point fort de Ryhtmbox quand il démarre avec plus de 1000 listes de lectures installées !</p>]]></description>
			<author><![CDATA[dummy@example.com (Quasoo)]]></author>
			<pubDate>Thu, 09 Aug 2012 00:25:41 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=10307261#p10307261</guid>
		</item>
		<item>
			<title><![CDATA[Réponse à&#160;:  [script] importation de playlists de iTunes vers Rhythmbox]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=10307171#p10307171</link>
			<description><![CDATA[<p>Il fonctionne vraiment bien ton script, il est aussi très rapide, toutes les playlist s&#039;importent sans broncher !</p><p>Merci !! <img src="http://forum.ubuntu-fr.org/img/smilies/big_smile.png" width="15" height="15" alt="big_smile" /></p>]]></description>
			<author><![CDATA[dummy@example.com (Quasoo)]]></author>
			<pubDate>Wed, 08 Aug 2012 23:30:19 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=10307171#p10307171</guid>
		</item>
		<item>
			<title><![CDATA[[script] importation de playlists de iTunes vers Rhythmbox]]></title>
			<link>http://forum.ubuntu-fr.org/viewtopic.php?pid=2878757#p2878757</link>
			<description><![CDATA[<p>Bonjour, utilisant iTunes sous windows pour gérer ma bibliothèque de musique et utilisant Rhythmbox pour la lire sous ubuntu, j&#039;etais frustré de ne pas pouvoir importer ma bibliothèque iTunes sur Rhythmbox.&#160; J&#039;ai ainsi créé un script perl permettant d&#039;importer les playlists (Pas la bibliothèque) de iTunes vers Rhythmbox.</p><p>ItunesRhyth.pl :</p><div class="codebox"><pre class="vscroll"><code>#!/usr/bin/perl
# # Script fait par  
# # Mattorre
# # Permet d&#039;importer la playlist d&#039;iTunes dans rhythmbox

# Vérification du nombre de paramètres
$syntaxe=&quot;[Usage : ./ItunesRhyth.pl iTunes\ Music\ Library.xml fichierTemp.xml playlists.xml]&quot;;
$nbarg = scalar( @ARGV );
if ($nbarg != 3) {die &quot;$syntaxe\n&quot;;}

# Renommage des paramètres
($entree,$sortieTemp, $sortie)=@ARGV;

# Vérification de l&#039;existence ou non des fichiers
if (! -e $entree )
{die &quot;[Le fichier d&#039;entrée $entree n&#039;existe pas]\n&quot;;}
if (-e $sortieTemp )
{die &quot;[Le fichier d&#039;entrée $sortieTemp existe déjà]\n&quot;;}
if (! -e $entree )
{die &quot;[Le fichier d&#039;entrée $sortie n&#039;existe pas]\n&quot;;}

# Variable permettant de stocker le chemin dans l&#039;environnement Windows
$cheminWindows = &quot;D:/Musique/iTunes/iTunes%20Music/&quot;;
# Variable permettant de stocker le chemin dans l&#039;environnement Linux
$cheminLinux = &quot;/home/mattorre/Musique/iTunes/iTunes%20Music/&quot;;

## Premier remplissage de &quot;SORTIETEMP&quot; : Copie de ENTREE dans SORTIETEMP en ne conservant sur une ligne que les lignes ID et Localisation jusqu&#039;a BIBLIOTHÈQUE

    # Ouverture des fichiers
    open(ENTREE, &quot;&lt;$entree&quot;)|| die &quot;[Ouverture fichier $entree impossible]&quot;;
    open(SORTIETEMP, &quot;&gt;$sortieTemp&quot;)|| die &quot;[Ouverture fichier $sortieTemp impossible]&quot;;

    # Initialisation de la variable permettant de stopper la copie des la detection de &quot;&lt;key&gt;Name&lt;/key&gt;&lt;string&gt;BIBLIOTHÈQUE&lt;/string&gt;&quot;
    $test = 0;

    # Tant qu&#039;il y a des lignes dans &quot;ENTREE&quot; et tant qu&#039;il n&#039;y a pas detection de &quot;&lt;key&gt;Name&lt;/key&gt;&lt;string&gt;BIBLIOTHÈQUE&lt;/string&gt;&quot;
    while($ligne = &lt;ENTREE&gt; and $test == 0)
    {
        SWITCH:
        {
            # Si detection de l&#039;ID
            if ($ligne =~ /(&lt;key&gt;Track ID&lt;)\/key&gt;&lt;integer&gt;([^&lt;]*)&lt;\/integer&gt;/){
                # Ecrire dans le fichier SORTIETEMP &quot;&lt;key&gt;Track ID&lt;&#039;ID&#039;&quot;
                print SORTIETEMP $1;
                print SORTIETEMP $2;
                last SWITCH;
            }
            # Si detection de &quot;BIBLIOTHÈQUE&quot;
            if ($ligne =~ /^\t\t\t&lt;key&gt;Name&lt;\/key&gt;&lt;string&gt;BIBLIOTHÈQUE&lt;\/string&gt;/){
                # Passage de la variable test a 1 permettant de sortir de la boucle tant que
                $test = 1;
                last SWITCH;
            }
            # Si detection de la Localisation
            if ($ligne =~ /(&lt;key&gt;Location&lt;)\/key&gt;&lt;string&gt;file:\/\/localhost\/([^&lt;]*&lt;)\/string&gt;/){
                # Ecrire dans le fichier SORTIETEMP &quot;&lt;key&gt;Location&lt;&#039;Location&#039;&lt;&quot;
                print SORTIETEMP $1;
                print SORTIETEMP $2;
                # Insertion de 2 lignes vide
                print SORTIETEMP &quot;\n\n\n&quot;;
                last SWITCH;
            }
        }
        
    }

    # Fermeture des fichiers
    close(ENTREE)|| die &quot;[Fermeture fichier $entree impossible]&quot;;
    close(SORTIETEMP)|| die &quot;[Fermeture fichier $sortieTemp impossible]&quot;;

## Fin premier remplissage de &quot;SORTIETEMP&quot;

## Remplissage du tableau associatif avec comme clef l&#039;ID et comme valeur la Localisation

    # Ouverture des fichiers
    open(SORTIETEMP, &quot;&lt;$sortieTemp&quot;)|| die &quot;[Ouverture fichier $sortieTemp impossible]&quot;;

    # Initialisation du tableau associatif
    %channel1;

    # variables temporaires
    $temp1;
    $temp2;

    # Tant qu&#039;il y a des lignes dans &quot;SORTIETEMP&quot;
    while($ligne = &lt;SORTIETEMP&gt;)
    {
        # Si detection de l&#039;ID et de la Localisation
        if ($ligne =~ /^&lt;key&gt;Track ID&lt;([^&lt;]*)&lt;key&gt;Location&lt;([^&lt;]*)&lt;/){
            # Sauvegarde de l&#039;ID dans temp1
            $temp1 = $1;
            # Sauvegarde de la Localisation dans temp1
            $temp2 = $2;
            # Modification du chemin entre Windows et Linux
            #$temp2 =~ s/D:(.*)/&lt;location&gt;file:\/\/\/home\/mattorre$1&lt;\/location&gt;/; #/
            $temp2 =~ s/$cheminWindows(.*)/&lt;location&gt;file:\/\/$cheminLinux$1&lt;\/location&gt;/; #/            
            # Remplissage du tableau: Clef = ID ,Valeur = Localisation
            $channel1{$temp1}=$temp2;
        }

    }

    # Fermeture des fichiers
    close(SORTIETEMP)|| die &quot;[Fermeture fichier $sortieTemp impossible]&quot;;

## Fin Remplissage tableau associatif

## Deuxieme remplissage de &quot;SORTIETEMP&quot; grace au tableau associatif et au fichier &quot;ENTREE&quot;. Mise en forme du fichier compatible avec la playlist Rhythmbox 

    # Ouverture des fichiers
    open(ENTREE, &quot;&lt;$entree&quot;)|| die &quot;[Ouverture fichier $entree impossible]&quot;;
    open(SORTIETEMP, &quot;&gt;$sortieTemp&quot;)|| die &quot;[Ouverture fichier $sortieTemp impossible]&quot;; #Vide le fichier SORTIETEMP

# Copie dans &quot;SORTIETEMP&quot; du debut d&#039;un fichier playlist Rhythmbox
sub Entete {

return &lt;&lt;FIN_ENTETE
&lt;?xml version=&quot;1.0&quot;?&gt;
&lt;rhythmdb-playlists&gt;
  &lt;playlist name=&quot;Liste d&#039;attente&quot; type=&quot;queue&quot;/&gt;
  &lt;playlist name=&quot;Mon top&quot; type=&quot;automatic&quot; sort-key=&quot;Rating&quot; sort-direction=&quot;1&quot;&gt;
    &lt;conjunction&gt;
      &lt;equals prop=&quot;type&quot;&gt;song&lt;/equals&gt;
      &lt;subquery&gt;
        &lt;conjunction&gt;
          &lt;greater prop=&quot;rating&quot;&gt;4.000000&lt;/greater&gt;
        &lt;/conjunction&gt;
      &lt;/subquery&gt;
    &lt;/conjunction&gt;
  &lt;/playlist&gt;
  &lt;playlist name=&quot;R&amp;#xE9;cemment ajout&amp;#xE9;&quot; type=&quot;automatic&quot; sort-key=&quot;FirstSeen&quot; sort-direction=&quot;1&quot;&gt;
    &lt;conjunction&gt;
      &lt;equals prop=&quot;type&quot;&gt;song&lt;/equals&gt;
      &lt;subquery&gt;
        &lt;conjunction&gt;
          &lt;current-time-within prop=&quot;first-seen&quot;&gt;604800&lt;/current-time-within&gt;
        &lt;/conjunction&gt;
      &lt;/subquery&gt;
    &lt;/conjunction&gt;
  &lt;/playlist&gt;
  &lt;playlist name=&quot;R&amp;#xE9;cemment lu&quot; type=&quot;automatic&quot; sort-key=&quot;LastPlayed&quot; sort-direction=&quot;1&quot;&gt;
    &lt;conjunction&gt;
      &lt;equals prop=&quot;type&quot;&gt;song&lt;/equals&gt;
      &lt;subquery&gt;
        &lt;conjunction&gt;
          &lt;current-time-within prop=&quot;last-played&quot;&gt;604800&lt;/current-time-within&gt;
        &lt;/conjunction&gt;
      &lt;/subquery&gt;
    &lt;/conjunction&gt;
  &lt;/playlist&gt;
FIN_ENTETE
}

print SORTIETEMP Entete;

    # Initialisation de la variable test a 0 permettant de commencer la copie a partir de &quot;&lt;key&gt;Playlists&lt;/key&gt;&quot;
    $test = 0;

    # Tant qu&#039;il y a des lignes dans &quot;ENTREE&quot; et que tant qu&#039;il n&#039;y a pas detection de &quot;&lt;key&gt;Playlists&lt;/key&gt;&quot;
    while($ligne = &lt;ENTREE&gt; and $test == 0)
    {
        # Si detection de &quot;Playlists&quot;
        if ($ligne =~ /&lt;key&gt;Playlists&lt;\/key&gt;/ ){
            # Passage de la variable a 1 permettant de sortir du tant que
            $test = 1;
        }        
    }
    
    # Initialisation de la variable test a 0 permettant de placer une balise &quot;&lt;/playlist&gt;&quot; avant &quot;&lt;playlist name=&quot;...&quot; type=&quot;static&quot;&gt;;&quot; sauf la premiere fois
    $test = 0;
    
    # Tant qu&#039;il y a des lignes dans &quot;ENTREE&quot;
    while($ligne = &lt;ENTREE&gt;)
    {
        SWITCH:
        {
            # Si detection de &quot;Name&quot;
            if ($ligne =~ /&lt;key&gt;Name&lt;\/key&gt;&lt;string&gt;([^&lt;]*)&lt;\/string&gt;/){
                # Sauvegarde du Nom dans la variable temp1
                $temp1 = $1;
                # Si test == 1 (CAD toujours sauf pour la premiere detection de &quot;Name&quot;)
                if ($test == 1){
                # Ecriture de la balise &quot;&lt;/playlist&gt;&quot;
                print SORTIETEMP &quot;  &lt;\/playlist&gt;\n&quot;;
                }
                # Ecriture de &quot;  &lt;playlist name=&quot;&#039;Nom&#039;&quot; type=&quot;static&quot;&gt;&quot;
                print SORTIETEMP &quot;  &lt;playlist name=\&quot;&quot;;
                print SORTIETEMP $temp1;
                print SORTIETEMP &quot;\&quot; type=\&quot;static\&quot;&gt;&quot;;
                print SORTIETEMP &quot;\n&quot;;
                # Passage de la variable test a 1
                $test = 1 ;
                last SWITCH;
            }
            # Si detection de &quot;Track ID&quot;
            if ($ligne =~ /&lt;key&gt;Track ID&lt;\/key&gt;&lt;integer&gt;([^&lt;]*)&lt;\/integer&gt;/){
                # Sauvegarde de l&#039;ID dans temp1
                $temp1 = $1;
                # Ecriture de &quot;    &lt;location&gt;&quot;Valeur correspondant a la clef ID&quot;&lt;/location&gt;&quot;
                print SORTIETEMP &quot;    &quot;;
                print SORTIETEMP $channel1{$temp1};
                print SORTIETEMP &quot;\n&quot;;
                last SWITCH;
            }
        }
    }
    
# Copie dans SORTIETEMP de la fin d&#039;un fichier playlist Rhythmbox
sub Enqueue {

return &lt;&lt;FIN_queue
  &lt;/playlist&gt;
&lt;/rhythmdb-playlists&gt;
FIN_queue
}

print SORTIETEMP Enqueue;

    # Fermeture des fichiers
    close(ENTREE)|| die &quot;[Fermeture fichier $entree impossible]&quot;;
    close(SORTIETEMP)|| die &quot;[Fermeture fichier $sortieTemp impossible]&quot;;

## Fin deuxieme remplissage de &quot;SORTIETEMP&quot;
    
## Remplissage de SORTIE avec SORTIETEMP (en cours) en enlevant certaines playlists (Bibliotheque, musique, films, series TV, Podcast, Livre audio, Achats, itunes DJ, Genius)

    # Ouverture des fichiers
    open(SORTIETEMP, &quot;&lt;$sortieTemp&quot;)|| die &quot;[Ouverture fichier $sortieTemp impossible]&quot;;
    open(SORTIE, &quot;&gt;$sortie&quot;)|| die &quot;[Ouverture fichier $sortie impossible]&quot;;
    
    # Initialisation de la variable a 0 permettant de savoir si on doit copier ou pas les &quot;&lt;location&gt;...&quot;
    $test = 0;

    # Tant qu&#039;il y a des lignes dans &quot;SORTIETEMP&quot;
    while($ligne = &lt;SORTIETEMP&gt;)
    {    
        # Si on est dans le cas de la copie
        if ($test == 0){
            SWITCH:
            {
                # Si name=&quot;BIBLIOTHÈQUE&quot; passage de la variable test a 1
                #(cad pour supprimer la playlist correspondante au name)
                # Commenter les 4 lignes si vous voulez conserver la playliste correspondant au name
                if ($ligne =~ /&lt;playlist name=&quot;BIBLIOTHÈQUE&quot; type=&quot;static&quot;&gt;/){
                    $test = 1;
                    last SWITCH;
                }
                # Si name=&quot;Musique&quot; passage de la variable test a 1
                if ($ligne =~ /&lt;playlist name=&quot;Musique&quot; type=&quot;static&quot;&gt;/){
                    $test = 1;
                    last SWITCH;
                }
                # Si name=&quot;Films&quot; passage de la variable test a 1)
                if ($ligne =~ /&lt;playlist name=&quot;Films&quot; type=&quot;static&quot;&gt;/){
                    $test = 1;
                    last SWITCH;
                }
                # Si name=&quot;Séries TV&quot; passage de la variable test a 1
                if ($ligne =~ /&lt;playlist name=&quot;Séries TV&quot; type=&quot;static&quot;&gt;/){
                    $test = 1;
                    last SWITCH;
                }
                # Si name=&quot;Podcasts&quot; passage de la variable test a 1
                if ($ligne =~ /&lt;playlist name=&quot;Podcasts&quot; type=&quot;static&quot;&gt;/){
                    $test = 1;
                    last SWITCH;
                }
                # Si name=&quot;Livres audio&quot; passage de la variable test a 1
                if ($ligne =~ /&lt;playlist name=&quot;Livres audio&quot; type=&quot;static&quot;&gt;/){
                    $test = 1;
                    last SWITCH;
                }
                # Si name=&quot;Achats&quot; passage de la variable test a 1
                if ($ligne =~ /&lt;playlist name=&quot;Achats&quot; type=&quot;static&quot;&gt;/){
                    $test = 1;
                    last SWITCH;
                }
                # Si name=&quot;iTunes DJ&quot; passage de la variable test a 1
                if ($ligne =~ /&lt;playlist name=&quot;iTunes DJ&quot; type=&quot;static&quot;&gt;/){
                    $test = 1;
                    last SWITCH;
                }
                # Si name=&quot;Genius&quot; passage de la variable test a 1
                if ($ligne =~ /&lt;playlist name=&quot;Genius&quot; type=&quot;static&quot;&gt;/){
                    $test = 1;
                    last SWITCH;
                }
            # Sinon copie de la ligne dans SORTIE
            print SORTIE $ligne;
            }
        }
        # Si test != 0 (CAD il faut enleve la playliste)
        else
        {
            # Si detection de &quot;localisation&quot;, on ne copie pas la ligne
            if ($ligne =~ /&lt;location&gt;/){
            }
            # Si detection de &quot;\playlist&quot;, on ne copie pas la ligne
            if ($ligne =~ /&lt;\/playlist&gt;/){
                # On passe la variable test a 0 (On a finit de supprimer la playlist)
                $test = 0;    
            }
        }
    
    }
    
    # Fermeture des fichiers
    close(SORTIETEMP)|| die &quot;[Fermeture fichier $sortieTemp impossible]&quot;;
    close(SORTIE)|| die &quot;[Fermeture fichier $sortie impossible]&quot;;

## Fin remplissage de SORTIE
    
## Suppression du fichier &quot;fichierTemp.xml&quot;

    unlink &#039;./fichierTemp.xml&#039;;
    
## fin script</code></pre></div><p>Petite explication pour l&#039;utiliser:</p><p>- Importez votre bibliothèque de morceau iTunes dans Rhythmbox<br />&#160; -&gt;Edition -&gt; Préférence -&gt; Musique -&gt; Les fichiers musicaux sont placés dans [mettre le chemin] (pour moi file:///home/mattorre/Musique/iTunes/iTunes Music)</p><p>- Laissez Rhythmbox travailler</p><p>- Fermez Rhythmbox</p><p>- Allez dans le dossier de la bibliothèque iTunes et copiez le fichier &quot;iTunes Music Library.xml&quot;</p><p>- Collez le dans &quot;$HOME/.local/share/rhythmbox/&quot;</p><p>- Copiez le code de mon script dans un nouveau fichier dans le même dossier (CAD &quot;$HOME/.local/share/rhythmbox/&quot;) et nommez le &quot;ItunesRhyth.pl&quot;</p><p>- Éditez le fichier et changez les 2 variables ligne 23 et 25 par vos 2 chemins</p><p>- Dans le terminal tapez: </p><div class="codebox"><pre><code>cd $HOME/.local/share/rhythmbox/
chmod +x ItunesRhyth.pl
./ItunesRhyth.pl iTunes\ Music\ Library.xml fichierTemp.xml playlists.xml
rm iTunes\ Music\ Library.xml</code></pre></div><p>- Ensuite ouvrez Rhythmbox, attentez quelques secondes et voila sa marche (enfin normalement <img src="http://forum.ubuntu-fr.org/img/smilies/tongue.png" width="15" height="15" alt="tongue" />)</p><br /><p>J&#039;ai fait un petit script Bash à lancer au demarrage qui fait automatiquement la mise à jour de la playlist</p><div class="codebox"><pre><code>#!/bin/bash

cd $HOME/.local/share/rhythmbox/

cp $HOME/Musique/iTunes/iTunes\ Music\ Library.xml iTunes\ Music\ Library.xml

./ItunesRhyth.pl iTunes\ Music\ Library.xml fichierTemp.xml playlists.xml

rm iTunes\ Music\ Library.xml

exit 0
done</code></pre></div><p>Vous pouvez aussi personnaliser l&#039;importation en commentant certaines lignes de la ligne 240 à 283</p>]]></description>
			<author><![CDATA[dummy@example.com (Mattorre)]]></author>
			<pubDate>Wed, 19 Aug 2009 15:12:12 +0000</pubDate>
			<guid>http://forum.ubuntu-fr.org/viewtopic.php?pid=2878757#p2878757</guid>
		</item>
	</channel>
</rss>
