Un flux RSS pour le podcast Sur les épaules de Darwin
Dans ce billet, nous allons comme il y a quelques semaines, construire un flux RSS pour mon émission radio préférée : Sur les épaules de Darwin, animée par l'extraordinaire Jean Claude Ameisen.
Afin de faire ceci, nous allons partir du travail de Clément Grimal, qui maintient une liste à jour des émissions avec des liens de téléchargement.
Une question, avant de commencer. Pourquoi faire ce travail, alors que le site de Clément permet déjà d'écouter à volonté ces émissions ? Parce que son site ne permet pas de faire une recherche plein texte sur le contenu des émissions et également parce que j'aime écouter les émissions dans un logiciel de podcast afin de garder un historique de mes écoutes (j'utilise Podcast Addict).
TL;DR Le lien vers le flux RSS généré à partir du présent notebook est ici : https://raw.githubusercontent.com/flothesof/posts/master/files/podcast_Sur_les_epaules_de_Darwin.xml
Date de dernière mise à jour : avril 2020.
Récupération des liens vers les émissions¶
Comme je le disais, notre point de départ est le site de Clément Grimal. Nous analysons sa source avec beautifulsoup4
pour en extraire les éléments qui nous intéressent :
- titre de l'émission
- date de diffusion
- lien de téléchargement
- lien vers la page du site France Inter
import requests
from bs4 import BeautifulSoup
base_url = "http://clementgrimal.fr/darwin/"
r = requests.get(base_url)
r.encoding = 'utf-8'
soup = BeautifulSoup(r.text, 'html.parser')
L'objet soup
nous permet d'extraire les différents éléments de la page web, de manière structurée. On obtient la liste de toutes les émissions de cette manière :
all_shows = ([item for item in (li.find('table') for li in soup.findAll('li')) if item])
len(all_shows)
516
A partir du tag li
(item de liste en HTML), on peut obtenir le lien vers le fichier mp3 ainsi que le site France Inter, de même que le titre et la date de diffusion.
Par exemple avec le dernier épisode :
show = all_shows[-1]
show.find('a', class_='download-link').attrs['href'].strip()
'./files/2020-04-11 - aux-origines-du-chocolat-8.mp3'
show.find('span').find('a').attrs['href']
'https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-11-avril-2020'
show.find('span').find('a').text
'Aux Origines du Chocolat (8)'
str(show.find('span').find('a').next_sibling)[14:]
'11 Avril 2020'
Ecrivons maintenant une boucle pour extraire ces informations pour l'intégralité des épisodes :
show_data = []
for show in all_shows:
download_link = show.find('a', class_='download-link')
description_link = show.find('span').find('a').attrs['href']
title = show.find('span').find('a').text
date = str(show.find('span').find('a').next_sibling)[14:]
if download_link:
if download_link.attrs['href'].strip().startswith('.'):
download_link = "http://clementgrimal.fr/darwin" + download_link.attrs['href'].strip()[1:]
else:
download_link = download_link.attrs['href'].strip()
show_data.append([download_link, description_link, title, date])
else:
print(f"lien de téléchargement indisponible pour l'émission {show.find('a').attrs['href']}")
lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-12-janvier-2013 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-28-mars-2015 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-04-avril-2015 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-11-avril-2015 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-02-juin-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-09-juin-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-29-juin-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-06-juillet-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-13-juillet-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-20-juillet-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-27-juillet-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-03-aout-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-10-aout-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-17-aout-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-24-aout-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-30-novembre-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-14-decembre-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-21-decembre-2019 lien de téléchargement indisponible pour l'émission https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-01-fevrier-2020
Construisons une dataframe pandas
avec ces données :
import pandas as pd
df = pd.DataFrame(show_data, columns=['lien mp3', 'lien description', 'titre', 'date'])
df.head(10)
lien mp3 | lien description | titre | date | |
---|---|---|---|---|
0 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | La théorie de l'évolution de Charles Darwin | 4 Septembre 2010 |
1 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | Le propre de l'homme? | 11 Septembre 2010 |
2 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | Nos mémoires | 18 Septembre 2010 |
3 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | Nos émotions | 25 Septembre 2010 |
4 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | Longévité, jeunesse et vieillissement | 2 Octobre 2010 |
5 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | MORT CELLULAIRE ET SCULPTURE DU VIVANT | 9 Octobre 2010 |
6 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | NAISSANCES | 16 Octobre 2010 |
7 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | Biodiversité | 23 Octobre 2010 |
8 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | mort cellulaire et sculpture du vivant (2) | 30 Octobre 2010 |
9 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | Un voyage avec Oliver Sacks ( 1 ) | 6 Novembre 2010 |
df.describe()
lien mp3 | lien description | titre | date | |
---|---|---|---|---|
count | 497 | 497 | 497 | 497 |
unique | 497 | 497 | 394 | 497 |
top | http://clementgrimal.fr/darwin/files/2016-10-0... | https://www.franceinter.fr/emissions/sur-les-e... | Les battements du temps (21) | 11 Juin 2016 |
freq | 1 | 1 | 3 | 1 |
Nous voilà maintenant en possession des liens vers 497 épisodes publiés avec lien de téléchargement sur le site de Clément Grimal. On remarque que certaines d'entre elles sont des rediffusions (394 titres uniques sur 497).
Téléchargeons maintenant les descriptions des émissions, afin de construire un fil RSS avec celles-ci.
Téléchargement des descriptions à partir du site de France Inter¶
Nous avons les liens vers la page de chaque émission : si on lit celle-ci, on peut en extraire le contenu que nous cherchons, c'est-à-dire la description de l'épisode.
Essayons de faire cela avec le dernier épisode en date.
link = df['lien description'].iloc[-1]
link
'https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-11-avril-2020'
soup = BeautifulSoup(requests.get(link).text, 'html.parser')
article_tag = soup.find('article')
article_tag
<article class="content-body"> <p class="chapo"> Merci à vous, (un million six cent quatre vingt mille) auditeurs fidèles Portez-vous bien ainsi que tous les vôtres </p> <figure class="rich-visual"><picture><source class="dejavu" data-dejavu-srcset="https://cdn.radiofrance.fr/s3/cruiser-production/2020/04/997ff263-9655-4a2d-9504-3b5ca104b734/640_gettyimages-960923834.webp" srcset="data:image/jpeg;base64,/9j/2wBDACgcHiMeGSgjISMtKygwPGRBPDc3PHtYXUlkkYCZlo+AjIqgtObDoKrarYqMyP/L2u71////m8H////6/+b9//j/2wBDASstLTw1PHZBQXb4pYyl+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj/wAARCAAZACoDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAQIEA//EACIQAAICAQMFAQEAAAAAAAAAAAECAAMREiExBBMyQWEiYv/EABYBAQEBAAAAAAAAAAAAAAAAAAECAP/EABYRAQEBAAAAAAAAAAAAAAAAAAARAf/aAAwDAQACEQMRAD8AddAq1MdoGdWrzXzJ7ASRv+B6ha5gAKk9ScxdO9zkDC4I5hXqRrwVyPklFli+XuapYrDGMZjBVidq3g7j1D21+SWrp7Es1hwZVq/mTpTilLEyTvMtFgfCrtN6+I45mpiV6W3A3P2ZIdJ0uCPsvMmt8o5ojddlGOCIhrOfIwjxWNAv/9k=" type="image/webp"/><img alt="le chocolat" class="dejavu" data-dejavu-src="https://cdn.radiofrance.fr/s3/cruiser-production/2020/04/997ff263-9655-4a2d-9504-3b5ca104b734/640_gettyimages-960923834.jpg" height="391" src="data:image/jpeg;base64, /9j/2wBDACgcHiMeGSgjISMtKygwPGRBPDc3PHtYXUlkkYCZlo+AjIqgtObDoKrarYqMyP/L2u71////m8H////6/+b9//j/2wBDASstLTw1PHZBQXb4pYyl+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj/wAARCAAZACoDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAQIEA//EACIQAAICAQMFAQEAAAAAAAAAAAECAAMREiExBBMyQWEiYv/EABYBAQEBAAAAAAAAAAAAAAAAAAECAP/EABYRAQEBAAAAAAAAAAAAAAAAAAARAf/aAAwDAQACEQMRAD8AddAq1MdoGdWrzXzJ7ASRv+B6ha5gAKk9ScxdO9zkDC4I5hXqRrwVyPklFli+XuapYrDGMZjBVidq3g7j1D21+SWrp7Es1hwZVq/mTpTilLEyTvMtFgfCrtN6+I45mpiV6W3A3P2ZIdJ0uCPsvMmt8o5ojddlGOCIhrOfIwjxWNAv/9k=" width="640"/></picture><figcaption>le chocolat © Getty / kolderal</figcaption></figure> <h2>Une rediffusion de l'émission du 19 janvier 2019</h2> <h2>Jean Claude Ameisen, en écoutant l'émission, nous signale qu'il a fait un lapsus à la fin de la deuxième partie. Il voulait dire "3 siècles" (et non "3 ans" !) avant le règne du grand roi Hammourabi".</h2> <h2>Articles scientifiques :</h2> <ul> <li><em>Zarrillo S, Gaikwad N, Lanaud C, et coll.</em> _<strong>The use and domestication of Theobroma cacao during the mid-Holocene in the upper Amazon</strong>_<em>. Nature Ecology and Evolution 2018, 2:1879-88.</em></li> <li><em>Powis T, Cyphers A, Gaikwad N, et coll.</em> _<strong>Cacao use and the San Lorenzo Olmec</strong>_<em>. Proceedings of the National Academy of Sciences USA 2011, 108:8595-600. </em></li> <li><em>Powis T, Hurst J, del Carmen Rodríguez, et coll.</em> _<strong>Oldest chocolate in the New World</strong>_<em>. Antiquity 2007, 81:314.</em></li> <li><em>Valdez F, Guffroy J, de Saulieu G, et coll.</em> _<strong>Découverte d’un site cérémoniel formatif sur le versant oriental des Andes</strong>_<em>. Comptes Rendus Palevol 2005, 4:39-74.</em></li> </ul> <h2>Livres : </h2> <ul> <li>John Keats. <em><strong>Poèmes</strong></em><strong>.</strong>[Edition Bilingue]. Imprimerie Nationale Editions, 2000.</li> <li>John Keats. _<strong>Seul dans la splendeur</strong>_<em>.</em> [Edition Bilingue]<em>.</em> Points, 2009.</li> <li>César Itier. _<strong>Les Incas</strong>_<em>.</em> Guides Belles Lettres des Civilisations, Les Belles Lettres, 2010.</li> <li>John Hemming. _<strong>The conquest of the Incas</strong>_<em>.</em> Mariner Books, 2012.</li> <li>Walter Isaacson. _<strong>Leonardo da Vinci. The Biography</strong>_<em>.</em> Simon and Schuster, 2017.</li> <li>Tommy Orange. _<strong>There There</strong>_<em>.</em> Alfred A. Knopf, 2018.</li> <li>Federico Garcia Lorca. _<strong>Oeuvres complètes</strong>_<em>.</em> [Tome 1. Poésie]. Gallimard, Bibliothèque de la Pléiade, 1981.</li> <li>Emily Jungmin Yoon._<strong>A cruelty special to our species. Poems</strong>_<em>.</em> Ecco, 2018.</li> <li>Sophie Coe, Michael Coe. _<strong>The true history of chocolate</strong>_<em>.</em> Thames and Hudson Ltd, 2013.</li> </ul> <h2>Chansons diffusées :</h2> <ul> <li>Malik Djoudi - <em><strong>Tempérament</strong></em> - Cinq 7</li> <li>William Z Villain - <em><strong>Something beautiful</strong></em> - Miliani Editions</li> <li>Aldous Harding / John Parish / Enrico Gabrielli - <em><strong>Horizon</strong></em> - 4 AD</li> </ul> </article>
Il se trouve que des balises script sont contenues dans les épisodes (elles affichent de la publicité sur le site de France Inter).
Si on reformate les tags HTML, on obtient le résultat suivant :
soup.find_all('section')[0].text
"AccueilÉmissions\n Sur les épaules de Darwin\n Aux Origines du Chocolat (8) Sur les épaules de Darwin\n samedi 11 avril 2020\n par\n Jean Claude AmeisenAux Origines du Chocolat (8)\n 53 minutes\n réécouters'abonnerPodcastRSSréagirContact"
def clean(soup, tags_to_clean=['script']):
"""Nettoie le HTML de l'émission en enlevant les balises inutiles."""
for tag in tags_to_clean:
for item in soup.find_all(tag):
item.decompose()
return soup.article
clean(soup)
<article class="content-body"> <p class="chapo"> Merci à vous, (un million six cent quatre vingt mille) auditeurs fidèles Portez-vous bien ainsi que tous les vôtres </p> <figure class="rich-visual"><picture><source class="dejavu" data-dejavu-srcset="https://cdn.radiofrance.fr/s3/cruiser-production/2020/04/997ff263-9655-4a2d-9504-3b5ca104b734/640_gettyimages-960923834.webp" srcset="data:image/jpeg;base64,/9j/2wBDACgcHiMeGSgjISMtKygwPGRBPDc3PHtYXUlkkYCZlo+AjIqgtObDoKrarYqMyP/L2u71////m8H////6/+b9//j/2wBDASstLTw1PHZBQXb4pYyl+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj/wAARCAAZACoDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAQIEA//EACIQAAICAQMFAQEAAAAAAAAAAAECAAMREiExBBMyQWEiYv/EABYBAQEBAAAAAAAAAAAAAAAAAAECAP/EABYRAQEBAAAAAAAAAAAAAAAAAAARAf/aAAwDAQACEQMRAD8AddAq1MdoGdWrzXzJ7ASRv+B6ha5gAKk9ScxdO9zkDC4I5hXqRrwVyPklFli+XuapYrDGMZjBVidq3g7j1D21+SWrp7Es1hwZVq/mTpTilLEyTvMtFgfCrtN6+I45mpiV6W3A3P2ZIdJ0uCPsvMmt8o5ojddlGOCIhrOfIwjxWNAv/9k=" type="image/webp"/><img alt="le chocolat" class="dejavu" data-dejavu-src="https://cdn.radiofrance.fr/s3/cruiser-production/2020/04/997ff263-9655-4a2d-9504-3b5ca104b734/640_gettyimages-960923834.jpg" height="391" src="data:image/jpeg;base64, /9j/2wBDACgcHiMeGSgjISMtKygwPGRBPDc3PHtYXUlkkYCZlo+AjIqgtObDoKrarYqMyP/L2u71////m8H////6/+b9//j/2wBDASstLTw1PHZBQXb4pYyl+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj/wAARCAAZACoDASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAQIEA//EACIQAAICAQMFAQEAAAAAAAAAAAECAAMREiExBBMyQWEiYv/EABYBAQEBAAAAAAAAAAAAAAAAAAECAP/EABYRAQEBAAAAAAAAAAAAAAAAAAARAf/aAAwDAQACEQMRAD8AddAq1MdoGdWrzXzJ7ASRv+B6ha5gAKk9ScxdO9zkDC4I5hXqRrwVyPklFli+XuapYrDGMZjBVidq3g7j1D21+SWrp7Es1hwZVq/mTpTilLEyTvMtFgfCrtN6+I45mpiV6W3A3P2ZIdJ0uCPsvMmt8o5ojddlGOCIhrOfIwjxWNAv/9k=" width="640"/></picture><figcaption>le chocolat © Getty / kolderal</figcaption></figure> <h2>Une rediffusion de l'émission du 19 janvier 2019</h2> <h2>Jean Claude Ameisen, en écoutant l'émission, nous signale qu'il a fait un lapsus à la fin de la deuxième partie. Il voulait dire "3 siècles" (et non "3 ans" !) avant le règne du grand roi Hammourabi".</h2> <h2>Articles scientifiques :</h2> <ul> <li><em>Zarrillo S, Gaikwad N, Lanaud C, et coll.</em> _<strong>The use and domestication of Theobroma cacao during the mid-Holocene in the upper Amazon</strong>_<em>. Nature Ecology and Evolution 2018, 2:1879-88.</em></li> <li><em>Powis T, Cyphers A, Gaikwad N, et coll.</em> _<strong>Cacao use and the San Lorenzo Olmec</strong>_<em>. Proceedings of the National Academy of Sciences USA 2011, 108:8595-600. </em></li> <li><em>Powis T, Hurst J, del Carmen Rodríguez, et coll.</em> _<strong>Oldest chocolate in the New World</strong>_<em>. Antiquity 2007, 81:314.</em></li> <li><em>Valdez F, Guffroy J, de Saulieu G, et coll.</em> _<strong>Découverte d’un site cérémoniel formatif sur le versant oriental des Andes</strong>_<em>. Comptes Rendus Palevol 2005, 4:39-74.</em></li> </ul> <h2>Livres : </h2> <ul> <li>John Keats. <em><strong>Poèmes</strong></em><strong>.</strong>[Edition Bilingue]. Imprimerie Nationale Editions, 2000.</li> <li>John Keats. _<strong>Seul dans la splendeur</strong>_<em>.</em> [Edition Bilingue]<em>.</em> Points, 2009.</li> <li>César Itier. _<strong>Les Incas</strong>_<em>.</em> Guides Belles Lettres des Civilisations, Les Belles Lettres, 2010.</li> <li>John Hemming. _<strong>The conquest of the Incas</strong>_<em>.</em> Mariner Books, 2012.</li> <li>Walter Isaacson. _<strong>Leonardo da Vinci. The Biography</strong>_<em>.</em> Simon and Schuster, 2017.</li> <li>Tommy Orange. _<strong>There There</strong>_<em>.</em> Alfred A. Knopf, 2018.</li> <li>Federico Garcia Lorca. _<strong>Oeuvres complètes</strong>_<em>.</em> [Tome 1. Poésie]. Gallimard, Bibliothèque de la Pléiade, 1981.</li> <li>Emily Jungmin Yoon._<strong>A cruelty special to our species. Poems</strong>_<em>.</em> Ecco, 2018.</li> <li>Sophie Coe, Michael Coe. _<strong>The true history of chocolate</strong>_<em>.</em> Thames and Hudson Ltd, 2013.</li> </ul> <h2>Chansons diffusées :</h2> <ul> <li>Malik Djoudi - <em><strong>Tempérament</strong></em> - Cinq 7</li> <li>William Z Villain - <em><strong>Something beautiful</strong></em> - Miliani Editions</li> <li>Aldous Harding / John Parish / Enrico Gabrielli - <em><strong>Horizon</strong></em> - 4 AD</li> </ul> </article>
On peut afficher un aperçu de notre description :
from IPython.display import HTML
HTML(str(clean(soup)))
Merci à vous, (un million six cent quatre vingt mille) auditeurs fidèles Portez-vous bien ainsi que tous les vôtres
Une rediffusion de l'émission du 19 janvier 2019
Jean Claude Ameisen, en écoutant l'émission, nous signale qu'il a fait un lapsus à la fin de la deuxième partie. Il voulait dire "3 siècles" (et non "3 ans" !) avant le règne du grand roi Hammourabi".
Articles scientifiques :
- Zarrillo S, Gaikwad N, Lanaud C, et coll. _The use and domestication of Theobroma cacao during the mid-Holocene in the upper Amazon_. Nature Ecology and Evolution 2018, 2:1879-88.
- Powis T, Cyphers A, Gaikwad N, et coll. _Cacao use and the San Lorenzo Olmec_. Proceedings of the National Academy of Sciences USA 2011, 108:8595-600.
- Powis T, Hurst J, del Carmen Rodríguez, et coll. _Oldest chocolate in the New World_. Antiquity 2007, 81:314.
- Valdez F, Guffroy J, de Saulieu G, et coll. _Découverte d’un site cérémoniel formatif sur le versant oriental des Andes_. Comptes Rendus Palevol 2005, 4:39-74.
Livres :
- John Keats. Poèmes.[Edition Bilingue]. Imprimerie Nationale Editions, 2000.
- John Keats. _Seul dans la splendeur_. [Edition Bilingue]. Points, 2009.
- César Itier. _Les Incas_. Guides Belles Lettres des Civilisations, Les Belles Lettres, 2010.
- John Hemming. _The conquest of the Incas_. Mariner Books, 2012.
- Walter Isaacson. _Leonardo da Vinci. The Biography_. Simon and Schuster, 2017.
- Tommy Orange. _There There_. Alfred A. Knopf, 2018.
- Federico Garcia Lorca. _Oeuvres complètes_. [Tome 1. Poésie]. Gallimard, Bibliothèque de la Pléiade, 1981.
- Emily Jungmin Yoon._A cruelty special to our species. Poems_. Ecco, 2018.
- Sophie Coe, Michael Coe. _The true history of chocolate_. Thames and Hudson Ltd, 2013.
Chansons diffusées :
- Malik Djoudi - Tempérament - Cinq 7
- William Z Villain - Something beautiful - Miliani Editions
- Aldous Harding / John Parish / Enrico Gabrielli - Horizon - 4 AD
Ceci étant fait, on peut écrire une boucle pour extraire toutes les descriptions d'épisode :
from functools import lru_cache
@lru_cache(maxsize=None)
def link_getter(description_link):
"""Récupère la page de l'émission en question, stocke le résultat pour un accès ultérieur plus rapide."""
return requests.get(description_link)
import tqdm
descriptions = []
for description_link in tqdm.tqdm(df['lien description']):
soup = BeautifulSoup(link_getter(description_link).text, 'html.parser')
descriptions.append(clean(soup))
100%|██████████| 497/497 [07:11<00:00, 1.15it/s]
On peut compléter notre dataframe
avec les descriptions obtenues :
df['description'] = descriptions
df['description_text'] = [d.text for d in descriptions]
Afin de vérifier que tout va bien, nous allons faire un pré-affichage rapide avec ipywidgets
.
from ipywidgets import interact
@interact
def preview_html(n=(0, df.shape[0] - 1)):
return HTML(f"<a href='{df['lien description'].iloc[n]}' target='_blank'>lien</a>" + str(df.description.iloc[n]))
interactive(children=(IntSlider(value=248, description='n', max=496), Output()), _dom_classes=('widget-interac…
Rajouter d'autres sections¶
Comme on peut le voir sur cet épisode [https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin/sur-les-epaules-de-darwin-16-mai-2015], parfois les références sont cachées dans un tag section
, avec le nom de l'équipe de production. Comptons le nombre de tag section
:
sections = []
for description_link in tqdm.tqdm(df['lien description']):
soup = BeautifulSoup(link_getter(description_link).text, 'html.parser')
sections.append(len(soup.find('div', class_='main-content').find_all('section')))
100%|██████████| 497/497 [00:45<00:00, 10.90it/s]
Et regardons le comptage :
pd.Series(sections).value_counts()
2 295 1 189 3 10 0 3 dtype: int64
On peut donc proposer un deuxième algorithme : on va chercher les sections supplémentaires en-dessous de main-content
et on les nettoie elles-aussi.
def clean2(soup, tags_to_clean=['script']):
"""Nettoie le HTML de l'émission en enlevant les balises inutiles."""
for tag in tags_to_clean:
for item in soup.find_all(tag):
item.decompose()
return str(soup.find('div', class_='main-content').article) + "\n".join([str(item) for item in soup.find('div', class_='main-content').find_all('section', class_='content-body-more-details')])
HTML(clean2(soup))
Merci à vous, (un million six cent quatre vingt mille) auditeurs fidèles Portez-vous bien ainsi que tous les vôtres
Une rediffusion de l'émission du 19 janvier 2019
Jean Claude Ameisen, en écoutant l'émission, nous signale qu'il a fait un lapsus à la fin de la deuxième partie. Il voulait dire "3 siècles" (et non "3 ans" !) avant le règne du grand roi Hammourabi".
Articles scientifiques :
- Zarrillo S, Gaikwad N, Lanaud C, et coll. _The use and domestication of Theobroma cacao during the mid-Holocene in the upper Amazon_. Nature Ecology and Evolution 2018, 2:1879-88.
- Powis T, Cyphers A, Gaikwad N, et coll. _Cacao use and the San Lorenzo Olmec_. Proceedings of the National Academy of Sciences USA 2011, 108:8595-600.
- Powis T, Hurst J, del Carmen Rodríguez, et coll. _Oldest chocolate in the New World_. Antiquity 2007, 81:314.
- Valdez F, Guffroy J, de Saulieu G, et coll. _Découverte d’un site cérémoniel formatif sur le versant oriental des Andes_. Comptes Rendus Palevol 2005, 4:39-74.
Livres :
- John Keats. Poèmes.[Edition Bilingue]. Imprimerie Nationale Editions, 2000.
- John Keats. _Seul dans la splendeur_. [Edition Bilingue]. Points, 2009.
- César Itier. _Les Incas_. Guides Belles Lettres des Civilisations, Les Belles Lettres, 2010.
- John Hemming. _The conquest of the Incas_. Mariner Books, 2012.
- Walter Isaacson. _Leonardo da Vinci. The Biography_. Simon and Schuster, 2017.
- Tommy Orange. _There There_. Alfred A. Knopf, 2018.
- Federico Garcia Lorca. _Oeuvres complètes_. [Tome 1. Poésie]. Gallimard, Bibliothèque de la Pléiade, 1981.
- Emily Jungmin Yoon._A cruelty special to our species. Poems_. Ecco, 2018.
- Sophie Coe, Michael Coe. _The true history of chocolate_. Thames and Hudson Ltd, 2013.
Chansons diffusées :
- Malik Djoudi - Tempérament - Cinq 7
- William Z Villain - Something beautiful - Miliani Editions
- Aldous Harding / John Parish / Enrico Gabrielli - Horizon - 4 AD
- Jean Claude AmeisenAuteur
- Christophe ImbertRéalisateur
- Christophe MagerAttaché de production
On met à jour les descriptions.
descriptions = []
for description_link in tqdm.tqdm(df['lien description']):
soup = BeautifulSoup(link_getter(description_link).text, 'html.parser')
descriptions.append(clean2(soup))
100%|██████████| 497/497 [00:51<00:00, 9.64it/s]
df['description'] = descriptions
df['description_text'] = [BeautifulSoup(desc, 'html.parser').text for desc in descriptions]
Et on vérifie qu'on a le résultat attendu.
@interact
def preview_html(n=(0, df.shape[0] - 1)):
return HTML(f"<a href='{df['lien description'].iloc[n]}' target='_blank'>lien</a>" + str(df.description.iloc[n]))
interactive(children=(IntSlider(value=248, description='n', max=496), Output()), _dom_classes=('widget-interac…
Un dernier test :
soup = BeautifulSoup(link_getter(df['lien description'].iloc[230]).text, 'html.parser')
HTML(clean2(soup))
Des animaux pharmaciens et médecins (2)
Articles scientifiques :
Luncz LV, Boesch C. The extent of cultural variation between adjacent chimpanzee (Pan troglodytes verus ) communities; a microecological approach. American Journal of Physical Anthropology 2015, 156:67-75.
Gendron CM, Kuo TH, Harvanek ZM, et coll . Drosophila life span and physiology are modulated by sexual perception and reward. Science 2014, 343:544-8.
Shurkin J. News feature: Animals that self-medicate. Proceedings of the National Academy of Sciences of the USA 2014, 111:17339-41.
Underwood E. The taste of things to come. Science 2014, 345:750-1.
Kacsoh BZ, Lynch ZR, Mortimer NT, et coll . Fruit flies medicate offspring after seeing parasites. Science 2013, 339:947-50.
de Roode J, Lefèvre T, Hunter M. Self-medication in animals. Science 2013, 340:150-1.
Boesch C. Christophe Boesch. Current Biology 2012, 22:R936-7.
Milan NF, Kacsoh BZ, Schlenke TA. Alcohol consumption as self-medication against blood-borne parasites in the fruit fly. Current Biology 2012, 22:488-93.
Shohat-Ophir G, Kaun KR, Azanchi R, et coll . Sexual deprivation increases ethanol intake in Drosophila. Science 2012, 335:1351-5.
Zars T. Physiology. She said no, pass me a beer. Science 2012, 335:1309-10.
Luncz LV, Mundry R, Boesch C. Evidence for cultural differences between neighboring chimpanzee communities. Current Biology 2012, 22:922-6.
Kaun KR, Azanchi R, Maung Z, et coll . A Drosophila model for alcohol reward. Nature Neuroscience 2011, 14:612-9.
Morell V. Called ‘trimates’, three bold women shaped their field. Science 1993, 260:420-5.
Morell V. Seeing nature through the lens of gender. Science 1993, 260:428-9.
Autres publications :
Dossier n°86 Pour la Science , janvier - mars 2015. Nos cousins les grands singes.
Christophe Boesch. Les chimpanzés : des grands singes pétris de culture. Dossier n°86 Pour la Science , janvier - mars 2015. Nos cousins les grands singes, pp50-5.
Letter from Charles Darwin to Asa Grey, 22 May 1860: http://www\.darwinproject\.ac\.uk/letter/entry\-2814
Agenda :
Exposition « Sur la piste des Grands Singes » , à la Grande Galerie de l’Évolution du Muséum national d’Histoire naturelle, Jardin des Plantes, Paris, du 11 février au 21 mars 2015. http://www.mnhn.fr/fr/visitez/agenda/exposition/piste-grands-singes
Tout le programme de « La saison des Grands Singes » : http://www\.mnhn\.fr/fr/visitez/agenda/saison/saison\-grands\-singes
- Jean Claude AmeisenAuteur
- Christophe ImbertRéalisateur (trice)
- Jean-Baptiste AudibertProgrammateur (trice) musical (e)
- Christophe MagerAttaché(e) de production
Il nous manque encore la récupération des tailles de fichier mp3, qui sera inscrite dans le flux RSS :
Taille des fichiers mp3¶
byte_lengths = []
for mp3_link in tqdm.tqdm(df['lien mp3']):
r = requests.head(mp3_link)
byte_lengths.append(r.headers['content-length'])
100%|██████████| 497/497 [00:14<00:00, 34.02it/s]
df['byte_length'] = byte_lengths
df.head()
lien mp3 | lien description | titre | date | description | description_text | byte_length | |
---|---|---|---|---|---|---|---|
0 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | La théorie de l'évolution de Charles Darwin | 4 Septembre 2010 | <article class="content-body">\n<p><strong>Bib... | <article class="content-body">\n<p><strong>Bib... | 51120256 |
1 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | Le propre de l'homme? | 11 Septembre 2010 | <article class="content-body">\n<h3><strong>pr... | <article class="content-body">\n<h3><strong>pr... | 52287616 |
2 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | Nos mémoires | 18 Septembre 2010 | <article class="content-body">\n<h3><strong>pr... | <article class="content-body">\n<h3><strong>pr... | 51320960 |
3 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | Nos émotions | 25 Septembre 2010 | <article class="content-body">\n<h3><strong>pr... | <article class="content-body">\n<h3><strong>pr... | 54608000 |
4 | http://prevost.pascal.free.fr/public/podcast/s... | http://www.franceinter.fr/em/sur-les-epaules-d... | Longévité, jeunesse et vieillissement | 2 Octobre 2010 | <article class="content-body">\n<h3><strong>pr... | <article class="content-body">\n<h3><strong>pr... | 52762752 |
Ecriture du fichier RSS¶
Maintenant que nous avons collecté toutes les émissions, nous pouvons écrire un ficher RSS, comme nous l'avions déjà fait dans le cas de l'émission Rendez vous avec X.
L'un des points importants est que nous voulons écrire du HTML dans la description du podcast. Pour ce faire, nous devons utiliser un champ dédié : <content:encoded>
alors que le champ <description>
ne doit contenir que du texte (source ici : https://podnews.net/article/how-podcast-show-notes-display).
import dateparser
import xml.etree.cElementTree as ET
rss = ET.Element("rss", version="2.0")
channel = ET.SubElement(rss, "channel")
title = ET.SubElement(channel, "title")
title.text = 'Podcast Sur les épaules de Darwin'
description = ET.SubElement(channel, "description")
description.text = "Podcast inofficiel de l'émission Sur les épaules de Darwin, tiré du site http://clementgrimal.fr/darwin/ et https://www.franceinter.fr/emissions/sur-les-epaules-de-darwin"
for index, row in df.iterrows():
item = ET.SubElement(channel, "item")
item_title = ET.SubElement(item, "title")
item_title.text = row['titre']
item_description = ET.SubElement(item, "description")
item_description.text = row['description_text'].strip()
item_content_encoded = ET.SubElement(item, "content:encoded")
item_content_encoded.text = row['description']
item_pubdate = ET.SubElement(item, "pubDate")
item_pubdate.text = dateparser.parse(row.date).date().strftime('%a, %d %b %Y 11:00:00')
item_enclosure = ET.SubElement(item, "enclosure", url='{}'.format(row['lien mp3']),
length=row.byte_length,
type="audio/mpeg")
tree = ET.ElementTree(rss)
tree.write("files/podcast_Sur_les_epaules_de_Darwin.xml", encoding='utf-8')
Le lien vers le fichier généré est ici : https://raw.githubusercontent.com/flothesof/posts/master/files/podcast_Sur_les_epaules_de_Darwin.xml.
Ce billet a été écrit à l'aide d'un notebook Jupyter. Son contenu est sous licence BSD. Une vue statique de ce notebook peut être consultée et téléchargée ici : 20170908_PodcastEpaulesDeDarwin.ipynb.