PHWinfo banniere

Titres
PORTAIL ANNUAIRE ARTICLES COMPARATEUR HÉBERGEURS DEVIS FORUMS RÉDUCTEUR D'URL
Précédent   PHWinfo > Autres forums > Forum Programmation & Conception > fr.comp.lang.python > grep & regex
S'inscrire FAQ Membres Recherche Messages du jour Marquer les forums comme lus
grep & regex

Réponse
 
LinkBack Outils de la discussion
Vieux 25/08/2007, 16h25   #1
kael
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut grep & regex

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
  Réponse avec citation
Vieux 25/08/2007, 19h32   #2
Méta-MCI \(MVP\)
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

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





  Réponse avec citation
Vieux 25/08/2007, 19h32   #3
Méta-MCI \(MVP\)
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

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





  Réponse avec citation
Vieux 25/08/2007, 21h27   #4
Anthony
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

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.
  Réponse avec citation
Vieux 25/08/2007, 21h27   #5
Anthony
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

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.
  Réponse avec citation
Vieux 26/08/2007, 18h48   #6
MC
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

'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


  Réponse avec citation
Vieux 26/08/2007, 18h48   #7
MC
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

'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


  Réponse avec citation
Vieux 27/08/2007, 09h08   #8
NicolasP
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

>
> 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
  Réponse avec citation
Vieux 27/08/2007, 09h08   #9
NicolasP
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

>
> 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
  Réponse avec citation
Vieux 27/08/2007, 13h51   #10
Jerome
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

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
  Réponse avec citation
Vieux 27/08/2007, 13h51   #11
Jerome
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

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
  Réponse avec citation
Vieux 27/08/2007, 17h20   #12
kael
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

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
  Réponse avec citation
Vieux 27/08/2007, 17h20   #13
kael
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

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
  Réponse avec citation
Vieux 28/08/2007, 08h56   #14
Jerome
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

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
  Réponse avec citation
Vieux 28/08/2007, 08h56   #15
Jerome
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

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
  Réponse avec citation
Vieux 01/09/2007, 08h34   #16
kael
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

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
  Réponse avec citation
Vieux 01/09/2007, 08h34   #17
kael
Aucun Avatar
 
Messages: n/a
Hébergeur:
Par défaut Re: grep & regex

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
  Réponse avec citation
Réponse


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are oui
Pingbacks are oui
Refbacks are oui


Fuseau horaire GMT +1. Il est actuellement 00h31.


Édité par : vBulletin® version 3.7.3
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.2.0 RC5 Tous droits réservés.
Version française #16 par l'association vBulletin francophone
PHWinfo est un site Éducation Sans Frontières ©2000-2008
Ad Management by RedTyger
©Tous droits réservés par les parties respectives
Page generated in 0,27031 seconds with 25 queries