Un grand merci et des petites suggestions...

Téléchargement automatique de Replay TV

Un grand merci et des petites suggestions...

Messagede sergiogiogio » Lun 17 Déc 2012 08:50

@dabiboo, tout d'abord un immense merci pour cet excellent logiciel et les updates régulières. Paramétré correctement, habitv marche à merveille et de manière entièrement autonome. J'apprécie particulièrement le fait qu'il persévère à re-tenter les téléchargements même en cas d'erreurs.

Voici quelques humbles suggestions et questions:
  • Introduire dans le filenamePattern (https://www.assembla.com/spaces/habitv/ ... amePattern) une date de diffusion, si bien sûr cette date est disponible. Alternativement, introduire la date de début (ou de fin) du téléchargement. Cette fonctionnalité me permettra perso de mieux organiser mes téléchargements (par date).
  • Introduire dans le filenamePattern (https://www.assembla.com/spaces/habitv/ ... amePattern) un numéro de séquence (00, 01, 02, etc.), indispensable notamment pour les émissions telles que le jt de tf1 qui est livré en plusieurs morceaux. Le numéro de séquence permettra de savoir l'ordre dans lequel les diffuser. J'aimerais également raccorder ces morceaux une fois qu'ils sont téléchargés, ce qui est possible grâce à un export mais je ne sais pas exactement comment détecter que tous les morceaux sont téléchargés ...
  • Introduire la possiblité d'updater grabconfig.xml tout en conservant les choix d'émissions à télécharger. Idéalement le fichier pourrait être updaté automatiquement une fois par jour par exemple.
  • rajouter un exemple de config.xml dans https://www.assembla.com/spaces/habitv/wiki (il n'y en a pas à l'heure actuelle).
  • Notifier d'une erreur si config.xml ou grabconfig.xml ne peuvent pas être lus / n' ont pas le bon format. Par exemple, la version 3.4.1 tourne en boucle sans rien faire (et sans retourner d' erreur) si grabconfig.xml est en formal DOS (CRLF) au lieu d'Unix (LF). config.xml n' a pas le même problème (il peut être lu même en format DOS).

Encore merci et bravo!
sergiogiogio
 
Messages: 9
Inscription: Lun 24 Sep 2012 17:47

Re: Un grand merci et des petites suggestions...

Messagede dabiboo » Ven 21 Déc 2012 08:21

Merci beaucoup pour ce message très encourageant !

Voici mes retours pour tes suggestions :
sergiogiogio a écrit:Introduire dans le filenamePattern (https://www.assembla.com/spaces/habitv/ ... amePattern) une date de diffusion, si bien sûr cette date est disponible. Alternativement, introduire la date de début (ou de fin) du téléchargement. Cette fonctionnalité me permettra perso de mieux organiser mes téléchargements (par date).

OK mais effectivement tous les fournisseurs ne proposent pas la date de diffusion on risque de souvent avoir la date du jour.

sergiogiogio a écrit:Introduire dans le filenamePattern (https://www.assembla.com/spaces/habitv/ ... amePattern) un numéro de séquence (00, 01, 02, etc.), indispensable notamment pour les émissions telles que le jt de tf1 qui est livré en plusieurs morceaux. Le numéro de séquence permettra de savoir l'ordre dans lequel les diffuser. J'aimerais également raccorder ces morceaux une fois qu'ils sont téléchargés, ce qui est possible grâce à un export mais je ne sais pas exactement comment détecter que tous les morceaux sont téléchargés ...

OK, simple et efficace comme idée. Ce numéro de séquence sera l'ordre des épisodes tel que proposé par le fournisseur.

sergiogiogio a écrit:Introduire la possiblité d'updater grabconfig.xml tout en conservant les choix d'émissions à télécharger. Idéalement le fichier pourrait être updaté automatiquement une fois par jour par exemple.

C'est déjà implémenté dans le menu "configuration" -> "Regénérer le fichier de configuration des téléchargement", ça fonctionnalité ajoute les nouvelles émissions et chaines disponibles sont perdre la configuration existante. Pour la mise à jour automatique, à voir.

sergiogiogio a écrit:rajouter un exemple de config.xml dans https://www.assembla.com/spaces/habitv/wiki (il n'y en a pas à l'heure actuelle).

j'ai mis le mien ici : http://dabiboo.free.fr/config.xml, je vais en ajouter un dans la doc.

sergiogiogio a écrit:Notifier d'une erreur si config.xml ou grabconfig.xml ne peuvent pas être lus / n' ont pas le bon format. Par exemple, la version 3.4.1 tourne en boucle sans rien faire (et sans retourner d' erreur) si grabconfig.xml est en formal DOS (CRLF) au lieu d'Unix (LF). config.xml n' a pas le même problème (il peut être lu même en format DOS).

Effectivement, c'est problématique : je vais regarder ça.

Merci pour ces suggestions.

Je ne vais pas avoir beaucoup de temps en cette fin d'année pour une mise à jour :), il y a d'ailleurs le problème m6/w9 à analyser aussi...
dabiboo
 
Messages: 189
Inscription: Mer 15 Aoû 2012 11:06

Re: Un grand merci et des petites suggestions...

Messagede dabiboo » Mer 26 Déc 2012 15:36

c'est fait : viewtopic.php?f=35&t=4927 ;)
N'hésites pas si tu as d'autres idées !
dabiboo
 
Messages: 189
Inscription: Mer 15 Aoû 2012 11:06

Re: Un grand merci et des petites suggestions...

Messagede sergiogiogio » Mer 16 Jan 2013 19:34

Hello

Grand merci pour les améliorations et bonne année!

Je me suis amusé à télécharger le code (très bien écrit!) et j'ai quelques autres suggestions, notamment pour TF1 (je voudrais pouvoir télécharger le jt complet).

1- l'url de la catégorie du jt-20h est en ce moment dans habitv "http://videos.tf1.fr/jt-20h/" mais cette url ne contient que quelques extraits du dernier journal. Les épisodes complets sont dans "http://videos.tf1.fr/jt-20h/video-integrale/". Cette url est disponible dans TF1Conf.HOME_URL mais ils faudrait juste la parser différemment (extraction de rel_url ci dessous):

Code: Tout sélectionner
   public static Set<CategoryDTO> findCategory() {
      final Set<CategoryDTO> categories = new HashSet<>();
               ...
            if (attr.contains("|")) {
               final String key = attr.split("\\|")[3];
//==============================<changement>=========================
               final String rel_url = url.startsWith(TF1Conf.HOME_URL) ? url.substring(TF1Conf.HOME_URL.length()) : key;
               categories.add(new CategoryDTO(TF1Conf.NAME, key, rel_url, TF1Conf.EXTENSION));
//==============================</changement>=========================
               ...
   }


2-le journal de tf1 est fragmenté... on peut récupérer l'url de tous les fragments dans le <div/> carousel dispo dans la page de chaque épisode. Pour plus de simplicité de mon côté, je télécharge tous les fragments en tant qu'épisodes. Ça permet d'avoir un téléchargement en parallèle sans trop de difficulté (je ne suis pas capable de changer le code en profondeur). Par contre ça pose des difficultés pour rassembler les morceaux - je pense que ça devrait pouvoir être fait dans un exporter et je travaille dessus maintenant.
Code: Tout sélectionner
   public static Set<EpisodeDTO> findEpisode(final CategoryDTO category) {
      final Set<EpisodeDTO> episodes = new HashSet<>();

      try {
         final Connection con = Jsoup.connect(TF1Conf.HOME_URL + "/" + category.getId());
         final Elements select = con.get().select(".teaser");
         for (final Element element : select) {
            try {
               final Element divInfoIntegrale = element.child(1);
               if (("description".equals(divInfoIntegrale.attr("class")) || "infosTeaser".equals(divInfoIntegrale.attr("class")) || "infosIntegrale"
                     .equals(divInfoIntegrale.attr("class"))) && divInfoIntegrale.children().size() > 1) {
                  final Element child = divInfoIntegrale.child(1);
                  if (!child.children().isEmpty()) {
                     final String title = child.child(0).text();
                     final String url = child.child(0).attr("href");

//==============================<changement>=========================
                     if(category.getId().startsWith("jt-")) {
                        final Connection episode = Jsoup.connect(TF1Conf.HOME_URL + url);
                        final Elements carouselList = episode.get().select("div[id^=carousel]");
                        if(!carouselList.isEmpty()) {
                           final Elements chunkBlocks = carouselList.first().select("[class^=teaser]");
                           int i = 0;
                           for (final Element chunkBlock : chunkBlocks) {
                              ++i;
                              final String chunk_title = title + " (" + String.format("%02d", i) + "/" + String.format("%02d", chunkBlocks.size()) + ") " + chunkBlock.getElementsByTag("img").first().attr("alt");
                              final String chunk_url = chunkBlock.getElementsByTag("a").get(2).attr("href");
                              episodes.add(new EpisodeDTO(category, chunk_title, chunk_url));
                           }
                        }
                     }
                     else episodes.add(new EpisodeDTO(category, title, url));
//==============================</changement>=========================
                  }
               }
            } catch (final IndexOutOfBoundsException e) {
               LOGGER.error(element, e);
               throw new TechnicalException(e);
            }
         }
      } catch (final IOException e) {
         throw new TechnicalException(e);
      }
      return episodes;
   }

Note: "jt-" est méchamment hardcodé car dans certaines catégories comme "reportages": le <div> carousel contient *tous* les épisodes sur beaucoup de pages donc ça engendre un très grand nombre de téléchargements dupliqués.

3- Pluzz fait aussi appel à des fragments (bien qu'en beaucoup plus grand nombre que TF1). Il serait donc peut être intéressant d'introduire un niveau supplémentaire channel > category > episode > fragment, et avoir la possibilité de télécharger les fragments en parallele et demander au framework de faire l'assemblage quand tous les fragments sont téléchargés (je suis incapable d'écrire ce code et je me doute que ce serait un changement en profondeur dans l'application).

Encore une fois ce ne sont que des suggestions, je te laisse peser les pour et les contre. Le plugin TF1 doit te paraître comme des vacances comparé au plugin pluzz!

sergiogiogio
sergiogiogio
 
Messages: 9
Inscription: Lun 24 Sep 2012 17:47

Re: Un grand merci et des petites suggestions...

Messagede dabiboo » Ven 18 Jan 2013 08:29

hello,

bonne année également !

Merci pour ton analyse sur le plugin TF1.

Concernant le niveau supplémentaire fragment, il s'agit pour moi d'une difficulté technique dans le téléchargement d'un épisode et ça ne répond pas vraiment à un besoin fonctionnel.
Le plugin Pluzz utilise ffmpeg pour assembler les fragments, je pense qu'on peut faire pareil pour ces vidéos TF1.
Il est possible de gérer des threads dans les plugins et donc de paralléliser le téléchargement de ces fragments.

Encore merci, je vais travailler sur les corrections/améliorations prochainement.
dabiboo
 
Messages: 189
Inscription: Mer 15 Aoû 2012 11:06

Re: Un grand merci et des petites suggestions...

Messagede dabiboo » Dim 27 Jan 2013 10:58

hello,

La dernière version d'habiTv 3.6.0 gère le téléchargement des vidéos fragmentées sur tf1.
En revanche la catégorie jt20-integral n'apparait toujours pas dans le fichier grabconfig.xml, il faut l'ajouter manuellement :
Code: Tout sélectionner
   
<channel>
        <name>tf1</name>
        <category>
            <id>jt-20h/video-integrale/</id>
            <name>jt-20h_integrale</name>
            <toDownload>false</toDownload>
            <extension>mp4</extension>
        </category>      
dabiboo
 
Messages: 189
Inscription: Mer 15 Aoû 2012 11:06

Re: Un grand merci et des petites suggestions...

Messagede sergiogiogio » Mer 13 Fév 2013 18:54

Hello dabiboo,

Re-grand merci pour cette fonctionnalité de télécharger le journal TF1 en entier!!
Ça fonctionne parfaitement - et je trouve intéressant que ça n'utilise finalement pas les fragments (en tout cas pour le journal) mais que tu sois arrivé à trouver une URL magique, avec de plus une meilleure qualité d'image il me semble. Y'en a sous le capot, bravo!

J'ai 2 petites autres petites autres suggestions:

1- Corriger un tout petit bug de tronquage de chaîne dans core\src\com\dabi\habitv\core\token\TokenReplacer.java:
Code: Tout sélectionner
return toCut.substring(0, Math.min(size, toCut.length() - 1));
devrait être:
Code: Tout sélectionner
return toCut.substring(0, Math.min(size, toCut.length()));
(bizarrement substring coupe juste avant la position du 2ème argument http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/String.html#substring(int,%20int))

2- remplacer AVI par MP4 dans le plugin PLUZZ. MP4 est plus récent et plus compatible (http://en.wikipedia.org/wiki/Audio_Video_Interleave) et c'est de plus le standard dans habitv (seul pluzz utilise AVI - ainsi que la fonctionnalité fragments de TF1).

Dans /pluzz/src/com/dabi/habitv/provider/pluzz/PluzzConf.java et /pluzz/src/com/dabi/habitv/provider/pluzz/jpluzz/PluzzDLM3U8.java, le code précise "fmpeg veut l'extension .avi", mais la commande suivante devrait résoudre le problème:
Code: Tout sélectionner
ffmpeg -isync -i  "<input-file>" -c copy -absf aac_adtstoasc -f mp4 -y "<output-file>"


En te souhaitant bonne continuation, un nouveau chapeau bas.
sergiogiogio
sergiogiogio
 
Messages: 9
Inscription: Lun 24 Sep 2012 17:47

Re: Un grand merci et des petites suggestions...

Messagede dabiboo » Mer 13 Fév 2013 20:07

hello,

merci de ton message, content que ça te convienne.

Entièrement d'accord sur les 2 points, je vais corriger ça pour la prochaine livraison.
dabiboo
 
Messages: 189
Inscription: Mer 15 Aoû 2012 11:06


Retourner vers habiTv

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 3 invités