2014-10-09 4 views
0

Я пишу скрипт python, где входным является URL-адрес видео, например. http://www.youtube.com/embed/YX6eoRTaoUcИзменение размера youtube/dailymotion/vimeo

и возвращает некоторую информацию о видео (длительность, код встраивания и других, как это ...)

Проблема встраивать размер возвращаемый YouTube и других видеосервисов (Vimeo, Dailymotion) плохо для меня ,

Например.

<iframe width="480" width="260" src="http://www.youtube.com/embed/YX6eoRTaoUc?feature=oembed" frameborder="0" allowfullscreen></iframe> 

I нужны другие значения, чем 480 и 270. Мой подход был

player_html = player_html.replace('width="480"','width="656"') 
    player_html = player_html.replace('height="270"','height="517"') 

Но если YouTube или другие видео услуга отправит другое значение, чем 480 он не будет работать. Пыталось регулярное выражение, но мне было очень сложно.

Это регулярное выражение соответствует параметру ширины, но что дальше?

\W|^width="\d+"\W|$ 
+0

Рассмотрим с помощью HTML парсер, например [BeautifulSoup] (http://www.crummy.com/software/BeautifulSoup/). – mhawke

ответ

1

Правильный анализатор HTML поможет вам в этом. Попробуйте BeautifulSoup:

>>> from bs4 import BeautifulSoup 

>>> html = '''<iframe width="480" width="260" src="http://www.youtube.com/embed/YX6eoRTaoUc?feature=oembed" frameborder="0" allowfullscreen></iframe>''' 

>>> soup = BeautifulSoup(html) 
>>> soup.iframe['width'] = 656 
>>> soup.iframe['height'] = 517 

>>> print print soup.prettify() 
<html> 
<body> 
    <iframe allowfullscreen="" frameborder="0" height="517" src="http://www.youtube.com/embed/YX6eoRTaoUc?feature=oembed" width="656"> 
    </iframe> 
</body> 
</html> 

>>> html = unicode(soup)  # or str(soup) as required. 
0

Что я делаю, используя адаптивный DIV, без ширины, высоты указано

HTML:

<div class="responsive-video"> 
<iframe src="//www.youtube.com/embed/nYM3dqntqfQ?theme=light&amp;autoplay=1&amp;vq=hd720&amp;rel=0&amp;showinfo=0&amp;modestbranding=1&amp;autohide=1&amp;wmode=transparent&amp;iv_load_policy=3" frameborder="0" allowfullscreen=""></iframe> 
</div> 

CSS:

.responsive-video { 
position: relative; 
padding-bottom: 56.25%; 
padding-top: 60px; overflow: hidden; 
} 
Смежные вопросы