|
|
|
#1 |
|
Messages: n/a
Hébergeur: |
Bonjour,
Ma question ne concerne pas directement Python, mais grep et regex dans un script Python. Je souhaite extraire des fichiers MP3 à partir d'un flux RSS avec <enclosure> du type : <item> <title>foobar</title> <link>http://foo.org/foobar</link> <description></description> <enclosure url="http://foo.org/bar.mp3" type="audio/mpeg" /> </item> J'utilise les commandes suivantes : curl -s 'http://foo.org/rss' | grep -E '(<enclosure)' et j'obtiens une liste du type : <enclosure url="http://foo.org/bar.mp3" type="audio/mpeg" /> Comment ne récupérer que l'url du MP3 ? Merci. -- kael |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
Bonsoir !
Pas forcément besoin d'une RegEx. Exemple : txt='<enclosure url="http://foo.org/bar.mp3" type="audio/mpeg" />' print txt.split('"')[1] Je précise : ...split(apostrophe-guillemetdouble-apostrophe)... @-salutations Michel Claveau |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
Bonsoir !
Pas forcément besoin d'une RegEx. Exemple : txt='<enclosure url="http://foo.org/bar.mp3" type="audio/mpeg" />' print txt.split('"')[1] Je précise : ...split(apostrophe-guillemetdouble-apostrophe)... @-salutations Michel Claveau |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
kael a écrit :
> Bonjour, > > Ma question ne concerne pas directement Python, mais grep et regex dans > un script Python. > > Je souhaite extraire des fichiers MP3 à partir d'un flux RSS avec > <enclosure> du type : > > <item> > <title>foobar</title> > <link>http://foo.org/foobar</link> > <description></description> > <enclosure url="http://foo.org/bar.mp3" type="audio/mpeg" /> > </item> > > J'utilise les commandes suivantes : > > curl -s 'http://foo.org/rss' | grep -E '(<enclosure)' > Le mieux ce serait quand même de récupérer le flux avec urllib, puis de parser le xml avec xml.dom.minidom par exemple. |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
kael a écrit :
> Bonjour, > > Ma question ne concerne pas directement Python, mais grep et regex dans > un script Python. > > Je souhaite extraire des fichiers MP3 à partir d'un flux RSS avec > <enclosure> du type : > > <item> > <title>foobar</title> > <link>http://foo.org/foobar</link> > <description></description> > <enclosure url="http://foo.org/bar.mp3" type="audio/mpeg" /> > </item> > > J'utilise les commandes suivantes : > > curl -s 'http://foo.org/rss' | grep -E '(<enclosure)' > Le mieux ce serait quand même de récupérer le flux avec urllib, puis de parser le xml avec xml.dom.minidom par exemple. |
|
|
|
#6 |
|
Messages: n/a
Hébergeur: |
'soir !
> Le mieux ce serait de récupérer le flux avec urllib, puis de > parser le xml avec xml.dom.minidom par exemple. Sûr ; et même, avec la mode actuelle des RSS, il doit bien y avoir des modules (en Python) qui font tout (et même le KFé-rss) -- @-salutations Michel Claveau |
|
|
|
#7 |
|
Messages: n/a
Hébergeur: |
'soir !
> Le mieux ce serait de récupérer le flux avec urllib, puis de > parser le xml avec xml.dom.minidom par exemple. Sûr ; et même, avec la mode actuelle des RSS, il doit bien y avoir des modules (en Python) qui font tout (et même le KFé-rss) -- @-salutations Michel Claveau |
|
|
|
#8 |
|
Messages: n/a
Hébergeur: |
>
> Le mieux ce serait quand même de récupérer le flux avec urllib, puis de > parser le xml avec xml.dom.minidom par exemple. Avec elementTree, c'est encore plus facile. ElementTree est intégré à Python 2.5. Nicolas |
|
|
|
#9 |
|
Messages: n/a
Hébergeur: |
>
> Le mieux ce serait quand même de récupérer le flux avec urllib, puis de > parser le xml avec xml.dom.minidom par exemple. Avec elementTree, c'est encore plus facile. ElementTree est intégré à Python 2.5. Nicolas |
|
|
|
#10 |
|
Messages: n/a
Hébergeur: |
MC wrote:
> 'soir ! > > >> Le mieux ce serait de récupérer le flux avec urllib, puis de >> parser le xml avec xml.dom.minidom par exemple. > > Sûr ; et même, avec la mode actuelle des RSS, il doit bien y avoir des > modules (en Python) qui font tout (et même le KFé-rss) En googlant on trouve ça http://feedparser.org/ Sinon n'importe quelle librairie qui gère du xml doit te permettre de trouver tes petits avec une expression xpath //item/enclosure/@url |
|
|
|
#11 |
|
Messages: n/a
Hébergeur: |
MC wrote:
> 'soir ! > > >> Le mieux ce serait de récupérer le flux avec urllib, puis de >> parser le xml avec xml.dom.minidom par exemple. > > Sûr ; et même, avec la mode actuelle des RSS, il doit bien y avoir des > modules (en Python) qui font tout (et même le KFé-rss) En googlant on trouve ça http://feedparser.org/ Sinon n'importe quelle librairie qui gère du xml doit te permettre de trouver tes petits avec une expression xpath //item/enclosure/@url |
|
|
|
#12 |
|
Messages: n/a
Hébergeur: |
Méta-MCI (MVP) wrote:
> Bonsoir ! Bonjour, > Pas forcément besoin d'une RegEx. > Exemple : > > txt='<enclosure url="http://foo.org/bar.mp3" type="audio/mpeg" />' > print txt.split('"')[1] > > Je précise : > ...split(apostrophe-guillemetdouble-apostrophe)... Merci à tous pour vos suggestions. Mais étant novice en shell et python, je ne m'en sors pas. Je me suis inspiré de ce howto <http://www.oreillynet.com/lpt/a/4679> : rss_data = "curl -s 'http://hypem.com/playlist/search/' + song.author + song.title + '/rss/1/feed.xml' | grep -E '(enclosure>|url>)'" Et je ne sais pas parser le résultat pour récupérer le 1er mp3. En fait, on m'a donné un script en python qui scrap une playlist de morceaux diffusés à la radio. Et je voudrais récupérer automatiquement le morceau s'il existe sur des sites tel que The Hype Machine. Mais je rencontre plusieurs problèmes, notamment construire une url correcte. Pour l'url, j'ai trouvé : if author.find(" "): author = author.replace(" ", "+") Mais cela ne suffit. Et après, il faut que j'apprenne à écrire un timer. C'est compliqué tout ça. -- kael |
|
|
|
#13 |
|
Messages: n/a
Hébergeur: |
Méta-MCI (MVP) wrote:
> Bonsoir ! Bonjour, > Pas forcément besoin d'une RegEx. > Exemple : > > txt='<enclosure url="http://foo.org/bar.mp3" type="audio/mpeg" />' > print txt.split('"')[1] > > Je précise : > ...split(apostrophe-guillemetdouble-apostrophe)... Merci à tous pour vos suggestions. Mais étant novice en shell et python, je ne m'en sors pas. Je me suis inspiré de ce howto <http://www.oreillynet.com/lpt/a/4679> : rss_data = "curl -s 'http://hypem.com/playlist/search/' + song.author + song.title + '/rss/1/feed.xml' | grep -E '(enclosure>|url>)'" Et je ne sais pas parser le résultat pour récupérer le 1er mp3. En fait, on m'a donné un script en python qui scrap une playlist de morceaux diffusés à la radio. Et je voudrais récupérer automatiquement le morceau s'il existe sur des sites tel que The Hype Machine. Mais je rencontre plusieurs problèmes, notamment construire une url correcte. Pour l'url, j'ai trouvé : if author.find(" "): author = author.replace(" ", "+") Mais cela ne suffit. Et après, il faut que j'apprenne à écrire un timer. C'est compliqué tout ça. -- kael |
|
|
|
#14 |
|
Messages: n/a
Hébergeur: |
kael wrote:
> Méta-MCI (MVP) wrote: >> Bonsoir ! > > Bonjour, > >> Pas forcément besoin d'une RegEx. >> Exemple : >> >> txt='<enclosure url="http://foo.org/bar.mp3" type="audio/mpeg" />' >> print txt.split('"')[1] >> >> Je précise : >> ...split(apostrophe-guillemetdouble-apostrophe)... > > Merci à tous pour vos suggestions. > > Mais étant novice en shell et python, je ne m'en sors pas. Je ne comprends pas ce que tu souhaites faire en shell et ce que tu souhaites faire en python. > > Je me suis inspiré de ce howto <http://www.oreillynet.com/lpt/a/4679> : > > rss_data = "curl -s 'http://hypem.com/playlist/search/' + song.author + > song.title + '/rss/1/feed.xml' | grep -E '(enclosure>|url>)'" Si c'est du python tu créés une chaine qui contient les sous-chaines 'song.author' et 'song.title', pas le contenu de la variable. url_str = 'http://hypem.com/playlist/search/' + song.author + song.title + '/rss/1/feed.xml' rss_data = "curl -s %s | grep -E '(enclosure>|url>)'" % url_str mais en faisant cela tu n'appelles pas les commandes curl et grep. Il faut : - soit que tu passes par des os.popen pour exécuter la ligne de commande et récupérer le résultat - soit que tu passes par urllib2 pour récupérer le flux rss et ensuite le parser. Cela revient faire en python ce que font tes commandes grep et curl - soit que tu récupères le flux xml directement avec une librairie adéquate. Feedparser à l'air de le faire, libxml2 le fait aussi > > Et je ne sais pas parser le résultat pour récupérer le 1er mp3. Ca dépend du choix que tu vas faire avant > > En fait, on m'a donné un script en python qui scrap une playlist de > morceaux diffusés à la radio. scrap ? > > Et je voudrais récupérer automatiquement le morceau s'il existe sur des > sites tel que The Hype Machine. > > Mais je rencontre plusieurs problèmes, notamment construire une url > correcte. Pour l'url, j'ai trouvé : > > if author.find(" "): > author = author.replace(" ", "+") > > Mais cela ne suffit. > > Et après, il faut que j'apprenne à écrire un timer. http://www.python.org/doc/2.2.1/lib/timer-objects.html > > C'est compliqué tout ça. > mais non ![]() |
|
|
|
#15 |
|
Messages: n/a
Hébergeur: |
kael wrote:
> Méta-MCI (MVP) wrote: >> Bonsoir ! > > Bonjour, > >> Pas forcément besoin d'une RegEx. >> Exemple : >> >> txt='<enclosure url="http://foo.org/bar.mp3" type="audio/mpeg" />' >> print txt.split('"')[1] >> >> Je précise : >> ...split(apostrophe-guillemetdouble-apostrophe)... > > Merci à tous pour vos suggestions. > > Mais étant novice en shell et python, je ne m'en sors pas. Je ne comprends pas ce que tu souhaites faire en shell et ce que tu souhaites faire en python. > > Je me suis inspiré de ce howto <http://www.oreillynet.com/lpt/a/4679> : > > rss_data = "curl -s 'http://hypem.com/playlist/search/' + song.author + > song.title + '/rss/1/feed.xml' | grep -E '(enclosure>|url>)'" Si c'est du python tu créés une chaine qui contient les sous-chaines 'song.author' et 'song.title', pas le contenu de la variable. url_str = 'http://hypem.com/playlist/search/' + song.author + song.title + '/rss/1/feed.xml' rss_data = "curl -s %s | grep -E '(enclosure>|url>)'" % url_str mais en faisant cela tu n'appelles pas les commandes curl et grep. Il faut : - soit que tu passes par des os.popen pour exécuter la ligne de commande et récupérer le résultat - soit que tu passes par urllib2 pour récupérer le flux rss et ensuite le parser. Cela revient faire en python ce que font tes commandes grep et curl - soit que tu récupères le flux xml directement avec une librairie adéquate. Feedparser à l'air de le faire, libxml2 le fait aussi > > Et je ne sais pas parser le résultat pour récupérer le 1er mp3. Ca dépend du choix que tu vas faire avant > > En fait, on m'a donné un script en python qui scrap une playlist de > morceaux diffusés à la radio. scrap ? > > Et je voudrais récupérer automatiquement le morceau s'il existe sur des > sites tel que The Hype Machine. > > Mais je rencontre plusieurs problèmes, notamment construire une url > correcte. Pour l'url, j'ai trouvé : > > if author.find(" "): > author = author.replace(" ", "+") > > Mais cela ne suffit. > > Et après, il faut que j'apprenne à écrire un timer. http://www.python.org/doc/2.2.1/lib/timer-objects.html > > C'est compliqué tout ça. > mais non ![]() |
|
|
|
#16 |
|
Messages: n/a
Hébergeur: |
Jerome wrote:
> kael wrote: >> Mais étant novice en shell et python, je ne m'en sors pas. > > Je ne comprends pas ce que tu souhaites faire en shell et ce que tu > souhaites faire en python. En fait, en parlant du shell, je fais réference à grep, sed, etc. >> Je me suis inspiré de ce howto <http://www.oreillynet.com/lpt/a/4679> : >> >> rss_data = "curl -s 'http://hypem.com/playlist/search/' + song.author + >> song.title + '/rss/1/feed.xml' | grep -E '(enclosure>|url>)'" > > Si c'est du python tu créés une chaine qui contient les sous-chaines > 'song.author' et 'song.title', pas le contenu de la variable. > > url_str = 'http://hypem.com/playlist/search/' + song.author + song.title > + '/rss/1/feed.xml' > rss_data = "curl -s %s | grep -E '(enclosure>|url>)'" % url_str > > mais en faisant cela tu n'appelles pas les commandes curl et grep. > Il faut : > - soit que tu passes par des os.popen pour exécuter la ligne de > commande et récupérer le résultat > - soit que tu passes par urllib2 pour récupérer le flux rss et ensuite > le parser. Cela revient faire en python ce que font tes commandes grep > et curl > - soit que tu récupères le flux xml directement avec une librairie > adéquate. Feedparser à l'air de le faire, libxml2 le fait aussi Merci. J'ai trouvé un mini howto pour utiliser xml.dom <http://ask.metafilter.com/62318/Strip-me-some-mp3-urls#938507> ainsi qu'un script pour parser le RSS <http://www.learningpython.com/sources/pythonRSS.txt>. J'arrive à afficher la liste des liens avec print (print link) mais lorsque je créé une variable avec la liste des liens et que j'utilise cette variable, seul le premier lien est affiché, et non la liste. Y'a probablement une array à créer avec un loop, mais j'ai pas encore compris comment faire. >> En fait, on m'a donné un script en python qui scrap une playlist de >> morceaux diffusés à la radio. > > scrap ? Récupérer une page HTML et parser que ce qui intéresse - comme parfois il n'y a pas d'API pour accéder aux data. ![]() >> Et après, il faut que j'apprenne à écrire un timer. > > http://www.python.org/doc/2.2.1/lib/timer-objects.html Merci. En fait, je n'arrivais pas à faire fonctionner le timer parce que j'avais nommé le fichier time.py... J'ai trouvé deux exemples : import time nb=10 i=0 for i in range(nb): time.sleep(5) print "hello" et import threading def hello(): print "hello, world" nb=720 for i in range(nb): t = threading.Timer(10.0, hello) t.start() while t.isAlive(): continue #del t Mais je ne trouve pas comment répéter une action un nombre illimité de fois. >> C'est compliqué tout ça. > > mais non ![]() Bah, un p'tit peu quand même. ![]() Mais une fois que l'on commence à se familiariser, ça devient un peu plus facile. J'ai encore une question. Avec les commandes suivantes j'obtiens : import urllib2,commands,sys,os link = "http://example.org" tinyurl = urllib2.urlopen("http://tinyurl.com/create.php?url=" + link) foo = sys.stdout.write(str(tinyurl)) # pas forcément réglementaire. $ <addinfourl at 136703724 whose fp = <socket._fileobject object at 0x825fdf4>> Comment faire pour afficher l'url créée ? -- kael |
|
|
|
#17 |
|
Messages: n/a
Hébergeur: |
Jerome wrote:
> kael wrote: >> Mais étant novice en shell et python, je ne m'en sors pas. > > Je ne comprends pas ce que tu souhaites faire en shell et ce que tu > souhaites faire en python. En fait, en parlant du shell, je fais réference à grep, sed, etc. >> Je me suis inspiré de ce howto <http://www.oreillynet.com/lpt/a/4679> : >> >> rss_data = "curl -s 'http://hypem.com/playlist/search/' + song.author + >> song.title + '/rss/1/feed.xml' | grep -E '(enclosure>|url>)'" > > Si c'est du python tu créés une chaine qui contient les sous-chaines > 'song.author' et 'song.title', pas le contenu de la variable. > > url_str = 'http://hypem.com/playlist/search/' + song.author + song.title > + '/rss/1/feed.xml' > rss_data = "curl -s %s | grep -E '(enclosure>|url>)'" % url_str > > mais en faisant cela tu n'appelles pas les commandes curl et grep. > Il faut : > - soit que tu passes par des os.popen pour exécuter la ligne de > commande et récupérer le résultat > - soit que tu passes par urllib2 pour récupérer le flux rss et ensuite > le parser. Cela revient faire en python ce que font tes commandes grep > et curl > - soit que tu récupères le flux xml directement avec une librairie > adéquate. Feedparser à l'air de le faire, libxml2 le fait aussi Merci. J'ai trouvé un mini howto pour utiliser xml.dom <http://ask.metafilter.com/62318/Strip-me-some-mp3-urls#938507> ainsi qu'un script pour parser le RSS <http://www.learningpython.com/sources/pythonRSS.txt>. J'arrive à afficher la liste des liens avec print (print link) mais lorsque je créé une variable avec la liste des liens et que j'utilise cette variable, seul le premier lien est affiché, et non la liste. Y'a probablement une array à créer avec un loop, mais j'ai pas encore compris comment faire. >> En fait, on m'a donné un script en python qui scrap une playlist de >> morceaux diffusés à la radio. > > scrap ? Récupérer une page HTML et parser que ce qui intéresse - comme parfois il n'y a pas d'API pour accéder aux data. ![]() >> Et après, il faut que j'apprenne à écrire un timer. > > http://www.python.org/doc/2.2.1/lib/timer-objects.html Merci. En fait, je n'arrivais pas à faire fonctionner le timer parce que j'avais nommé le fichier time.py... J'ai trouvé deux exemples : import time nb=10 i=0 for i in range(nb): time.sleep(5) print "hello" et import threading def hello(): print "hello, world" nb=720 for i in range(nb): t = threading.Timer(10.0, hello) t.start() while t.isAlive(): continue #del t Mais je ne trouve pas comment répéter une action un nombre illimité de fois. >> C'est compliqué tout ça. > > mais non ![]() Bah, un p'tit peu quand même. ![]() Mais une fois que l'on commence à se familiariser, ça devient un peu plus facile. J'ai encore une question. Avec les commandes suivantes j'obtiens : import urllib2,commands,sys,os link = "http://example.org" tinyurl = urllib2.urlopen("http://tinyurl.com/create.php?url=" + link) foo = sys.stdout.write(str(tinyurl)) # pas forcément réglementaire. $ <addinfourl at 136703724 whose fp = <socket._fileobject object at 0x825fdf4>> Comment faire pour afficher l'url créée ? -- kael |
|
![]() |
| Outils de la discussion | |
|
|