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的な何かを使ってデータ取得するライブラリ。 ログイン(セッション)不要のもののみ対応。
install
composer require 128na/niconico-rest-client
Usage
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;
}
With custom http client
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);
Supported APIs
Public APIs
公式から提供されているもの。
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;
}
Private APIs
公式には記載されていないがログイン不要なもの。動作保証外。
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);
Video fields
API仕様によりできるフィールドが異なるため注意。