#1 Le 09/11/2019, à 18:22
- thib1984
Script récupération programme tv
Bonjour à tous,
j'aime le CLI, et donc j'essaie de l'utiliser un maximum. Cela fait un moment que j'aimerai faire une commande line pour rechercher les programmes TV, et j'ai un peu avancé cette semaine. Je vous fournis la commande telle quelle.
function tvsearch () { curl -s https://webnext.fr/epg_cache/programme-tv-rss_$(date +"%d-%m-%Y").xml | sed "s/\!\[CDATA\[/\!\[CDATA\[NEW_LINE/g" | xmllint --xpath '//title/text()' - | sed "s/\!\[CDATA\[NEW_LINE/\n/g" | sed "s/]]><//g"| awk -F "|" '{ print $2 "- " $1 "-" $3}' | sed 'y/áàâäçéèêëîïìôöóùúüñÂÀÄÇÉÈÊËÎÏÔÖÙÜÑ/aaaaceeeeiiiooouuunAAACEEEEIIOOUUN/'| tr '[:upper:]' '[:lower:]' | sort | grep -i "$1" | more ; }
Quelques explications :
curl -s https://webnext.fr/epg_cache/programme-tv-rss_$(date +"%d-%m-%Y").xml
Récupération d'un fichier xml à la date du jour. Il me semble que ce cite ne stocke pas les jours précédents suivants. De plus le fichier n'est pas complet, il manque des programmes (les JT de 20h par exemple), et le nom de certaines chaînes. Je n'ai pas trouvé mieux pourtant...
xmllint --xpath '//title/text()'
Récupère les lignes qui m'interessent à savoir le titre, l'heure et la chaine du programme.
awk -F "|" '{ print $2 "- " $1 "-" $3}'
Intervertit les colonnes pour mettre l'heure en tête
sed 'y/áàâäçéèêëîïìôöóùúüñÂÀÄÇÉÈÊËÎÏÔÖÙÜÑ/aaaaceeeeiiiooouuunAAACEEEEIIOOUUN/'| tr '[:upper:]' '[:lower:]' | sort
Met en forme le resultat en supprimant les accents, forcant le lowercase et triant
grep -i "$1" | more
permet la gestion d'un mot clé de recherche, et une pagination si nécessaire
sed "s/\!\[CDATA\[/\!\[CDATA\[NEW_LINE/g"
sed "s/\!\[CDATA\[NEW_LINE/\n/g" | sed "s/]]><//g"
Tricks afin de supprimer des balises CDATA tout en conservant un encodage correct (EDIT : et en ajoutant un saut de ligne à la fin de chaque 'item')
Exemple d'utilisations :
****@tardis:~$ tvsearch tf1 #recuperation du programme tf1 du jour
08:30 - tf1 - teleshopping - samedi
10:35 - tf1 - veterinaires, leur vie en direct
11:55 - tf1 - petits plats en equilibre
12:00 - tf1 - les 12 coups de midi !
13:30 - tf1 - reportages decouverte
14:45 - tf1 - grands reportages
16:00 - tf1 - les docs du week-end
17:50 - tf1 - 50' inside
19:05 - tf1 - 50' inside
20:35 - tf1 - habitons demain
21:05 - tf1 - nrj music awards
****@tardis:~$ tvsearch sport #recuperation des programmes contenant 'sport'
19:25 - canal+ - canal sports club
20:40 - france 3 - tout le sport
****@tardis:~$ tvsearch 21: #recuperation des programmes de 21:00 à 21:59
21:00 - bfmtv - priorite au decryptage
21:00 - cnews - l'heure des pros
21:00 - cstar - ghost chasers
21:00 - gulli - chasseurs de trolls
21:00 - - josephine, ange gardien
21:00 - l'equipe - catch americain «raw»
21:00 - public senat - lcp an - le descendant
21:00 - tmc - de l'@stuce a l'assiette
21:05 - 6ter - aquamen
21:05 - cherie 25 - victoria
21:05 - - chroniques criminelles
21:05 - france 2 - jo
21:05 - france 3 - commissaire magellan
21:05 - france 4 - le peuple miniature
21:05 - m6 - instinct
21:05 - nrj 12 - superstore
21:05 - tf1 - nrj music awards
21:05 - tmc - columbo
21:15 - c8 - roland magdane : «rire !»
21:20 - gulli - chasseurs de trolls
21:30 - l'equipe - catch americain «raw»
21:30 - nrj 12 - superstore
21:40 - france o - la derniere vague
21:45 - arte - les tresors des glaces
21:55 - 6ter - aquamen
21:55 - gulli - chasseurs de trolls
21:55 - - les mensonges de l'histoire
21:55 - m6 - instinct
21:55 - nrj 12 - superstore
21:55 - rmc decouverte - retour a la civilisation
Si certains d'entre vous ont des idées d'amélioration de la commande, je suis à votre écoute. Si vous connaissez une autre source pour la récupération brute du programme tv également.
Dernière modification par thib1984 (Le 09/11/2019, à 20:14)
Hors ligne
#2 Le 09/11/2019, à 19:05
- Sciensous
Re : Script récupération programme tv
ah oui c'est sympa, merci
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#3 Le 09/11/2019, à 19:52
- Watael
Re : Script récupération programme tv
il semble y avoir des commandes inutiles :
searchTV() { curl -s https://webnext.fr/epg_cache/programme-tv-rss_$(date +"%d-%m-%Y").xml | xmllint --xpath '//title/text()' - | sed -n 's/^<!\[CDATA\[//; s/\]\]>//; s/|/-/g; /^'${1^^}'/p';}
en cherchant un peu, je serais étonné qu'on ne puisse pas tout faire avec xmllint uniquement...
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#4 Le 09/11/2019, à 20:11
- thib1984
Re : Script récupération programme tv
il semble y avoir des commandes inutiles :
searchTV() { curl -s https://webnext.fr/epg_cache/programme-tv-rss_$(date +"%d-%m-%Y").xml | xmllint --xpath '//title/text()' - | sed -n 's/^<!\[CDATA\[//; s/\]\]>//; s/|/-/g; /^'${1^^}'/p';}
en cherchant un peu, je serais étonné qu'on ne puisse pas tout faire avec xmllint uniquement...
Merci pour ton retour.
Je ne suis pas sûr de comprendre la nouvellle commande que tu proposes.
Quand je lance "searchTV" sans argument je retrouve quasiment le fichier xml, condensé en une ligne, (c'est pour cette raison que j'utilisais un trick de replace CDATA par CDATA + passage à la ligne. Et je n'arrive pas à obtenir de retour si j'ajoute un argument.
Le fait d'intervertir les colonnes et de mettre l'horaire en première position rend utile le sort final de ma commande pour pouvoir trier proprement les programmes tv.
Je te rejoins, je suis certain que ma commande est trop verbeuse et peut être condensée! C'est entre autres pour cela que je l'ai posté ici.
Hors ligne
#5 Le 09/11/2019, à 20:22
- Watael
Re : Script récupération programme tv
bizarre.
$ searchTV
Webnext.fr - Programme Tv rss xml
TF1 - 08:30 - Téléshopping - Samedi
TF1 - 10:35 - Vétérinaires, leur vie en direct
TF1 - 11:55 - Petits plats en équilibre
TF1 - 12:00 - Les 12 coups de midi !
TF1 - 13:30 - Reportages découverte
TF1 - 14:45 - Grands reportages
TF1 - 16:00 - Les docs du week-end
TF1 - 17:50 - 50' Inside
TF1 - 19:05 - 50' Inside
...
Chérie 25 - 22:05 - Victoria
Chérie 25 - 23:00 - FBI : portés disparus
Chérie 25 - 23:55 - FBI : portés disparus
en effet, sans critère, tout le programme est affiché, mais sur plusieurs lignes.
normal.
Dernière modification par Watael (Le 09/11/2019, à 20:23)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#6 Le 10/11/2019, à 07:17
- k3c
Re : Script récupération programme tv
tu peux regarder comment fonctionne pyxmltv
Debian 12 sur Thinkpad reconditionné
Hors ligne
#7 Le 10/12/2019, à 11:59
- Spheerys
Re : Script récupération programme tv
Alors pour ma part j'ai réussi à faire marcher le script en commentant quelques lignes inutiles pour moi (art album) et en ajoutant quelques parenthèses :
#!/usr/bin/python3
# Source : https://forum.ubuntu-fr.org/viewtopic.php?id=2032228
import requests
import json
import os
import shlex
import subprocess
import time
s = requests.session()
s.headers["User-Agent"] = "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:67.0) Gecko/20100101 Firefox/67.0"
r = s.get("https://api.radiofrance.fr/livemeta/pull/7") # Fip
#r = s.get("https://api.radiofrance.fr/livemeta/pull/64") # Fip Rock
j = json.loads(r.content.decode('utf-8'))
c1 = j["levels"][0]["items"][3]
v1 = j["steps"][c1]
title = v1["title"]
singers = v1["authors"]
album = v1["titreAlbum"]
year = v1["anneeEditionMusique"]
#art = v1["visual"]
start = v1["start"]
end = v1["end"]
heuredeb = time.strftime('%H:%M:%S', time.localtime(start))
heurefin = time.strftime('%H:%M:%S', time.localtime(end))
picname = "/tmp/fip_current_art.jpg"
#notify_cmd = "notify-send \"{:s}\" -t 5000 -i \"{:s}\" \"{:s}\n{:s}\n{:d}\n{:s}->{:s}\"".format(title, picname, singers, album, year, heuredeb, heurefin)
notify_cmd = "notify-send \"{:s}\" -t 5000 -i \"{:s}\" \"{:s}\n{:s}\"".format(title, picname, singers, album)
#r = s.get(art)
print(singers)
print(title)
#with open(picname, "wb") as fd:
# fd.write(r.content)
# print(notify_cmd)
# p = subprocess.check_output(shlex.split(notify_cmd))
# os.remove(picname)
Par contre je cherche l'adresse du flux/stream pour France Inter. J'ai un lien mp3 mais qui ne marche pas dans ce script : http://direct.franceinter.fr/live/franceinter-midfi.mp3
Pas moyen de trouver l'adresse API qui va bien pour adapter ce script !
Si l'un d'entre vous l'a sous la main, ça m'intéresse !
Je pense que ça vaudrait le coup de créer un dépot GitHub avec un script multi-radio pérénne dans le temps.
Dernière modification par Spheerys (Le 10/12/2019, à 12:01)
Hors ligne
#8 Le 11/12/2019, à 10:33
- DonutMan75
Re : Script récupération programme tv
Hello,
merci pour ce script.
Par moment j'ai l'impression que la chaîne "saute"... Sais-tu pourquoi ?
Par exemple (je te cite) :
****@tardis:~$ tvsearch 21: #recuperation des programmes de 21:00 à 21:59
[...]
21:00 - - josephine, ange gardien
[...]
21:05 - - chroniques criminelles
[...]
21:55 - - les mensonges de l'histoire
Hors ligne
#9 Le 11/12/2019, à 23:02
- krodelabestiole
Re : Script récupération programme tv
un projet qui pourrait vous intéresser : le format xmltv (utilisé par mythtv et tvheadend entre autre)
https://fr.wikipedia.org/wiki/XMLTV
http://wiki.xmltv.org/index.php/Main_Page
et en particulier https://www.xmltv.fr/ : les programmes télé francophones au format xml (la source est télérama je crois).
de là ça m'a l'air assez simple à parser pour faire ce qu'on veut.
nouveau forum ubuntu-fr on en parle là : refonte du site / nouveau design
profil - sujets récurrents - sources du site
Hors ligne
#10 Le 11/12/2019, à 23:03
- melixgaro
Re : Script récupération programme tv
Spheerys : je pense que tu as posté au mauvais endroit. Demande à déplacer ton message dans la discussion sur FIP (ou efface le message ici et reposte le dans l'autre discussion).
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#11 Le 14/12/2019, à 10:15
- DonutMan75
Re : Script récupération programme tv
Hello,
je viens de comprendre d'où venait ce comportement. En fait dans le flux initial il n'y a tout simplement pas la chaîne !
C'est à ce niveau que ça se passe :
sed "s/]]><//g"| awk -F "|" '{ print $2 "- " $1 "-" $3}'
Bonne journée à tous,
Donut
Hello,
merci pour ce script.Par moment j'ai l'impression que la chaîne "saute"... Sais-tu pourquoi ?
Par exemple (je te cite) :
****@tardis:~$ tvsearch 21: #recuperation des programmes de 21:00 à 21:59 [...] 21:00 - - josephine, ange gardien [...] 21:05 - - chroniques criminelles [...] 21:55 - - les mensonges de l'histoire
Hors ligne
#12 Le 14/12/2019, à 16:16
- Watael
Re : Script récupération programme tv
awk sait faire ce que fait sed (ici avec gsub());
sed est donc inutile.
Dernière modification par Watael (Le 14/12/2019, à 16:17)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne