NAME Net::NicoVideo::JA - ニコニコ動画サイトã¸ã® Perl インタフェース VERSION ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯æœªå®Œæˆã§ã™ã€‚ API ã¯ä»Šå¾Œã‚‚変ãˆã‚‰ã‚Œã‚‹ã“ã¨ãŒäºˆæƒ³ã•ã‚Œã€å¤šãã®æ©Ÿèƒ½ãŒæœªå®Ÿè£…ã§ã™ã€‚ SYNOPSIS use Net::NicoVideo; my $video_id = $ARGV[0] or die; my $nnv = Net::NicoVideo->new({ email => 'your-nicovideo@email.address', password => 'and-password', }); my $info = $nnv->fetch_thumbinfo( $video_id ); my $flv = $nnv->fetch_flv( $video_id ); printf "download: %s\n". $info->title; if( $flv->is_economy ){ warn "now economy time, skip\n"; }else{ my $save_path = sprintf '%s/Movies/%s.%s', $ENV{HOME}, $video_id, $info->movie_type; $nnv->fetch_watch( $video_id ); $nnv->fetch_video( $flv, $save_path ); if( -s $save_path == $info->size_high ){ print "ok\n"; }else{ print "finished, but it may have broken.\n"; } } DESCRIPTION ニコニコ動画ã¯ã€æ—¥æœ¬ã§æœ‰åãªå‹•ç”»å…±æœ‰ã‚µã‚¤ãƒˆã§ã™ã€‚ é…布 Net-NicoVideo ã¯ã€ãƒ‹ã‚³ãƒ‹ã‚³å‹•ç”»ã®ã‚µã‚¤ãƒˆå†…外ã§ã‚„ã‚Šã¨ã‚Šã•ã‚Œã‚‹ å„オブジェクト( HTTP メッセージ)ã¸ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®ã‚¤ãƒ³ã‚¿ãƒ•ã‚§ãƒ¼ã‚¹ã‚’æä¾›ã—ã¾ã™ã€‚ ã“ã‚Œã«ã‚ˆã‚Šã€ä¸€è²«ã—ãŸã‚¢ã‚¯ã‚»ã‚¹æ–¹æ³•ã«ã‚ˆã£ã¦ã‚µã‚¤ãƒˆã¸ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ã“ã¨ãŒã§ã〠ã¾ãŸã‚«ãƒ—セル化ã•ã‚ŒãŸãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‚’çµæžœã¨ã—ã¦å¾—る事ãŒã§ãã¾ã™ã€‚ ãã—ã¦ã“ã®ã‚¯ãƒ©ã‚¹ Net::NicoVideo ã¯ã€å„オブジェクトを得る為ã®æ‰‹ç¶šãを〠コンパクトã«çºã‚ãŸãƒ¦ãƒ¼ãƒ†ã‚£ãƒªãƒ†ã‚£ã¨ã—ã¦ã€ã‚ã‚Šã¾ã™ã€‚ ã“ã®ã‚¯ãƒ©ã‚¹ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã¯ã€ãã®å†…部ã§ã¯ Net::NicoVideo::UserAgent を利用ã—ã¦ã„ã¾ã™ã€‚ 言ã„æ›ãˆã‚Œã°ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯ã‚ˆã‚Šä½Žãƒ¬ãƒ™ãƒ«ã®ä»•äº‹ã®ãŸã‚ã« Net::NicoVideo::UserAgent を使ã†äº‹ãŒã§ãã¾ã™ã€‚ ãã®å ´åˆã¯ã€ã‚¢ã‚¯ã‚»ã‚¹ã®æ®µå–ã‚Šã«ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆã¯è‡ªã‚‰æ³¨æ„を払ã†å¿…è¦ãŒã‚ã‚‹ã“ã¨ã§ã—ょã†ã€‚ アクセス対象ã®ã‚µã‚¤ãƒˆã«ã¯ã€ã‚るオブジェクトを得る為ã«ã€å®ˆã‚‹ã¹ãルールãŒå˜åœ¨ã™ã‚‹ã‹ã‚‰ã§ã™ã€‚ ãŸã¨ãˆã°ã€å‹•ç”»ãƒ•ã‚¡ã‚¤ãƒ«ã‚’å–å¾—ã—ãŸã„å ´åˆã¯ã€ã¾ãšã‚µã‚¤ãƒˆã«ãƒã‚°ã‚¤ãƒ³ã—〠flv ã¨å‘¼ã°ã‚Œã‚‹ã‚ªãƒ–ジェクトをリクエストã—ã€æ›´ã«å‹•ç”»ã‚’閲覧ã—ãŸä¸Šã§ã€ 動画㮠URL をリクエストã—ãªã‘ã‚Œã°ãªã‚Šã¾ã›ã‚“。 クラス Net::NicoVideo ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã¯ãã†ã—ãŸæš—é»™ã®ãƒ«ãƒ¼ãƒ«ã‚’メソッドã¨ã—ã¦ã¾ã¨ã‚〠ユーザã«ä¾¿å®œã‚’ã¯ã‹ã‚Šã¾ã™ã€‚ ã„ãšã‚Œã«ã—ã¦ã‚‚ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã‚’使ã†éš›ã«ã¯ã€ サイトã®ã‚ªãƒ–ジェクトã«ã¤ã„ã¦ï¼ˆãŸã¨ãˆã° flv ã¨ã¯ä½•ã‹ã€ thumbinfo ã¨ã¯ä½•ã‹ãªã©ï¼‰ã€ ã‚る程度ã®çŸ¥è˜ãŒè¦ã‚‹ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。 ãŸã ã€ãã†ã„ã£ãŸäº‹æŸ„ã«ã¤ã„ã¦ã¯ Web を探ã™äº‹ã§ã™ãã«ç”を得る事ãŒå‡ºæ¥ã‚‹ã§ã—ょã†ã€‚ ãªãŠã€ãƒ‹ã‚³ãƒ‹ã‚³å‹•ç”»ã¯ 2012 å¹´ 5 月ã«ã‚µã‚¤ãƒˆãŒãƒªãƒ‹ãƒ¥ãƒ¼ã‚¢ãƒ«ã•ã‚Œã¾ã—ãŸã€‚ ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ãŒä½¿ãˆã‚‹ç¯„囲ã¯ã€Œãƒ‹ã‚³ãƒ‹ã‚³å‹•ç”»ï¼ˆåŽŸå®¿ï¼‰ã€ã¨å‘¼ã°ã‚Œã‚‹ã€ãƒªãƒ‹ãƒ¥ãƒ¼ã‚¢ãƒ«å‰ã®ã‚µã‚¤ãƒˆã§ã™ã€‚ 「ニコニコ動画(原宿)ã€ã¯ã€ã„ã¤ã¾ã§ä½¿ãˆã‚‹ã‹ã¯ã€ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ä½œè€…ã¯çŸ¥ã‚Šã¾ã›ã‚“。 ──ã“ã®ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã¯ã€ã„ã¾ã‚‚ã¾ã 使ãˆã¦ã„ã‚‹ã§ã—ょã†ã‹ï¼Ÿ CONSTRUCTOR コンストラクタã¯ã€ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’定義ã™ã‚‹ãƒãƒƒã‚·ãƒ¥ãƒ»ãƒªãƒ•ã‚¡ãƒ¬ãƒ³ã‚¹ã‚’å—ã‘付ã‘ã¾ã™ã€‚ my $nnv = Net::NicoVideo->new({ user_agent => LWP::UserAgent->new, email => 'your-nicovideo@email.address', password => 'and-password', delay => 1, }); å„フィールドã«ã¯åŒåã®ã‚¢ã‚¯ã‚»ã‚¹ãƒ»ãƒ¡ã‚½ãƒƒãƒ‰ãŒã‚ã‚Šã¾ã™ã€‚ ãã¡ã‚‰ã®èª¬æ˜Žã‚’å‚ç…§ã—ã¦ä¸‹ã•ã„。 ACCESS METHOD (LOWER LEVEL) フィールドã¸ã®ä½Žãƒ¬ãƒ™ãƒ«ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒ»ãƒ¡ã‚½ãƒƒãƒ‰ã€‚ デフォルトやãƒãƒªãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã‚’介ã•ãªã„〠フィールドを直接ã«è¨å®šãƒ»å–å¾—ã™ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚ 引数ã«å€¤ã‚’与ãˆãŸå ´åˆã¯ãã®å€¤ã‚’フィールドã«è¨å®šã—ã¾ã™ã€‚ user_agent サイト㸠HTTP (ã¾ãŸã¯ HTTPS )ã§ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚㮠ユーザ・エージェントをå–å¾—ã€ã¾ãŸã¯è¨å®šã—ã¾ã™ã€‚ è¨å®šã™ã‚‹ãƒ¦ãƒ¼ã‚¶ãƒ»ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã¯ LWP::UserAgent ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‹ã€ ãã®ã‚µãƒ–クラスã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã§ã‚ã‚‹å¿…è¦ãŒã‚ã‚Šã¾ã™ã€‚ $nnv->user_agent(LWP::UserAgent->new); $ua = $nnv->user_agent; email サイトã«ãƒã‚°ã‚¤ãƒ³ã™ã‚‹éš›ã«è¦æ±‚ã•ã‚Œã‚‹ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã€‚ $nnv->email($email); $email = $nnv->email; password サイトã«ãƒã‚°ã‚¤ãƒ³ã™ã‚‹éš›ã«è¦æ±‚ã•ã‚Œã‚‹ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã«å¯¾ã™ã‚‹ãƒ‘スワード。 $nnv->password($password); $password = $nnv->password; delay サイトã¸é€£ç¶šã—ãŸã‚¢ã‚¯ã‚»ã‚¹ã‚’ã™ã‚‹éš›ã«ã€ã‚¢ã‚¯ã‚»ã‚¹ã”ã¨ã®é–“ã«å·®ã—挟む待ã¡æ™‚間(秒)。 $nnv->delay($seconds); $seconds = $nnv->delay; ACCESS METHOD (UPPER LEVEL) フィールドã¸ã®ã€é«˜ãƒ¬ãƒ™ãƒ«ã®ã‚¢ã‚¯ã‚»ã‚¹ãƒ»ãƒ¡ã‚½ãƒƒãƒ‰ã€‚ 低レベルã®ãã‚Œã«å¯¾ã—ã€ãƒãƒªãƒ‡ãƒ¼ã‚·ãƒ§ãƒ³ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆå€¤ãŒç”¨æ„ã•ã‚Œã¦ã„ã¾ã™ã€‚ コンストラクタã§ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã‚’è¨å®šã—ãŸå¾Œã®ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã¯ã€ 通常ã¯ã€ã“れらを利用ã—ã¾ã™ã€‚ get_user_agent カスタマイズã•ã‚ŒãŸãƒ¦ãƒ¼ã‚¶ãƒ»ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆ Net::NicoVideo::UserAgent 㮠インスタンスを作æˆã—ã¦è¿”ã—ã¾ã™ã€‚ Net::NicoVideo::UserAgent ã¯ãƒ•ã‚£ãƒ¼ãƒ«ãƒ‰ user_agent ã«è¨å®šã•ã‚ŒãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’ 装飾ã™ã‚‹ãƒ‡ã‚³ãƒ¬ãƒ¼ã‚¿ã«ãªã£ã¦ã„ã¾ã™ã€‚ フィールド user_agent ãŒè¨å®šã•ã‚Œã¦ã„ãªã„å ´åˆã¯ã€ デコレートã•ã‚Œã‚‹ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã¨ã—㦠LWP::UserAgent ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ãŒç”Ÿæˆã•ã‚Œã¾ã™ã€‚ get_email サイトã«ãƒã‚°ã‚¤ãƒ³ã™ã‚‹éš›ã«è¦æ±‚ã•ã‚Œã‚‹ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’å–å¾—ã—ã¾ã™ãŒã€ フィールド email ãŒæœªå®šç¾©ã®å ´åˆã¯ç’°å¢ƒå¤‰æ•° NET_NICOVIDEO_EMAIL ã®å€¤ã‚’è¿”ã—ã¾ã™ã€‚ ãã‚Œã™ã‚‰ã‚‚ãªã‘ã‚Œã°ã€å˜ã« undef ãŒå¾—られã¾ã™ã€‚ ノート:è¦æ±‚ã—よã†ã¨ã™ã‚‹ã‚µã‚¤ãƒˆã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„ã«ã‚ˆã£ã¦ã¯ã€ãƒã‚°ã‚¤ãƒ³ãŒå¿…è¦ãªã„å ´åˆã‚‚ã‚ã‚Šã¾ã™ã€‚ 従ã£ã¦ã€ email ãŠã‚ˆã³ password ã¯ã€æœªè¨å®šãŒè¨±å®¹ã•ã‚Œã¾ã™ã€‚ get_password サイトã«ãƒã‚°ã‚¤ãƒ³ã™ã‚‹éš›ã«è¦æ±‚ã•ã‚Œã‚‹ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ã«å¯¾ã™ã‚‹ãƒ‘スワードをå–å¾—ã—ã¾ã™ãŒã€ フィールド password ãŒæœªå®šç¾©ã®å ´åˆã¯ç’°å¢ƒå¤‰æ•° NET_NICOVIDEO_PASSWORD ã®å€¤ã‚’è¿”ã—ã¾ã™ã€‚ ãã‚Œã™ã‚‰ã‚‚ãªã‘ã‚Œã°ã€å˜ã« undef ãŒå¾—られã¾ã™ã€‚ get_delay 連続ã™ã‚‹ã‚¢ã‚¯ã‚»ã‚¹ã®é–“ã«å·®ã—挟むディレイ秒をå–å¾—ã—ã¾ã™ã€‚ フィールド delay ãŒæœªå®šç¾©ã®å ´åˆã¯ç’°å¢ƒå¤‰æ•° NET_NICOVIDEO_DELAY ã®å€¤ã‚’è¿”ã—ã¾ã™ã€‚ ã•ã‚‚ãªã‘ã‚Œã°ã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã® 1 ãŒå¾—られã¾ã™ã€‚ FETCH METHOD コンテンツ・オブジェクトをå–å¾—ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ç¾¤ã€‚ ã“ã®ã‚«ãƒ†ã‚´ãƒªã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ã€ã‚µã‚¤ãƒˆã®å„コンテンツã«å¯¾å¿œã—ã¦ãŠã‚Šã€ ãã‚Œãžã‚Œã€å–å¾—ã—ãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„を解æžã—ãŸçµæžœã‚’æŒã£ã¦ã„ã‚‹ Net::NicoVideo::Content ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’è¿”ã—ã¾ã™ã€‚ ãã®ã€è¿”ã•ã‚Œã‚‹ã‚ªãƒ–ジェクトã®å…·ä½“çš„ãªå†…容ã«ã¤ã„ã¦ã¯ã€ コンテンツã®ç¨®é¡žã”ã¨ã«ã‚µãƒ–クラスãŒå®šç¾©ã•ã‚Œã¦ã„ã‚‹ãŸã‚〠Net::NicoVideo::Content 以下ã®å„サブクラスをå‚ç…§ã—ã¦ä¸‹ã•ã„。 fetch_thumbinfo(video_id) video_id ã«é–¢ã™ã‚‹ Thumbinfo オブジェクトをå–å¾—ã—ã¾ã™ã€‚ ãªãŠ Thumbinfo を得る為ã«ã€ãƒã‚°ã‚¤ãƒ³ã¯å¿…è¦ã‚ã‚Šã¾ã›ã‚“。 fetch_flv(video_id) video_id ã«é–¢ã™ã‚‹ Flv オブジェクトをå–å¾—ã—ã¾ã™ã€‚ fetch_watch(video_id) video_id ã«é–¢ã™ã‚‹ Watch オブジェクトをå–å¾—ã—ã¾ã™ã€‚ Watch オブジェクトã¯ä»®æƒ³çš„ãªã‚‚ã®ã§ã€å®Ÿéš›ã¯å‹•ç”»ãƒšãƒ¼ã‚¸ã¸ã‚¢ã‚¯ã‚»ã‚¹ã—〠ãã“ã‹ã‚‰å¾—ã‚‰ã‚Œã‚‹æƒ…å ±ã‚’æŒã£ãŸã‚³ãƒ³ãƒ†ãƒ³ãƒ„・オブジェクトã§ã™ã€‚ ã“ã‚Œã¯ã€ã‚µã‚¤ãƒˆã«å¯¾ã—ã¦ã€ã‚¯ãƒ©ã‚¤ã‚¢ãƒ³ãƒˆãŒå‹•ç”»ã‚’閲覧ã™ã‚‹ã“ã¨ã‚’示ã—ã¾ã™ã€‚ ãã—ã¦ãã®æŒ¯ã‚‹èˆžã„ã¯ã€ fetch_video を呼ã¶ç›´å‰ã«å¿…è¦ãªã“ã¨ã«ãªã£ã¦ã„ã¾ã™ã€‚ fetch_video(video_id | flv | url, @args) 第一引数ã«ä¸ŽãˆãŸ video_id 〠flv オブジェクトã€ã¾ãŸã¯ç›´æŽ¥ã® URL ã®å‹•ç”»ã®ãƒ‡ãƒ¼ã‚¿ã‚’å–å¾—ã—ã¾ã™ã€‚ URL ã®å ´åˆã€ãれ㯠flv オブジェクトã‹ã‚‰å–å¾—ã§ãã‚‹ URL ã§ãªã‘ã‚Œã°æ„味をãªã•ãªã„ã§ã—ょã†ã€‚ å–å¾—ã—ãŸãƒ‡ãƒ¼ã‚¿ã¯ãれ以é™ã®å¼•æ•°ã«ã‚ˆã£ã¦å‡¦ç†ã•ã‚Œã‚‹æ–¹æ³•ãŒç•°ãªã‚Šã¾ã™ã€‚ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã¯ LWP::UserAgent ã® request メソッドã¨åŒã˜ã§ã€ 実際ã€å†…部ã§ã¯é€éŽçš„ã«ãれを呼んã§ã„ã¾ã™ã€‚ ãŸã¨ãˆã°ã€ç¬¬äºŒå¼•æ•°ã«ã‚¹ã‚«ãƒ©ãƒ¼å€¤ã‚’与ãˆãŸå ´åˆã¯ã€ãã‚Œã¯ãƒ•ã‚¡ã‚¤ãƒ«ãƒ»ãƒ‘スã¨ã—ã¦è§£é‡ˆã•ã‚Œã€ 動画コンテンツã¯ãã®ãƒ•ã‚¡ã‚¤ãƒ«ã«ä¿å˜ã•ã‚Œã¾ã™ã€‚ 詳ã—ã㯠LWP::UserAgent ã® request メソッドをå‚ç…§ã—ã¦ä¸‹ã•ã„。 fetch_thread(video_id | flv, \%options) 第一引数ã«ä¸ŽãˆãŸ video_id ã‚‚ã—ã㯠flv オブジェクトãŒç¤ºã™å‹•ç”»ã®ã€ã‚³ãƒ¡ãƒ³ãƒˆã‚’å–å¾—ã—ã¾ã™ã€‚ 第二引数ã®ãƒãƒƒã‚·ãƒ¥ãƒ»ãƒªãƒ•ã‚¡ãƒ¬ãƒ³ã‚¹ã¯ã‚ªãƒ—ションã§ã€æ¬¡ã®ã‚ーã¨å€¤ã®ãƒšã‚¢ã‚’å—ã‘å–ã‚Šã¾ã™ã€‚ "chats" => number 最新ã®ã‚‚ã®ã‹ã‚‰ä½•ä»¶ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’å–å¾—ã™ã‚‹ã‹ã€‚デフォルト㯠250 ã§ã™ã€‚ "fork" => boolean å–å¾—ã™ã‚‹ã‚³ãƒ¡ãƒ³ãƒˆã‚’ã€å‹•ç”»ã‚ªãƒ¼ãƒŠãƒ¼ã®ã‚³ãƒ¡ãƒ³ãƒˆã ã‘ã«é™å®šã—ã¾ã™ã€‚デフォルトã¯å½ã§ã™ã€‚ Tag タグ検索ã®ãŸã‚ã®ãƒ¡ã‚½ãƒƒãƒ‰ã€‚ fetch_tag_rss(keyword, \%params) keyword ã§æŒ‡å®šã—ãŸã‚¿ã‚°ã§å‹•ç”»æ¤œç´¢ã‚’è¡Œã„ã€çµæžœã‚’ RSS å½¢å¼ã§è¿”ã—ã¾ã™ã€‚ オプションã§ãƒãƒƒã‚·ãƒ¥ãƒªãƒ•ã‚¡ãƒ¬ãƒ³ã‚¹ params を与ãˆã‚‹äº‹ãŒã§ãã¾ã™ã€‚ ãã®ã‚ーã¨å€¤ã¯æ¬¡ã®ã¨ãŠã‚Šã§ã™ã€‚ "sort" => 'f|v|r|m|l' 検索çµæžœã‚’並ã³æ›¿ãˆã‚‹ã‚ーワードを指定ã—ã¾ã™ã€‚ f ... 投稿日時 v ... å†ç”Ÿæ•° r ... コメント数 m ... マイリスト数 l ... å†ç”Ÿæ™‚é–“ 無指定ã®ã¨ã㯠r コメント数ã«ãªã‚Šã¾ã™ã€‚ "order" => a 並ã³æ›¿ãˆã®é †åºã‚’指定ã—ã¾ã™ã€‚ 'a' を指定ã™ã‚‹ã¨ ASCEND ã¤ã¾ã‚Šé™é †ã§ã™ã€‚ 無指定ã®ã¨ã㯠DESCEND æ˜‡é †ã§ã™ã€‚ "page" => number 検索çµæžœãŒå¤šã„å ´åˆã¯ã€çµæžœã¯å¹¾ã¤ã‹ã®ãƒšãƒ¼ã‚¸ã«åˆ¥ã‚Œã¦ãŠã‚Šã€ä½•ç•ªç›®ã®ãƒšãƒ¼ã‚¸ã‚’å¾—ã‚‹ã‹ã‚’指定ã—ã¾ã™ã€‚ 無指定ã®ã¨ã㯠1 ページ目を得ã¾ã™ã€‚ ãªãŠ 1 ページã¯æœ€å¤§ã§ 32 件ã§ã™ã€‚ fetch_tag_rss_by_recent_post(keyword, page) 投稿日時ã®é™é †ã§å¾—るよã†ã« params を固定ã—㦠fetch_tag_rss を呼ã³å‡ºã™ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã§ã™ã€‚ 引数ã«ã¯ã‚¿ã‚°ã¨ã€ã‚ªãƒ—ションã§ãƒšãƒ¼ã‚¸ç•ªå·ã‚’指定ã—ã¾ã™ã€‚ Mylist RSS マイリスト㮠RSS ã‚’å–å¾—ã™ã‚‹ãŸã‚ã®ãƒ¡ã‚½ãƒƒãƒ‰ã€‚ fetch_mylist_rss(mylist | mylist_id) 引数ã«æŒ‡å®šã—㟠mylist ã¾ãŸã¯ mylist_id ã®ãƒžã‚¤ãƒªã‚¹ãƒˆã® RSS ã‚’ä¿æŒã™ã‚‹ã‚³ãƒ³ãƒ†ãƒ³ãƒ„・オブジェクトを返ã—ã¾ã™ã€‚ ノート:éžå…¬é–‹ã®ãƒžã‚¤ãƒªã‚¹ãƒˆã§ã‚‚ã€ã‚µã‚¤ãƒˆã«ãƒã‚°ã‚¤ãƒ³ã—ã¦ã„ã‚‹ã“ã¨ã§ã€ãれを得る事ãŒã§ãã¾ã™ï¼ˆï¼Ÿï¼‰ NicoAPI BASE NicoAPI ã¸ã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹ãŸã‚ã®ä¸‹åœ°ã‚’å¾—ã‚‹ãŸã‚ã®ãƒ¡ã‚½ãƒƒãƒ‰ç¾¤ã€‚ NicoAPI ã¯ãƒžã‚¤ãƒªã‚¹ãƒˆé¡žã‚’ AJAX 手段ã§å¾—る為㫠JavaScript ã§å®Ÿè£…ã•ã‚Œã¦ã„るライブラリã®åå‰ç©ºé–“ã§ã€ マイリスト類ã®ãƒ‡ãƒ¼ã‚¿ã®å–å¾—ã€æ›´æ–°ã€å‰Šé™¤ãªã©ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’æŒã£ã¦ã„ã¾ã™ã€‚ ãã—ã¦ã€å–å¾—ã™ã‚‹ãŸã‚ã®ãƒ¡ã‚½ãƒƒãƒ‰ä»¥å¤–ã®å®Ÿè¡Œã«ã¯ã€ã‚¢ã‚¯ã‚»ã‚¹ãƒ»ãƒˆãƒ¼ã‚¯ãƒ³ãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚ fetch_mylist_page ãƒã‚°ã‚¤ãƒ³ã—ã¦ã„るユーザã®ã€Œãƒžã‚¤ãƒªã‚¹ãƒˆã€ãƒšãƒ¼ã‚¸ã‚’å–å¾—ã—〠ãã®ãƒšãƒ¼ã‚¸ã‚’解æžã—ãŸçµæžœã‚’æŒã¤ Net::NicoVideo::Content::MylistPage オブジェクトを返ã—ã¾ã™ã€‚ 主ã«ã‚¢ã‚¯ã‚»ã‚¹ãƒ»ãƒˆãƒ¼ã‚¯ãƒ³ã‚’å¾—ã‚‹ãŸã‚ã®ã‚‚ã®ã§ã™ã€‚ fetch_mylist_item(video_id) ãƒã‚°ã‚¤ãƒ³ã—ã¦ã„るユーザã§ã€ video_id ã«å¯¾ã™ã‚‹ã€Œãƒžã‚¤ãƒªã‚¹ãƒˆã®è¿½åŠ ã€ãƒšãƒ¼ã‚¸ã‚’å–å¾—ã—〠ãã®ãƒšãƒ¼ã‚¸ã‚’解æžã—ãŸçµæžœã‚’æŒã¤ Net::NicoVideo::Content::MylistItem オブジェクトを返ã—ã¾ã™ã€‚ ã“ã‚Œã«ã‚ˆã‚Š video_id ã®å‹•ç”»ã«å¯¾ã™ã‚‹ "item_id" ãŠã‚ˆã³ "item_type" を得る事ãŒã§ãã¾ã™ã€‚ ãªãŠ "item_type" ã¯ã€å‹•ç”»ã«å¯¾ã—ã¦ã¯ã‚¼ãƒ "0" ãŒå›ºå®šã®å€¤ã¨ãªã£ã¦ã„ã¾ã™ãŒã€ ã“ã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã¯ãれをリクエストã—ã¦å¾—ãŸãƒšãƒ¼ã‚¸ã®ã‚³ãƒ³ãƒ†ãƒ³ãƒ„内容ã‹ã‚‰å‹•çš„ã«å–å¾—ã—ã¾ã™ã€‚ ã¾ãŸã€ãã®ãƒšãƒ¼ã‚¸ã§ã¯ã‚¢ã‚¯ã‚»ã‚¹ãƒ»ãƒˆãƒ¼ã‚¯ãƒ³ãŒå¾—られるã®ã§ã¤ã„ã§ã«ãれもå–å¾—ã—ã¾ã™ã€‚ NicoAPI.MylistGroup NicoAPI.MylistGroup ã®ãƒ¡ã‚½ãƒƒãƒ‰ç¾¤ã€‚ マイリスト・グループをæ“作ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ç¾¤ã§ã™ã€‚ ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã€ä½•ã‹ã‚’å–å¾—ã™ã‚‹ã“㨠*以外* ã®å®Ÿè¡Œã«ã¯ã€ アクセス・トークンãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚ ãŸã ã—トークンçœç•¥ã—ã¦ã‚‚ã€ãã‚Œã¯å†…部ã§è‡ªå‹•çš„ã«å–å¾—ã•ã‚Œã€ç”¨ã„られã¾ã™ã€‚ ã—ã‹ã—ã™ã§ã«ã‚¢ã‚¯ã‚»ã‚¹ãƒ»ãƒˆãƒ¼ã‚¯ãƒ³ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã¯ã€ãれを指定ã™ã‚‹äº‹ã§ã€ アクセス・トークンã®å–å¾—ã®ç‚ºã®ã‚µã‚¤ãƒˆã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’ãªãã™äº‹ãŒã§ãã¾ã™ã€‚ list_mylistgroup() ãƒã‚°ã‚¤ãƒ³ã—ãŸãƒ¦ãƒ¼ã‚¶ã®ãƒžã‚¤ãƒªã‚¹ãƒˆãƒ»ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒªã‚¹ãƒˆã‚’å–å¾—ã—ã¾ã™ã€‚ ã“ã‚Œã¯ã€ NicoAPI.MylistGroup#list ã«ç›¸å½“ã—ã¾ã™ã€‚ get_mylistgroup(group_id) 指定ã—㟠grpup_id ã®ãƒžã‚¤ãƒªã‚¹ãƒˆãƒ»ã‚°ãƒ«ãƒ¼ãƒ—ã‚’å–å¾—ã—ã¾ã™ã€‚ ã“ã‚Œã¯ã€ NicoAPI.MylistGroup#get ã«ç›¸å½“ã—ã¾ã™ã€‚ add_mylistgroup(mylistgroup, [token]) ãƒã‚°ã‚¤ãƒ³ã—ãŸãƒ¦ãƒ¼ã‚¶ã«ãƒžã‚¤ãƒªã‚¹ãƒˆãƒ»ã‚°ãƒ«ãƒ¼ãƒ—ã‚’è¿½åŠ ã—ã¾ã™ã€‚ ã“ã‚Œã¯ã€ NicoAPI.MylistGroup#add ã«ç›¸å½“ã—ã¾ã™ã€‚ update_mylistgroup(mylistgroup, [token]) マイリスト・グループã®æƒ…å ±ã‚’æ›´æ–°ã—ã¾ã™ã€‚ ã“ã‚Œã¯ã€ NicoAPI.MylistGroup#update ã«ç›¸å½“ã—ã¾ã™ã€‚ remove_mylistgroup(mylistgroup, [token]) マイリスト・グループを削除ã—ã¾ã™ã€‚ ã“ã‚Œã¯ã€ NicoAPI.MylistGroup#remove ã«ç›¸å½“ã—ã¾ã™ã€‚ delete_mylistgroup(mylistgroup, [token]) remove_mylistgroup ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã™ã€‚ NicoAPI.Mylist NicoAPI.Mylist ã®ãƒ¡ã‚½ãƒƒãƒ‰ç¾¤ã€‚ マイリストã®ã‚¢ã‚¤ãƒ†ãƒ ã‚’æ“作ã™ã‚‹ãƒ¡ã‚½ãƒƒãƒ‰ç¾¤ã§ã™ã€‚ ã“れらã®ãƒ¡ã‚½ãƒƒãƒ‰ã§ã€ä½•ã‹ã‚’å–å¾—ã™ã‚‹ã“㨠*以外* ã®å®Ÿè¡Œã«ã¯ã€ アクセス・トークンãŒå¿…è¦ã«ãªã‚Šã¾ã™ã€‚ ãŸã ã—トークンçœç•¥ã—ã¦ã‚‚ã€ãã‚Œã¯å†…部ã§è‡ªå‹•çš„ã«å–å¾—ã•ã‚Œã€ç”¨ã„られã¾ã™ã€‚ ã—ã‹ã—ã™ã§ã«ã‚¢ã‚¯ã‚»ã‚¹ãƒ»ãƒˆãƒ¼ã‚¯ãƒ³ã‚’æŒã£ã¦ã„ã‚‹å ´åˆã¯ã€ãれを指定ã™ã‚‹äº‹ã§ã€ アクセス・トークンã®å–å¾—ã®ç‚ºã®ã‚µã‚¤ãƒˆã¸ã®ã‚¢ã‚¯ã‚»ã‚¹ã‚’ãªãã™äº‹ãŒã§ãã¾ã™ã€‚ list_mylist(group_id) group_id ã®ãƒžã‚¤ãƒªã‚¹ãƒˆãƒ»ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒžã‚¤ãƒªã‚¹ãƒˆä¸€è¦§ã‚’å¾—ã¾ã™ã€‚ ã“ã‚Œã¯ã€ NicoAPI.Mylist#list ã«ç›¸å½“ã—ã¾ã™ã€‚ add_mylist(group_id, item, [token]) マイリスト・アイテムitem ã‚’ group_id ã®ãƒžã‚¤ãƒªã‚¹ãƒˆãƒ»ã‚°ãƒ«ãƒ¼ãƒ—ã«è¿½åŠ ã—ã¾ã™ã€‚ ã“ã‚Œã¯ã€ NicoAPI.Mylist#add ã«ç›¸å½“ã—ã¾ã™ã€‚ update_mylist(group_id, item, [token]) group_id ã®ãƒžã‚¤ãƒªã‚¹ãƒˆãƒ»ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒžã‚¤ãƒªã‚¹ãƒˆãƒ»ã‚¢ã‚¤ãƒ†ãƒ item ã‚’æ›´æ–°ã—ã¾ã™ã€‚ ã“ã‚Œã¯ã€ NicoAPI.Mylist#update ã«ç›¸å½“ã—ã¾ã™ã€‚ remove_mylist(group_id, item, [token]) group_id ã®ãƒžã‚¤ãƒªã‚¹ãƒˆãƒ»ã‚°ãƒ«ãƒ¼ãƒ—ã®ãƒžã‚¤ãƒªã‚¹ãƒˆãƒ»ã‚¢ã‚¤ãƒ†ãƒ item を削除ã—ã¾ã™ã€‚ ã“ã‚Œã¯ã€ NicoAPI.Mylist#remove ã«ç›¸å½“ã—ã¾ã™ã€‚ delete_mylist(group_id, item, [token]) remove_mylist ã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹ã§ã™ã€‚ move_mylist(src-group_id, dst-group_id, item, [token]) マイリスト・グループ src-group_id ã®ãƒžã‚¤ãƒªã‚¹ãƒˆãƒ»ã‚¢ã‚¤ãƒ†ãƒ item ã‚’ マイリスト・グループ dst-group_id ã¸ç§»å‹•ã—ã¾ã™ã€‚ ã“ã‚Œã¯ã€ NicoAPI.Mylist#move ã«ç›¸å½“ã—ã¾ã™ã€‚ copy_mylist(src-group_id, dst-group_id, item, [token]) マイリスト・グループ src-group_id ã®ãƒžã‚¤ãƒªã‚¹ãƒˆãƒ»ã‚¢ã‚¤ãƒ†ãƒ item ã‚’ マイリスト・グループ dst-group_id ã¸è¤‡è£½ã—ã¾ã™ã€‚ ã“ã‚Œã¯ã€ NicoAPI.Mylist#copy ã«ç›¸å½“ã—ã¾ã™ã€‚ UTILITY METHOD ãã®ä»–ユーティリティ。 through_login(ua) 引数ã«ä¸ŽãˆãŸãƒ¦ãƒ¼ã‚¶ãƒ»ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆ Net::NicoVideo::UserAgent ã®ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã‚’〠ãƒã‚°ã‚¤ãƒ³ãƒ»ãƒšãƒ¼ã‚¸ã¸å°Žãã€ãã—ã¦ãƒã‚°ã‚¤ãƒ³ã‚’è¡Œã„ã¾ã™ã€‚ ãã—ã¦ã€ãã®çµæžœã‚’æŒãŸã›ãŸå…ƒã®ãƒ¦ãƒ¼ã‚¶ãƒ»ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‚’è¿”å´ã—ã¾ã™ã€‚ 引数ã«ä¸ŽãˆãŸã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã¨ã€è¿”å´ã•ã‚Œã‚‹ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã¯åŒã˜ã‚¤ãƒ³ã‚¹ã‚¿ãƒ³ã‚¹ã§ã™ã€‚ 典型的ã«ã¯ã€æ¬¡ã®ã‚ˆã†ã«ä½¿ã‚ã‚Œã¾ã™ã€‚ ãƒã‚°ã‚¤ãƒ³ãŒå¿…è¦ãªãƒšãƒ¼ã‚¸ã‚’ã€ã¾ãšãƒã‚°ã‚¤ãƒ³ã™ã‚‹ã“ã¨ãªã—ã«ã‚¢ã‚¯ã‚»ã‚¹ã‚’試ã¿ã€ ãã®ãƒ¬ã‚¹ãƒãƒ³ã‚¹ã‹ã‚‰ã€ãƒã‚°ã‚¤ãƒ³ãŒè¦æ±‚ã•ã‚Œã¦ã„る事を知ã£ãŸã¨ã〠ã¯ã˜ã‚ã¦ãã“ã§ãƒã‚°ã‚¤ãƒ³ã‚’試ã¿ã€ ãã—ã¦ãƒã‚°ã‚¤ãƒ³ã—ãŸçŠ¶æ…‹ã§ã‚³ãƒ³ãƒ†ãƒ³ãƒ„を改ã‚ã¦å–å¾—ã—ã¾ã™ã€‚ $res = $ua->request_mylist_rss($mylist); unless( $res->is_authflagged ){ # if not logged-in $ua = $self->through_login($ua); # login $res = $ua->request_mylist_rss($mylist); # try again } ãƒã‚°ã‚¤ãƒ³ã«å¤±æ•—ã—ãŸéš›ã¯ croak ã•ã‚Œã¾ã™ã€‚ download(video_id, file) 動画ファイルをダウンãƒãƒ¼ãƒ‰ã™ã‚‹ãŸã‚ã®ä¸€é€£ã®æ®µå–ã‚Šã‚’ã¾ã¨ã‚ãŸã€ ショートカットã§ã™ã€‚ å¿™ã—ã„時ã«ã¯ã€ãƒ¯ãƒ³ãƒ©ã‚¤ãƒŠãƒ¼ã§ãŠæœ›ã¿ã®å‹•ç”»ã‚’ダウンãƒãƒ¼ãƒ‰ã§ãã¾ã™ã€‚ 次ã®ã‚ˆã†ã«ï¼š $ perl -MNet::NicoVideo -e 'Net::NicoVideo->new->download(@ARGV)' \ smNNNNNN ./smile.mp4 ãŸã ã—ã€ã“ã‚Œã‹ã‚‰èª¬æ˜Žã™ã‚‹ç’°å¢ƒå¤‰æ•°ã‚’予ã‚セットã—ã¦ãŠãå¿…è¦ãŒã‚ã‚‹ã§ã—ょã†ã€‚ ノート:ã“ã®ä¾‹ã§ã¯ã€å‡ºåŠ›ãƒ•ã‚¡ã‚¤ãƒ«ã‚’ MP4 ã¨è¦‹è¶Šã—ã¦æ‹¡å¼µåã‚’ mp4 ã¨ã—ã¦ã„ã¾ã™ãŒã€ ニコニコ動画ã§æ‰±ã‚ã‚Œã¦ã„ã‚‹å‹•ç”»ã®ãƒ¡ãƒ‡ã‚£ã‚¢ãƒ»ãƒ•ã‚¡ã‚¤ãƒ«ã¯ã€ MP4 ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“ãŒã€ ãã†ã§ãªã„ã‹ã‚‚ã—ã‚Œã¾ã›ã‚“。ç¾åœ¨çŸ¥ã‚‰ã‚Œã¦ã„ã‚‹ã®ã¯ MP4, FLV ã¾ãŸã¯ SWF ã®ã„ãšã‚Œã‹ã§ã™ã€‚ ã©ã®ç¨®é¡žã‹ã¯ã€å‰ã‚‚ã£ã¦ Thumbinfo ã‚’å–å¾—ã—ã¦ã€ãã®å†…容ã‹ã‚‰åˆ¤æ–ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚ ENVIRONMENT VARIABLE NET_NICOVIDEO_EMAIL NET_NICOVIDEO_PASSWORD NET_NICOVIDEO_DELAY ã“れらã®æ˜Žã‚‰ã‹ãªã‚‹åå‰ã®ç’°å¢ƒå¤‰æ•°ãŒã€ãã®åã®ç¤ºã™ã¨ãŠã‚Šã®å½¹å‰²ã§æœ‰åŠ¹ã§ã™ã€‚ SEE ALSO LWP::UserAgent Net::NicoVideo::Content Net::NicoVideo::UserAgent REPOSITORY Net::NicoVideo 㯠Github ã«ãƒ›ã‚¹ãƒˆã•ã‚Œã€ãã®ä¸Šã§é–‹ç™ºãŒé€²ã‚られã¦ã„ã¾ã™ã€‚ <https://github.com/hiroaki/Net-NicoVideo> ãƒã‚°æƒ…å ±ã€ãƒ‘ッãƒã€æ¿€åŠ±ã®ã‚³ãƒ¡ãƒ³ãƒˆã‚’æ“è¿Žã—ã¾ã™ã€‚ AUTHOR WATANABE Hiroaki <hwat@cpan.org> LICENSE This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.