128na/niconico-rest-client

niconico rest client

2.0.1 2023-03-19 03:25 UTC

This package is auto-updated.

Last update: 2024-09-19 06:28:57 UTC


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://w.atwiki.jp/nicoapi/

非公开但会在废弃时宣布(轻松的

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规范,可用的字段可能不同,请注意。