Switched from Télé 7 Jours to NouvelObs as Télé 7 Jours drastically changed its interface

This commit is contained in:
2025-01-11 18:02:22 +01:00
parent 298fa75a60
commit 7a98a0ac84
2 changed files with 28 additions and 31 deletions

View File

@ -59,15 +59,14 @@ class Movie:
class TVGuideScraper:
TV_GUIDE_URL = 'https://www.programme-television.org/{}?bouquet=free'
TV_GUIDE_URL = 'https://programme-tv.nouvelobs.com/programme-free/categorie-film/{}/'
def findAllMovies():
movies = []
days = deque(['lundi', 'mardi', 'mercredi',
'jeudi', 'vendredi', 'samedi', 'dimanche'])
offset = datetime.datetime.today().weekday()
days.rotate(-1-offset)
days.appendleft('')
days.rotate(-offset)
date = datetime.date.today()
for day in days:
movies += TVGuideScraper._getMovies(day, date)
@ -83,32 +82,32 @@ class TVGuideScraper:
r.raise_for_status()
html = BeautifulSoup(r.text, 'html.parser')
movies = []
for channel in html.select('.bloc_cnt'):
if len(channel.select('em')):
for movietag in channel.find_all(TVGuideScraper._tag_is_movie):
for channel in html.select('.tab_grille'):
for movietag in channel.select('.cat-film'):
try:
movie = Movie()
movie.title = \
movietag.select('.texte_titre a')[0]['title']
movie.genre = movietag.select('.texte_cat a')[0].string
movie.channel = channel.select('em')[0]\
.string.replace('Programme ', '')
movie.title = movietag.select('a.titre')[0].string
movie.genre = 'Film' # Genre is not available
movie.channel = channel.select('.logo_chaine_g img')[0]\
['alt'].replace('Programme ','')
movie.day = day.title()
movie.date = datetime.date.strftime(date, '%Y-%m-%d')
movie.start_time = datetime.datetime.strptime(
'{} {}'.format(
movie.date,
movietag.select('.horaire')[0].string
movietag.select('span.t16')[0].string
),
'%Y-%m-%d %H:%M'
'%Y-%m-%d %H.%M'
)
duration = TVGuideScraper._parse_duration(
movietag.select('.texte_cat')[0]
.contents[1].strip(' \n\t()')
re.search(r'\((.*) mn\)',movietag.text).group(1)
)
movie.end_time = movie.start_time + duration
logging.debug('Found movie: {0!r}'.format(movie))
movies.append(movie)
except:
logging.warning('Error parsing movie from tag: {0!r}'.format(movietag))
return movies
@ -125,14 +124,8 @@ class TVGuideScraper:
@staticmethod
def _parse_duration(text):
match = re.match(r"((?P<hours>\d+)h)?(?P<minutes>\d+)mn", text)
if not match:
error = "Could not parse duration '{}'".format(text)
logging.error(error)
raise ValueError(error)
hours = int(match.group('hours')) if match.group('hours') else 0
minutes = int(match.group('minutes'))
return datetime.timedelta(hours=hours, minutes=minutes)
minutes = int(text)
return datetime.timedelta(minutes=minutes)
class FreeboxMoviePlanner:
@ -195,7 +188,7 @@ class FreeboxMoviePlanner:
"Excluding '{}'".format(channel['name'])
)
else:
self.channels[channel['name']] = channel['uuid']
self.channels[channel['name'].lower()] = channel['uuid']
else:
logging.debug("Dropping '{}'".format(channel['name']))
logging.debug('Got the following channels: {}'.format(self.channels))
@ -267,7 +260,7 @@ class FreeboxMoviePlanner:
logging.info('Dropping movies on unavailable channels: {}'.format(
[m for m in self.movies if m.channel not in self.channels]
))
self.movies = [m for m in self.movies if m.channel in self.channels]
self.movies = [m for m in self.movies if m.channel.lower() in self.channels]
logging.debug('Kept {}'.format(self.movies))
def excludeTelevisionMovie(self):
@ -340,6 +333,11 @@ if __name__ == '__main__':
action='store_true',
help='Display more log messages'
)
parser.add_argument(
'-b', '--debug',
action='store_true',
help='Display even more log messages'
)
parser.add_argument(
'-e', '--exclude',
action='append',
@ -357,7 +355,9 @@ if __name__ == '__main__':
args = parser.parse_args()
print("Working the magic, please wait…")
if args.log:
if args.debug:
logging.getLogger().setLevel(logging.DEBUG)
elif args.log:
logging.getLogger().setLevel(logging.INFO)
if args.day:
movies = TVGuideScraper._getMovies()

View File

@ -7,16 +7,12 @@ A Python script to help you select the movies you want to record with your Freeb
Introduction
---
**Note du 11 janvier 2025 :** après 6 ans de bons et loyaux services, ce programme ne fonctionne plus. Le site que jutilisais à totalement changé sont interface graphique et le programme ne fonctionne plus. Je ne regarde plus assez de films et je nai donc pas lintention de ladapter à court terme. Merci.
----
**FreeMoviePlanner** est un outil qui vous facilite la plannification
d'enregistrements avec votre *Freebox*.
Concrètement, l'outil effectue les opérations suivantes :
* Récupérer les film de la semaine à partir du [planning *Télé 7 Jours*](https://www.programme-television.org/?bouquet=free)
* Récupérer les film de la semaine à partir du [planning *NouvelObs*](https://programme-tv.nouvelobs.com/programme-free/categorie-film/)
* Retirer les chaînes auxquelles vous n'avez pas accès
* Trouver les notes des films sur [*TMDb*](https://www.themoviedb.org/) (*The Movie Database*)
* Exclure les films en dessous d'une certaine note (paramétrable)
@ -74,6 +70,7 @@ optional arguments:
-h, --help show this help message and exit
-d, --day Search movies for current day only instead of a full week
-l, --log Display more log messages
-b, --debug Display even more log messages
-e EXCLUDE, --exclude EXCLUDE
Exclude the following Channel
-x EXCLUDE_DIRECTORY, --exclude-directory EXCLUDE_DIRECTORY