Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#26 Le 06/04/2014, à 21:09

cracolinux

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Salut,

Bravo pour ton script qui fonctionne impeccablement !
Comment faire pour télécharger disons, le numéro 5 de la liste des GDI ?


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#27 Le 07/04/2014, à 02:33

nesthib

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

J'avais déjà ça en tête, j'ai mis à jour le script. Il accepte désormais l'option -x/--videos avec comme argument le numéro de la vidéo ou une plage de numéros (ex. 1,3-5,7).

cpdl gdi -x 5
cpdl gdi -x 1,3-5,7

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#28 Le 07/04/2014, à 21:53

cracolinux

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

cool

Merci et encore bravo!


Pixup : postez vos images vite et bien - Wificheck : Aidez nous à vous aider

« Ne devenez jamais pessimiste. Un pessimiste a plus souvent raison qu'un optimiste, mais l'optimiste s'amuse plus — et aucun des deux ne peut arrêter la marche du monde. » R.Heinlein

Hors ligne

#29 Le 11/04/2014, à 11:49

GP974

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

hum il semble vraiment que le rpi soit tres juste avec le prog ça replante aujourd'hui voila le retour du script.

[i]  Found 16 video(s) info for "gdi"
[i]  5 video(s) to download
[i]  Downloading video "1052008" from show "gdi" as "Guignol:2014-04-10.mp4"
[i]  Downloading "Guignol:2014-04-10.mp4" (rtmp://vod-fms.canalplus.fr/ondemand/videos/1404/LES_GUIGNOLS_QUOTIDIEN_140410_AUTO_24025_169_video_H.mp4)
RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
Connecting ...
INFO: Connected...
Starting download at: 0.000 kB
INFO: Metadata:
INFO:   duration              490.43
INFO:   moovPosition          32.00
INFO:   width                 640.00
INFO:   height                360.00
INFO:   videocodecid          avc1
INFO:   audiocodecid          mp4a
INFO:   avcprofile            100.00
INFO:   avclevel              31.00
INFO:   aacaot                2.00
INFO:   videoframerate        25.00
INFO:   audiosamplerate       44100.00
INFO:   audiochannels         2.00
INFO: trackinfo:
INFO:   length                12260000.00
INFO:   timescale             25000.00
INFO:   language              eng
INFO: sampledescription:
INFO:   sampletype            avc1
INFO:   length                21627904.00
INFO:   timescale             44100.00
INFO:   language              eng
INFO: sampledescription:
INFO:   sampletype            mp4a
128.694 kB / 1.00 sec (0.2%)
ERROR: RTMP_ReadPacket, failed to read RTMP packet body. len: 11518649
130.187 kB / 1.00 sec (0.2%)

Apres ça niveau cpu on grimpe a 100% et rien ne bouge jusqu’à que j'envois un SIGKILL
y'a un moyen d'optimiser d’après toi ?

Edit : Bon j'ai essayer sur le 5 dernières vidéos des guignols 3 ont échoué vers le début (a moins d'1%) et les 2 autre ont réussis
C'est vraiment un beug a la con

Dernière modification par GP974 (Le 11/04/2014, à 12:07)


Ubunteros depuis 10.04 Restez libre avec Linux :)
Fixe : i7 i930@3.2ghz | DDR3 12go | Amd Rx580 | SSD - 120Go S2 | 14.04.05 & Arch
Fixe2 : I5 6500U@2.8ghz | DDR4 8GO | SSD 120 M2 | Arch
Développeur de nvidiux

Hors ligne

#30 Le 12/04/2014, à 05:56

nesthib

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Malheureusement, je ne peux pas faire grand chose sur ce point, le téléchargement en lui-même dépend de rtmpdump.
Mon script à une option -r qui permet à rtmpdump de relancer le téléchargement d'un fichier si celui-ci n'est pas complet. J'ai aussi corrigé un bug qui faisait qu'un fichier vide ayant le nom du fichier téléchargé empêchait de continuer.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#31 Le 14/04/2014, à 21:27

GP974

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Dommage sad je dois me rabattre sur mon portable

Un attendent que tu nous fasse une gui intégré j'en ai fais une avec bash ca utilise zenity
pour l'utiliser il suffit juste de lancer le script
La seule contrainte est de donner le chemin (path) vers le script dans la variable Name (5 ieme ligne) Par default c'est "./cpdl"

Version 1.1
Ajout des qualités HDL et HLS (HLS par default)
Demande le chemin du script si la variable name est incorrect ou mal renseigné
Correction d'un beug (le code du petit journal)

Version 1.0
Permet de choisir une ou plusieurs émission, la qualité et le nombre de vidéo a télécharger.
Notification quand le script a terminé le téléchargement.

#!/bin/bash
#Gui pour le script python de Nesthib permettant de télécharger  les vidéos de Canal+
#Version 1.1
#Plus d'information : https://forum.ubuntu-fr.org/viewtopic.php?id=1536991
Name="./cpdl"
if [ -f $Name ]
then
    echo "Fichier $Name existant"
else
    Chemin=`zenity --file-selection --title "Emplacement script"`
    Verif=`file $Chemin`
    echo $Verif | grep "python" >> /dev/null
    if [ $? -eq 0 ]
    then
    	Name=$Chemin
    	echo "Fichier correct emplacement:$Name"
    else
    	echo "Fichier non reconnus"
    	exit 1
    fi	
fi

Emission=$(zenity --list --width=400 --height=300 --title "Telechargement emission" --text "Choix emision" --column "Telecharger?" --column "Code" --column "Emission"  \
--checklist "FALSE" "gdi" "Guignols de l'info (les)"  \
--checklist "FALSE" "gro" "Groland"  \
--checklist "FALSE" "jdh" "Le journal du hard"  \
--checklist "FALSE" "lgj" "Le grand journal"  \
--checklist "FALSE" "lpj" "Petit journal (le)"  \
--checklist "FALSE" "zap" "zap (Zapping (le)"  )

if [ -z "$Emission" ]
then
    echo "Pas de video/Annulation..."
    exit 0
else
    echo "Emission:$Emission"
fi 

Qualite=$(zenity --list --width=400 --height=280 --title "Qualite" --text "Qualite Video" --column "Choix" --column "Code" --column "Qualite" \
--radiolist "FALSE" 1 "Qualité Mobile" \
--radiolist "FALSE" 2 "Qualité Bas Debit" \
--radiolist "FALSE"  3 "Qualité Haut Debit" \
--radiolist "FALSE" 4 "Qualité HD" \
--radiolist "FALSE" 5 'Qualité HDS' \
--radiolist "TRUE" 6 'Qualité HLS' )

if [ -z "$Qualite" ]
then
    echo "Annulation..."
    exit 0
else
    echo "Qualité:$Qualite"
fi

Nb_Video=$(zenity --scale --width=400 --height=220 --title "Nombre Video" --text="Nombre de vidéo a télécharger" --value=1 --max-value=30 --min-value=1)

if [ -z "$Nb_Video" ]
then
    echo "Annulation..."
    exit 0
else
    echo "Nombre vidéo:$Nb_Video"
fi
ListeEmission=$(echo $Emission | sed s/"|"/" "/g)
echo "Commande:python $Name $ListeEmission -l $Nb_Video -r -q $Qualite -v"
python $Name $ListeEmission -l $Nb_Video -r -q $Qualite -v
if [ $? -eq 0 ]
then
    notify-send "Téléchargement terminé"
    exit 0
else
    notify-send "Erreur Téléchargement"
    exit 1
fi

Voila si il y a un problème/beug signalez le ici merci neutral

Dernière modification par GP974 (Le 24/04/2014, à 18:32)


Ubunteros depuis 10.04 Restez libre avec Linux :)
Fixe : i7 i930@3.2ghz | DDR3 12go | Amd Rx580 | SSD - 120Go S2 | 14.04.05 & Arch
Fixe2 : I5 6500U@2.8ghz | DDR4 8GO | SSD 120 M2 | Arch
Développeur de nvidiux

Hors ligne

#32 Le 15/04/2014, à 07:46

outcast

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Bonjour,

Il semble que canal+ bloque les téléchargements par script.
Quand je passe par le site internet, la vidéo est visible.
http://www.canalplus.fr/c-divertissemen … gnols.html
Il y a peut être un paramètre à passer à fvlstreamer ?

flvstreamer -V -r rtmp://vod-fms.canalplus.fr/ondemand/videos/1404/LES_GUIGNOLS_QUOTIDIEN_140414_AUTO_24080_169_video_H.mp4 
FLVStreamer v2.1c1
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
DEBUG: Parsing...
DEBUG: Parsed protocol: 0
DEBUG: Parsed host    : vod-fms.canalplus.fr
DEBUG: Parsed app     : ondemand
WARNING: You haven't specified an output file (-o filename), using stdout
DEBUG: Protocol : RTMP
DEBUG: Hostname : vod-fms.canalplus.fr
DEBUG: Port     : 1935
DEBUG: Playpath : mp4:videos/1404/LES_GUIGNOLS_QUOTIDIEN_140414_AUTO_24080_169_video_H
DEBUG: tcUrl    : rtmp://vod-fms.canalplus.fr:1935/ondemand
DEBUG: swfUrl   : (null)
DEBUG: pageUrl  : (null)
DEBUG: app      : ondemand
DEBUG: auth     : (null)
DEBUG: subscribepath : (null)
DEBUG: flashVer : LNX 10,0,22,87
DEBUG: live     : no
DEBUG: timeout  : 120 sec
DEBUG: Setting buffer time to: 36000000ms
Connecting ...
DEBUG: RTMP_Connect1, ... connected, handshaking
DEBUG: HandShake: Type Answer   : 03
DEBUG: HandShake: Server Uptime : 1376776703
DEBUG: HandShake: FMS Version   : 4.5.2.1
DEBUG: RTMP_Connect1, handshaked
DEBUG: Invoking connect
INFO: Connected...
DEBUG: RTMP_ClientPacket, received: invoke 134 bytes
DEBUG: (object begin)
DEBUG: Property: NULL
DEBUG: (object begin)
DEBUG: Property: <Name:                     level, STRING:	error>
DEBUG: Property: <Name:                      code, STRING:	NetConnection.Connect.Rejected>
DEBUG: Property: <Name:               description, STRING:	[ AccessManager.Reject ] : Access denied!>
DEBUG: (object end)
DEBUG: (object end)
DEBUG: HandleInvoke, server invoking <_error>
ERROR: rtmp server sent error
DEBUG: RTMP_ClientPacket, received: invoke 18 bytes
DEBUG: (object begin)
DEBUG: Property: NULL
DEBUG: (object end)
DEBUG: HandleInvoke, server invoking <close>
ERROR: rtmp server requested close
DEBUG: Closing connection.

Hors ligne

#33 Le 17/04/2014, à 10:44

JackDanielZ

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Salut,

