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.

#1 Le 09/11/2019, à 19: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, à 21:14)

Hors ligne

#2 Le 09/11/2019, à 20:05

Sciensous

Re : Script récupération programme tv

ah oui c'est sympa, merci
smile


antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )

Hors ligne

#3 Le 09/11/2019, à 20: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.

Hors ligne

#4 Le 09/11/2019, à 21:11

thib1984

Re : Script récupération programme tv

Watael a écrit :

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, à 21: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, à 21:23)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#6 Le 10/11/2019, à 08:17

k3c

Re : Script récupération programme tv

tu peux regarder comment fonctionne pyxmltv

https://github.com/vmagnin/pyxmltv


Archlinux sur Xiaomi Air 13

Hors ligne

#7 Le 10/12/2019, à 12: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, à 13:01)

Hors ligne

#8 Le 11/12/2019, à 11: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 12/12/2019, à 00: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.

Hors ligne

#10 Le 12/12/2019, à 00: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, à 11: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

DonutMan75 a écrit :

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, à 17: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, à 17:17)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne