128na / niconico-rest-client
niconico rest client
2.0.1
2023-03-19 03:25 UTC
Requires
- symfony/css-selector: ^6.2.7
- symfony/dom-crawler: ^6.2.7
- symfony/http-client: ^6.2.7
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.15.1
- mockery/mockery: ^1.5.1
- phpstan/phpstan: ^1.10.7
- phpunit/phpunit: ^10.0.16
README
使用ニコニコ動画的各种API来获取数据。仅支持无需登录(会话)的API。
安装
composer require 128na/niconico-rest-client
使用方法
use NicoNicoRestClient\ClientFactory;
use NicoNicoRestClient\ApiSnapshot\Query;
$client = ClientFactory::create();
$query = new Query(['q'=> 'test']);
$result = $client->apiSnapshotSearch($query);
echo $result->statusOk() ? 'ok' : 'fail';
$videos = $result->getVideos();
foreach($videos as $video) {
echo $video->getTitle() . PHP_EOL;
}
使用自定义HTTP客户端
如果客户端实现了 Symfony\Contracts\HttpClient\HttpClientInterface
接口,则可以使用。
使用带缓存功能的客户端的示例
use Symfony\Component\HttpClient\CachingHttpClient;
use Symfony\Component\HttpClient\HttpClient;
use Symfony\Component\HttpKernel\HttpCache\Store;
$store = new Store('/path/to/cache/storage/');
$httpClient = HttpClient::create();
$cachingHttpClient = new CachingHttpClient($httpClient, $store);
$client = ClientFactory::create($cachingHttpClient);
支持的API
公共API
由官方提供的。
https://site.nicovideo.jp/search-api-docs/snapshot
快照API
https://api.search.nicovideo.jp/api/v2/snapshot/video/contents/search
// クエリパラメーターを直接指定可能
$query = new Query(['q'=> 'test']);
// setメソッドでの設定も可能
$quert->setLimit(10);
$result = $client->apiSnapshotSearch($query);
echo $result->statusOk() ? 'ok' : 'fail';
$videos = $result->getVideos();
foreach($videos as $video) {
echo $video->getTitle() . PHP_EOL;
}
私有API
官方未记载但无需登录的API。不提供功能保证。
https://dic.nicovideo.jp/a/%E3%83%8B%E3%82%B3%E3%83%8B%E3%82%B3%E5%8B%95%E7%94%BBapi
非公开但会在废弃时宣布(轻松的
https://www.google.com/search?q=api+site%3Ahttps%3A%2F%2Fblog.nicovideo.jp%2Fniconews
ExtApi(getthumbinfo)
可以获取单个视频的信息。
https://ext.nicovideo.jp/api/getthumbinfo/***
$videoResult = $client->apiExtGet('sm0');
CeApi
https://api.ce.nicovideo.jp/api/v1/user.info?__format=json&user_id=2
https://api.ce.nicovideo.jp/nicoapi/v1/video.info?__format=json&v=***
https://api.ce.nicovideo.jp/nicoapi/v1/video.array?__format=json&v=***,***
https://api.ce.nicovideo.jp/nicoapi/v1/mylistgroup.get?__format=json&group_id=***
https://api.ce.nicovideo.jp/nicoapi/v1/mylist.list?__format=json&group_id=***&limit=50&from=0
https://api.ce.nicovideo.jp/nicoapi/v1/user.myvideo?__format=json&user_id=***
※group_id=mylist_id
$userResult = $client->userInfo($userId);
$videoResult = $client->apiCeVideoInfo('sm0');
$videosResult = $client->apiCeVideoArray(['sm0', 'sm1']);
$mylistResult = $client->apiCeMylistGroup($mylistId);
$videosResult = $client->apiCeMylistList($mylistId, $page);
$videosResult = $client->userMyVideo($userId, $page);
其他
API,但可以获取数据。
Rss
https://www.nicovideo.jp/user/***/video?rss=atom
https://www.nicovideo.jp/user/***/mylist/***?rss=atom
$videosResult = $client->rssUser($userId, $page);
$videosResult = $client->rssUserMylist($userId, $mylistId, $page);
$videosResult = $client->rssMylist($mylistId, $page);
- Web
由于没有获取系列的方法,所以勉强实现了。
https://sp.nicovideo.jp/series/***
$videosResult = $client->webSeries($seriesId);
视频字段
根据API规范,可用的字段可能不同,请注意。