ニコニコ動画ランキングから「ゆっくり実況プレイ」タグが含まれる動画を抽出する

ニコニコ動画 ゲーム・デイリー・ランキング 100 件から、特定タグゆっくり実況プレイ)を含む動画だけを抽出します。

使用する RSS フィード: http://www.nicovideo.jp/ranking/fav/daily/game?rss=2.0
使用するニコニコ動画 APIgetthumbinfo

このスクリプトBeautifulSoup モジュールを使用します。 また、正規表現パターン前回の記事で扱ったものを使用します。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# main.py
#
import urllib2
import re
import time
from BeautifulSoup import BeautifulStoneSoup  # for XML

#
# main() -> parse_feed(url) -> contains_tag(url) の順に実行
#

search_tag = u'ゆっくり実況プレイ'

# |search_tag| を含む動画なら True を返す
def contains_tag(url):
    result = urllib2.urlopen(url)
    soup = BeautifulStoneSoup(result.read())
    for tag in soup.find('tags', domain='jp').findAll('tag'):
        # タグに「ゆっくり実況プレイ」が含まれるなら、ranking に追加
        if tag.string == search_tag:
            return True
    return False
    
# RSS フィードから |search_tag| を含む動画 ID を取得し、リストを返す
def parse_feed(url):
    try:
        result = urllib2.urlopen(url)
        soup = BeautifulStoneSoup(result.read())
        yukkuri_ranking = []
        
        for item in soup('item'):  # <item> ~ </item>
            link = item.link.string  # <link> ~ </link>
#            print link
            matched = re.compile('s[mo]\d+').search(link)
            if not matched:
                continue
            sm = matched.group()  # 'sm000' or 'so000' or 'nm000'
            thumbinfo_url = 'http://ext.nicovideo.jp/api/getthumbinfo/' + sm
            
            # Search tag
            if (contains_tag(thumbinfo_url)):
                yukkuri_ranking.append(sm)
                # Print '[sm15396022] 第20位:【minecraft】底なしの世界17【クリーパーmod】'
                print '[%s] %s' % (sm, item.title.string)
                
            time.sleep(0.1)  # Sleep 0.1 sec
            
    except Exception, e:
        print e
    return yukkuri_ranking
        
def main():
    url = 'http://www.nicovideo.jp/ranking/fav/daily/game?rss=2.0'
    parse_feed(url)

if __name__ == '__main__':
    main()

短時間に連続して getthumbinfo を取得すると HTTP Error 503: Service Unavailable になるので注意。


取得された結果は以下のようになる。

[sm15401142] 第4位:初めてのマインクラフト 25Blocks Dark side&#039;s power!
[sm15389560] 第8位:【Minecraft】 方向音痴のマインクラフト Season2 Part16 【ゆっくり実況】
[sm15396022] 第17位:【minecraft】底なしの世界17【クリーパーmod】
[sm15395867] 第19位:【Minecraft】The Spider King:サブタイトルが思いつかない【Part3】
[sm15381610] 第32位:【ゆっくり実況】デッドライジング2-幼女と変態紳士とゾンビ達-05
[sm15371980] 第47位:ゆっくり撃つバイオハザードDC【ゆっくり実況プレイ】 2
[sm15391204] 第55位:ゆっくりが吉野家の店長を目指すようです 6杯目
[sm15402232] 第66位:ゆっくり提督が行く R-TYPE TACTICSⅡ 18章-Operation BITTER CHOCOLATE-
[sm15377429] 第72位:【ゆっくり実況】絶体絶命都市2を道を外したゆっくり実況。【part23】終
[sm15343730] 第77位:【minecraft】この浮遊した世界で【ゆっくり実況】part17
[sm15355845] 第82位:【ゆっくり実況】縛って巨人を日本一にするpart3【パワプロ14決】
[sm15378705] 第90位:大航海時代Ⅳ【ゆっくり実況プレイPart13】
[sm15332856] 第98位:【パワプロ14決】新潟ゆっくりベイスターズpart11


yukkuri
このアルゴリズムを利用して作っているのが『ゆっくり実況プレイを見る日記』です。