日本語リージョンで取得可能な YouTube API のカテゴリフィード
YouTube API でカテゴリ毎のフィードを取得したい場合、URI 構成の例として次のようなものが有効です。
http://gdata.youtube.com/feeds/api/standardfeeds/JP/most_viewed_{カテゴリ名}?time=today
{カテゴリ名} には「映画とアニメ」であれば、Film が入ります。
YouTube API が指定しているカテゴリは、次のリファレンス記事の categories.cat(XML) ファイルに記述してあります。
リファレンス ガイド: Data API プロトコル - アップロードする動画のカテゴリ リスト
categories.cat から一部を抜粋したものが以下になります。
<atom:category term="Film" label="映画とアニメ" xml:lang="ja-JP"> <yt:assignable/> <yt:browsable regions="AM AR AU BG BR CA CZ DE DK ES FI FR GB GR HK HR HU ID IE IL IN IT JP KR LT LV MX NL NO NZ PL PT RO RU SE SK SL SR TH TW US VI ZA"/> </atom:category> <atom:category term="Nonprofit" label="非営利団体と社会活動" xml:lang="ja-JP"> <yt:assignable/> <yt:browsable regions="US"/> </atom:category> <atom:category term="Movies" label="映画" xml:lang="ja-JP"> <yt:deprecated/> </atom:category>
この中で、
しかし、フィード URI に .../JP/... (日本リージョン)を指定してある場合、
したがって、「非営利団体と社会活動」のフィードは上記 URI 構成では取得できないということになります。
このような XML ファイルから、日本語リージョンで取得可能なカテゴリの term と label を表示する Python スクリプトを以下に用意しました。
from BeautifulSoup import BeautifulStoneSoup def print_term_and_label(category): for attr in category.attrs: if attr[0] == 'term': print attr[1] if attr[0] == 'label': print attr[1].encode('utf-8') def is_containing_JP(category): browsable = category.find('yt:browsable') # <yt:browsable> if not browsable: return False for attr in browsable.attrs: if attr[0] == 'regions': regions = attr[1] # unicode if regions.find('JP') >= 0: return True return False def main(): file = open('categories.cat') try: content = file.read() finally: file.close() # BeautifulStoneSoup soup = BeautifulStoneSoup(content) categories = soup('atom:category') # <atom:category> for category in categories: if is_containing_JP(category): print_term_and_label(category) if __name__ == '__main__': main()
以下のような出力が得られるでしょう。
Film 映画とアニメ Autos 自動車と乗り物 Music 音楽 Animals ペットと動物 Sports スポーツ Travel 旅行とイベント Games ゲーム Comedy コメディー People ブログと人 News ニュースと政治 Entertainment エンターテイメント Education 教育 Howto ハウツーとスタイル Tech 科学と技術
categories.cat はネットワークで取得してもいいかもしれません。