Bonjour tout le monde,
Mon appli scanne des pages web à la recherche de liens vers des vidéos.
J’ai donc quelque chose qui ressemble à ceci:
open(@url) { |page|
page_content = page.read()
page_content.scan(/href\s*=\s*[\"']([^\"']+)\.(wmv|avi|mpeg|mpg|mov|mp4)[\"']>(.+)<\/a>/i).each
{ |a|
video_filename = a[0] + "." + a[1]
link_content = a[2] # (attention: le contenu peut comprendre des
balises HTML, par ex <img ...>)
# (... traitements ...)
}
}
J’ai constaté un premier problème avec ce pattern. Si j’ai du code HTML
de ce genre, ça ne prend pas:
<a href="01.mov">
<img src="01_screenshot.jpg" /></a>
Le problème provient du passage à la ligne entre le lien et son contenu
(ici une ). Le morceau de pattern “(.+)” ne prend pas en compte les
newlines. Pour faire simple, j’ai alors décidé de d’abord nettoyer la
source HTML en remplaçant les linebreaks:
page_content = page_content.tr("\n\r|\n|\r", "")
J’ai cru que mon problème serait résolu. Mais un (nouveau) problème est
apparu. Imaginons un code HTML de ce type:
<a href="01.mov"><img src="01_screenshot.jpg" /></a><a
href="02.mov"><img src="02_screenshot.jpg" /></a><a
href="03.mov"><img src="03_screenshot.jpg" /></a>
Le pattern ne prend pas bien et me renvoie un tableau avec ce résultat:
a[0] = "01"
a[1] = "wmv"
a[2] = <img src="01_screenshot.jpg" /></a><a href="02.mov"><img
src="02_screenshot.jpg" /></a><a href="03.mov"><img
src="03_screenshot.jpg" />
Alors que ce que je souhaite en a[2], c’est:
a[2] = <img src="01_screenshot.jpg" />
Ce qui est étrange, c’est que quand je teste mon pattern avec le code
HTML cité ci-dessus sur Regular Expression Library, le résultat est
celui souhaité. Mais dans mon appli Rails, le résultat n’est pas celui
souhaité.
Avez-vous une idée, une solution à mon problème?
Bonne journée,
Michael