xml.etree.ElementTreeとxmlns
2010年6月12日(土) 23:57 JST
閲覧数 5,556
Pythonでのxml.etree.ElementTreeとxmlnsについてです。
Youtubeなどで提供されているXMLはxmlnsを使用していて、扱いに悩んでしまった。
例としてYoutubeの動画情報取得ではこんな感じになります。
以下URLで取得できるXMLの場合。
http://gdata.youtube.com/feeds/api/videos/動画ID
xmlnsはこのような形で複数定義された状態になります。
で、実際に値を取得してみる。
タイトル名の取得はxmlnsを指定し、属性を指定すれば取得できる訳ですが。
thumbnail画像URLなどは、xmlnsの指定を2個並べる事で取得する形になる。
サンプルコード
Youtubeなどで提供されているXMLはxmlnsを使用していて、扱いに悩んでしまった。
例としてYoutubeの動画情報取得ではこんな感じになります。
以下URLで取得できるXMLの場合。
http://gdata.youtube.com/feeds/api/videos/動画ID
xmlnsはこのような形で複数定義された状態になります。
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:gd="http://schemas.google.com/g/2005" xmlns:yt="http://gdata.youtube.com/schemas/2007">xmlns一個だけの定義であれば解説しているページも多いのですが、実際XML提供されているサービス(Youtubeなどなど)では複数定義がほとんどのようです。。。
で、実際に値を取得してみる。
タイトル名の取得はxmlnsを指定し、属性を指定すれば取得できる訳ですが。
thumbnail画像URLなどは、xmlnsの指定を2個並べる事で取得する形になる。
サンプルコード
from xml.etree.ElementTree import * url = "http://gdata.youtube.com/feeds/api/videos/動画ID" tree = parse(urllib2.urlopen(url)) elem = tree.getroot() //タイトル取得 title = elem.findtext("{http://www.w3.org/2005/Atom}title") //thumbnail画像URL取得 thumbnail_url = elem.find("{http://search.yahoo.com/mrss/}group/{http://search.yahoo.com/mrss/}thumbnail").get("url")