mylist の動画を全部落とす。
連続でアクセスしまくるとしばらく(15分ぐらい?)弾かれるみたいなので、1つのflvダウンロードするごとに sleep(30) で30秒待機してます。
< ?php
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload();
// create adapter
$client = new Zend_Http_Client();
$client->setConfig(array('keepalive' => true));
// Login
$client->setCookieJar()
->setUri('https://secure.nicovideo.jp/secure/login?site=niconico')
->setParameterPost(array(
'mail' => 'mailaddress',
'password' => 'password',
))
->request(Zend_Http_Client::POST);
// get mylist html
$list = 'http://www.nicovideo.jp/mylist/7446991';
$client->setUri($list)
->request(Zend_Http_Client::GET);
$response = $client->getLastResponse();
$html = $response->getBody();
// get smile video list
$dom = new Zend_Dom_Query($html);
$xpath = "//html/body/div[@id='PAGEBODY']/div[2]/table[@id='mylists']/tr/td[2]/h3/a";
$results = $dom->queryXpath($xpath);
// get href
$urlList = array();
foreach ($results as $r) {
$urlList[] = $r->getAttribute('href');
}
// get flv
foreach ($urlList as $url) {
$video = preg_split('/\//', $url);
$video_id = $video[1];
$client->setUri("http://www.nicovideo.jp/watch/{$video_id}")
->request(Zend_Http_Client::GET);
// for filename
$title = $client->getLastResponse();
$client->setUri("http://www.nicovideo.jp/api/getflv?v={$video_id}")
->request(Zend_Http_Client::GET);
$response = $client->getLastResponse();
// get flv url
$body = $response->getBody();
parse_str($body, $query);
$url = $query['url'];
/**
* get Title
*/
$dom = new Zend_Dom_Query($title->getBody());
$results = $dom->queryXpath('//title');
foreach ($results as $r) {
$pageTitle = $r->nodeValue;
}
/**
* get flv
*/
$client->setUri($url)
->request(Zend_Http_Client::GET);
$response = $client->getLastResponse();
file_put_contents("{$pageTitle}.flv", $response->getBody());
sleep(30);
}
なんかたまに文字化けする。なんだかよくわからん。
[...] ZendFrameworkでニコりまくる。mylist編 [...]