J'a le meme probleme avec mon script shell depuis quelques jours. Meme VLC s'en sort pas. C'est comme si les fichiers n'existaient pas (ou n'etaient plus accessibles).

J'ai vraiment l'impression que le probleme est dans leur serveur.

Daniel

Hors ligne

#34 Le 19/04/2014, à 03:22

nesthib

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Il y a effectivement un filtrage côté serveur. J'ai mis à jour le script pour utiliser une autre méthode (qualité 6, par défaut). Il est désormais également possible de lancer directement les vidéos dans VLC.
Exemple :

cpdl -Pt lpj

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#35 Le 19/04/2014, à 12:07

S00000

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

nesthib a écrit :

Il y a effectivement un filtrage côté serveur. J'ai mis à jour le script pour utiliser une autre méthode

Qu'as tu changé pour que ça fonctionne ?
Par exemple,

>>> rtmpdump -r rtmp://vod-fms.canalplus.fr/ondemand/videos/1404/LES_GUIGNOLS_QUOTIDIEN_140401_AUTO_23903_169_video_L.mp4 -o test.mp4
RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
Connecting ...
INFO: Connected...
ERROR: rtmp server sent error
ERROR: rtmp server requested close

Que faut-il faire ?

Merci.

Hors ligne

#36 Le 20/04/2014, à 10:02

JackDanielZ

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Salut nesthib,

Merci pour l'idee d'utiliser les m3u8. Par contre, j'ai un leger probleme. Que ce soit avec ton script ou directement en ligne de commandes, avconv me telecharge que l'audio.

T'as une idee de ce que ca pourrait etre?

Merci.

Hors ligne

#37 Le 20/04/2014, à 12:37

JackDanielZ

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Juste pour info. Pour telecharger sans utiliser avconv/ffmpeg..., il faut:
- wget le master.m3u8 qui contient des liens m3u8, chacun correspondant a une qualite.
- prendre un des liens (je prends le dernier)
- wget le fichier. Il contient des liens vers des .ts.
- wget tous les .ts
- les concatener avec 'cat' (cat *.ts > truc.mp4). Et la on obtient un fichier lisible par VLC.

Ca marche avec le petit journal, guignols et zapping. Le seul hic, c'est que CanalPlus n'est pas fichu de bien nommer ses fichiers .ts donc si on a plus de 10 .ts, la concatenation va pas se faire dans le bon ordre.

Vla mon script (juste celui qui recupere les .ts et les concatene), il est petit et simple. Ya a ameliorer mais ca marche:
#!/bin/bash

# $1: link to m3u8
#$2 output file
# Download the m3u8 file, search for ts files, wget and combine them

rm -f ts_1*
wget -T 30 -t 10 -q -O file.m3u8 "$1"

ts_files="`grep "\.ts" file.m3u8`"
index=0
for ts in $ts_files
do
   ts_out="ts_"`expr 1000 + $index`
   echo "`basename $ts` -> $ts_out"
   wget -T 30 -t 10 -q -O $ts_out $ts
   index=`expr $index + 1`
done

cat ts_1* > $2
rm -f ts_1*

Hors ligne

#38 Le 20/04/2014, à 16:21

nesthib

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Tu peux utiliser directement VLC pour avoir la vidéo en streaming (voir message #34).


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#39 Le 20/04/2014, à 16:45

JackDanielZ

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Je sais. C'est juste que j'aime bien les telecharger via crontab et ne pas avoir a dependre de ma connexion internet smile.

Hors ligne

#40 Le 24/04/2014, à 18:30

GP974

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Mise a jour du script pour prendre en compte les derniers changements


Ubunteros depuis 10.04 Restez libre avec Linux :)
Fixe : i7 i930@3.2ghz | DDR3 12go | Amd Rx580 | SSD - 120Go S2 | 14.04.05 & Arch
Fixe2 : I5 6500U@2.8ghz | DDR4 8GO | SSD 120 M2 | Arch
Développeur de nvidiux

Hors ligne

#41 Le 09/05/2014, à 21:10

lg2009

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Bonsoir,

J'ai utilisé une autre technique suite aux difficultés rencontrées avec le protocole RTMP sur le site de canal plus. J'ai remarqué que l'application youtube-dl (http://rg3.github.io/youtube-dl/) permettait de télécharger les vidéos du site en haute qualité et j'ai donc adapté un script initialement écrit par La_Poigne pour automatiser l'opération. Je ne suis pas (du tout) à l'aise en Python et le script peut sans doute très facilement être amélioré. Pour ajouter une émission, il faut son numéro et l'adresse de base (dans la table de hachage), on peut s'inspirer des 3 exemples déjà dans le script. Il faut aussi adapter le répertoire de téléchargement (ici ~/canal) et de sauvegarde de l'historique (ici ~/canal aussi).

#!/usr/bin/env python
# -*- coding:Utf-8 -*-

###########################################################################
# Adaptation à partir d'un script Copyright (C) 2010  La_Poigne                                           #
# This program is free software: you can redistribute it and/or modify    #
#  it under the terms of the GNU General Public License as published by   #
#  the Free Software Foundation, either version 2 of the License, or      #
#  any later version.                                                     #
# This program is distributed in the hope that it will be useful,         #
#  but WITHOUT ANY WARRANTY without even the implied warranty of          #
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          #
#  GNU General Public License for more details.                           #
# You should have received a copy of the GNU General Public License       #
#  along with this program.  If not, see <http://www.gnu.org/licenses/>.  #
###########################################################################
#
#Script pour telecharger les emission du site canalplus.fr
#Fonctionne en theorie sur tous les OS
#



import os, urllib, subprocess, time, sys
from xml.dom import minidom


emissions=[

249,   # PETIT JOURNAL
201,   # ZAPPING
48,    # GUIGNOLS
#252,  # SAV
#254,  # GROLAND
#104,  # GRAND JOURNAL
#37,   # ACTION DISCRETE
#39,   # LA MATINALE
#47,   # PEPITES DU NET
#62,   # LE BOUCAN DU JOUR
#215,  # LE MEILLEUR DU HIER
#1064  # Gaspard Proust
]

base = {}
base[48]="http://www.canalplus.fr/c-divertissement/pid1784-c-les-guignols.html?vid="
base[249]="http://www.canalplus.fr/c-divertissement/c-le-petit-journal/pid6515-l-emission.html?vid="
base[201]="http://www.canalplus.fr/c-infos-documentaires/pid1830-c-zapping.html?vid="

# Qualite de la video
#qualite = "BAS_DEBIT"
qualite = "HAUT_DEBIT"
#qualite = "HD"

# Repertoires (pensez a les creer avant)
homedir = os.path.expanduser('~')
HISTORIQUE = homedir + "/canal/.cplus_hist"
output_dir = homedir + "/canal"

# Ne rien modifier sous cette ligne
# Sauf pour ameliorer le fonctionnement ;)

urlXMLEmissions = "http://www.canalplus.fr/rest/bootstrap.php?/bigplayer/getMEAs/"


# Parse Mea file to get videos id
def ParseMeas(xmldoc):
   ids = []
   meas = xmldoc.getElementsByTagName('MEA')
   for i in meas:
      if i.getElementsByTagName('ID')[0].childNodes != []:
         id = i.getElementsByTagName('ID')[0].childNodes[0].nodeValue
         ids.append(id)
   return ids

# Execute command and write stdout in file var
def execute(params):
   p = subprocess.Popen(params)
   p.wait()
   return p.returncode

def addHistory(name):
   file = open(HISTORIQUE, 'a')
   file.write(name.encode('utf-8') + '\n')
   file.close()

def checkHistory(name):
   findvalue = 0
   file = open(HISTORIQUE, 'r')
   for line in file:
      if line.decode('utf-8') == name + '\n':
         findvalue = 1
   file.close()
   return findvalue

def downXml(url):
   try:
      xmlFile = urllib.urlopen(url).read()
   except Exception, e:
      return 1
   try:
      xmldoc = minidom.parseString(xmlFile)
   except Exception, e:
      xmldoc = 1
   return xmldoc


if __name__ == "__main__":   
   if os.path.exists(HISTORIQUE) == False:
     file = open(HISTORIQUE, 'w')
     file.close()
   
   for num in emissions:
      url = urlXMLEmissions + str(num)
      xmldoc = downXml(url)
      if xmldoc == 1:
         print "Erreur durant la recuperation de la liste " + str(num)
      else:
         id = ParseMeas(xmldoc)         
         for vid in id:
                print vid
                url2 = base[num]+ vid
                check = checkHistory(url2)
                if check == 0:
                    print url2
                    params=['youtube-dl', url2]
                    r = execute(params)
                    if r == 0:
                        addHistory(url2)

Laurent

Hors ligne

#42 Le 19/05/2014, à 14:53

Smoky_fr

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Bonjour,

Je ne connais rien dans les script, mais apparemment j'arrive à le faire fonctionner !
Faut encore que j'apprenne à me servir des options ... roll

Du coup, je me demandais s'il y avait la possibilité de récupérer une émission de Canal qui ce nomme =>  INTERIEUR SPORT.

Merci

Smoky

Ps : il y a juste qqchose que je n'arrive pas à faire, c'est rendre le script executable.
Je faits :
- sudo chmod +x  /home/user/bin/cpdl
- Puis ENTER
- Pas de Mess d'erreur, mais quand je lance le script il me dit que la commande cpdl est introuvable,
- par contre en utilisant la commande python cpdl, ça fontionne

Dernière modification par Smoky_fr (Le 19/05/2014, à 14:58)


Sur Linux depuis Janvier 2014.
Un Pc sous Xubuntu 12.04 et un portable sous Mint 17

Hors ligne

#43 Le 19/05/2014, à 15:17

melixgaro

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Salut,

à Smoky_fr
Quand tu le rends exécutable, tu peux le lancer comme ceci

./cpdl

au lieu de

python cpdl

Quand tu tapes seulement cpdl, le shell cherche le programme dans le PATH. C'est une variable qui contient une série de dossiers, où se trouvent les différents programmes : firefox, gedit, emacs, trucmuche... Pour savoir quels sont ces dossiers, tape

echo ${PATH}

Si tu veux pouvoir lancer ton programme en tapant cpdl, alors il faut que l'exécutable soit dans un de ces dossiers OU que tu ajoutes à la variable PATH le dossier où se trouve cpdl. Par exemple, comme ceci (à adapter) :

export PATH=${PATH}:${HOME}/bin

Il faut ajouter cette ligne en fin de fichier .bashrc pour que ce soit permanent.

Édition : correction du PATH proposé. merci nesthib

Dernière modification par melixgaro (Le 19/05/2014, à 16:40)


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#44 Le 19/05/2014, à 15:38

Smoky_fr

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Merci, pour l'astuce.

melixgaro a écrit :
./cpdl

au lieu de

python cpdl

Je verrais pour le reste, quand j'aurais moins mal au crane ... smile


Sur Linux depuis Janvier 2014.
Un Pc sous Xubuntu 12.04 et un portable sous Mint 17

Hors ligne

#45 Le 19/05/2014, à 16:33

nesthib

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

melixgaro a écrit :
export PATH=${PATH}:/home/user/bin/cpdl 

À mon avis c'est plutôt ${HOME}/bin wink

export PATH=${PATH}:${HOME}/bin

GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne

#46 Le 19/05/2014, à 16:38

melixgaro

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

à nesthib

oula quelle horreur, merci. oui un copié-collé rapide, je corrige mon message.

Dernière modification par melixgaro (Le 19/05/2014, à 16:39)


Linux depuis ~2007. Xubuntu seulement.

Hors ligne

#47 Le 20/05/2014, à 19:11

Smoky_fr

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Quand je tape la commande suivante :
==>  ./cpdl lpj -m 2014-05-19 -f '%S_%D_%t.%e'

Ça me donne bien un fichier en MP4 (du coup en q 1), mais la box (Freebox v6) voit ce fichier en fichier musical et j'ai que la bande son (pas de bonne qualité).

Ps : vous pensez que c'est possible pour l'émission Intérieur Sport ?

Edit :

Je viens d'essayer en utilisant l'option -q 2 et ça ne fonctionne pas

./cpdl lpj -q 2  -m 2014-05-19 -f '%S_%D_%t.%e'
[i]  Found 107 video(s) info for "lpj"
[i]  1 video(s) to download
[i]  Deleting empty file "LPJ_2014-05-19_Avec_Valérie_Trierweiler.mp4"
[i]  Downloading video "1073228" from show "lpj" as "LPJ_2014-05-19_Avec_Valérie_Trierweiler.mp4"
[i]  Downloading "LPJ_2014-05-19_Avec_Valérie_Trierweiler.mp4" (rtmp://vod-fms.canalplus.fr/ondemand/videos/1405/19/nip_NIP_15045_400k.mp4)
RTMPDump v2.4
(c) 2010 Andrej Stepanchuk, Howard Chu, The Flvstreamer Team; license: GPL
Connecting ...
INFO: Connected...
ERROR: rtmp server sent error
ERROR: rtmp server requested close

Dernière modification par Smoky_fr (Le 20/05/2014, à 19:24)


Sur Linux depuis Janvier 2014.
Un Pc sous Xubuntu 12.04 et un portable sous Mint 17

Hors ligne

#48 Le 26/05/2014, à 10:07

Gaara

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Salut nesthib,
Je viens d'essayer ton script, et j'ai un petit soucis: les vidéos ne se téléchargent pas en entier.
J'ai essayé cette commande: (j'ai nommé mon fichier cplus.py)

python cplus.py -y gdi zap

J'obtiens bien deux vidéos, mais toutes les deux se coupent avant la fin. Je suis sous Kubuntu 14.04.
J'ai une autre question: est-t-il possible de télécharger d'autres émissions? (comme clique, le tube, la nouvelle édition)

En fait, avec ta permission, j'aimerais intégrer ton code dans mon logiciel, en ajoutant un onglet canal+. (en le renommant dPluzz+ smile )
ça donnerait quelque chose comme ça:
mini_420335dPluzz12.jpg
Pour le moment, l'onglet canal+ est vide, mais si ton script marche bien, j'adapterais mon interface pour le faire tourner !


Kubuntu 18.04 x64
Un terminal tactile Raspberry Pi et Odroid

                                        <code>zenity  --question --title "Alert"  --text "Microsoft Windows has been found! Would you like to remove it?"</code>

Hors ligne

#49 Le 29/07/2014, à 21:47

ziss

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

Salut a tous,

Suite aux changements sur canalplus.fr, les scripts precedents peinent un peu et flvstreamer, lui, n'arrive plus a recuperer correctement les videos (enfin, chez moi en tous cas).
Du coup, sur le conseil du post de lg2009 (voir plus haut), j'utilise youtoube-dl qui marche parfaitement!
De plus, j'en ai profité pour tout refaire avec beautifulsoup.

Je ne suis pas developpeur, donc allez-y molo sur les commentaires concernant le code wink

Qqs petites explications annexes: le code comportent des modifs pour optimiser l'utilisation avec Insync.
Insync me permet de pousser les videos vers mon google drive.
Ensuite, sur mon android, en tache de fond, Autosynch pro me recupere les videos depuis le google drive pour visionage dans le metro (hors connexion)
http://play.google.com/store/apps/detai … .drivesync

Voila! Maintenant a vous de jouer pour l'ameliorer smile

#!/usr/bin/python
# -*- coding: utf-8 -*-

###########################################################################
# Copyright (C) 2014 Ziss                                                 #
# This program is free software: you can redistribute it and/or modify    #
#  it under the terms of the GNU General Public License as published by   #
#  the Free Software Foundation, either version 2 of the License, or      #
#  any later version.                                                     #
# This program is distributed in the hope that it will be useful,         #
#  but WITHOUT ANY WARRANTY without even the implied warranty of          #
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the          #
#  GNU General Public License for more details.                           #
# You should have received a copy of the GNU General Public License       #
#  along with this program.  If not, see <http://www.gnu.org/licenses/>.  #
###########################################################################
#

#Changelog:
#V 0.4
#25-07-2014 : Creation

from bs4 import BeautifulSoup
import os, urllib2, subprocess, string, unicodedata, shlex, shutil


###########################################################################

# Options

# Directories and paths
output_dir = "/media/ziss/Data1TB/Insync/DL"
output_tmp_dir = "/media/ziss/Data1TB/.tmp/" #useful when doing cloud synch as it avoids uploading .frag from youtube-dl
HIST = os.path.join(output_dir , ".webDL_hist")

doNotDLList = ["Best Of", "Best-Of", "Best of", "Best-of", "La semaine", "Semaine du"]

want_sub_dirs = True #if you want sub directories and not everything under the same directory

###########################################################################


bad_chars = '(){}<>\\/\"%$*|~+!#'
def cleanStr(s):  #Can be improved for sure...
	s=' '.join(unicode(s).split())
	s = str(unicodedata.normalize('NFKD', s).encode('ascii','ignore'))
	s = s.replace("\'", " ")
	return s.translate(string.maketrans("", "", ), bad_chars)

def parseLWT(soup):
	#print (soup.prettify())
	vids=[]
	for row in soup.find_all('h3', "yt-lockup-title"):
		vids.append(["www.youtube.com"+row.a['href'].split('&list')[0] , row.a['title'].split(': ')[1] ])
	return vids

def parseCanalG(soup): #General. Should work for all Canal+ progs but 'Pepites sur le Net'
	vids=[]
	for row in soup.find_all('h4', 'h4noRedMea'):
		vids.append([ row.a['href'] , row.a.contents[0]])
	return vids

def parseCanalGClean(soup): 
	vids=[]
	for row in soup.find_all('h4', 'h4noRedMea'):
		if not any(word in row.a.contents[0] for word in doNotDLList):
			vids.append([ row.a['href'] , row.a.contents[0]])
	return vids


def parseCanalPSN(soup):
	vids=[]
	for row in soup.find_all('h4'):
		if row.has_attr('title') and "pites sur le Net" in row['title']: #should be improved here
			vids.append([ row.a['href'] , row.a.contents[0]]) 
	return vids
"""
def parseCanalZap(soup):
	vids=[]
	for row in soup.find_all('h4'):
		if row.has_attr('title') and "Zapping" in row['title'] and "Semaine" not in row.a.contents[0]: #I don't need the weekly best-of
			vids.append([ row.a['href'] , row.a.contents[0]])
	return vids
"""

# Base Urls
baseUrls=[
["LWT", "http://www.youtube.com/user/LastWeekTonight/videos", parseLWT], #Last Week Tonight
["PSN", "http://www.canalplus.fr/c-divertissement/pid1778-c-pepites-sur-le-net.html", parseCanalPSN], #Pepites sur le Net
["Zap", "http://www.canalplus.fr/c-infos-documentaires/pid1830-c-zapping.html", parseCanalGClean], #Zapping
["GPr", "http://www.canalplus.fr/c-divertissement/pid4801-c-gaspard-proust.html", parseCanalG], #Gaspard Proust
["LPJ", "http://www.canalplus.fr/c-divertissement/c-le-petit-journal/pid6515-l-emission.html", parseCanalGClean], #Le petit Journal
["LGI", "http://www.canalplus.fr/c-divertissement/pid1784-c-les-guignols.html", parseCanalGClean] #Les Guignols de l'Info
]

###########################################################################

# Execute command and write stdout in file var
def execute(params, file):
   p = subprocess.Popen(params,stdout=file)
   p.wait()
   return p.returncode

def addHistory(name):
   file = open(HIST, 'a')
   file.write(name + '\n')
   file.close()

def checkHistory(name):
   findvalue = 0
   file = open(HIST, 'r')
   for line in file:
      if line == name + '\n':
         findvalue = 1
   file.close()
   return findvalue



# MAIN

if __name__ == "__main__":
   
   if os.path.exists(HIST) == False:
     file = open(HIST, 'w')
     file.close()
   
   if not os.path.exists(output_tmp_dir): #Check if directory exists, if not then create it
	os.makedirs(output_tmp_dir)

   for prog, url, parser in baseUrls:
	vids = parser(BeautifulSoup(urllib2.urlopen(url).read()))
	for vidUrl, title in vids:
		if checkHistory(vidUrl) == 0:
			if want_sub_dirs: #Sub directories or not
				output_dir_prog = os.path.join(output_dir , prog)
			else:
				output_dir_prog = output_dir
			
			if not os.path.exists(output_dir_prog): #Check if directory exists, if not then create it
				os.makedirs(output_dir_prog)

			filename = prog + "-%(upload_date)s-"+cleanStr(title)+".%(ext)s"  #Format your files the way you want. See youtube-dl help for %(upload_date)s and %(ext)s

			cmd = "youtube-dl "+ vidUrl +" -o \""+ os.path.join(output_tmp_dir, filename) +"\""
			print (cmd)
			args = shlex.split(cmd)
                        p = subprocess.Popen(args)
                        p.wait()
			if (p.returncode) == 0:
				#print ("youtube-dl success")
				
				# move file after download. Not direct download to avoid synch issue with cloud 
				source = os.listdir(output_tmp_dir)
				for files in source:
					try:
						shutil.move(os.path.join(output_tmp_dir, files), output_dir_prog) #shutil is compatible with diff drives and filesystems, not os.rename()
					except IOError, e:
						print "Unable to move file. %s" % e
						exit(1)
				
				#print ("Success")
				addHistory(vidUrl) #store the url to avoid to dl again next time
			else:
				print ("FAILED!!! youtube-dl returncode: " + str(p.returncode))	

		#else:
			#print (cleanStr(title)  + " is already Downloaded")
		

Hors ligne

#50 Le 30/07/2014, à 02:26

nesthib

Re : [script/python] Télécharger les émissions quotidiennes de Canal+

@Gaara : désolé, j'avais loupé ton message. Bien entendu, tu peux utiliser le code de mon script.

@ziss : j'ai survolé extrêmement rapidement ton script, le problème est que tu perds toute l'interactivité qu'il y avait dans le mien.


GUL Bordeaux : GirollServices libres : TdCT.org
Hide in your shell, scripts & astuces :  applications dans un tunnelsmart wgettrouver des pdfinstall. auto de paquetssauvegarde auto♥ awk
  ⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn

Hors ligne