API

NullbrSDK 类

class nullbr.NullbrSDK(app_id: str, api_key: str = None, base_url: str = 'https://api.nullbr.com/', max_retries: int = 3, backoff_factor: float = 1.0, user_agent: str = None)[源代码]

基类:object

初始化 Nullbr SDK

参数:
  • app_id -- App ID

  • api_key -- API Key (可选,获取具体资源时需要)

  • base_url -- base URL (default: https://api.nullbr.com/)

  • max_retries -- 最大重试次数 (default: 3)

  • backoff_factor -- 重试的指数等待时间 单位秒 (default: 1.0)

  • user_agent -- 自定义User-Agent (default: NULLBR_PYTHON/version)

get_collection(tmdbid: int) CollectionResponse[源代码]

获取电影合集详细信息

参数:

tmdbid -- 合集的TMDB ID

返回:

CollectionResponse 对象

抛出:

requests.exceptions.HTTPError -- 当API返回非200状态码时

get_collection_115(tmdbid: int, page: int = 1) Collection115Response[源代码]

获取电影合集网盘资源

参数:
  • tmdbid -- 合集的TMDB ID

  • page -- 页码,默认为1

返回:

Collection115Response 对象

抛出:
  • requests.exceptions.HTTPError -- 当API返回非200状态码时

  • ValueError -- 当未设置API KEY时

get_list(listid: int, page: int = 1) ListResponse[源代码]

获取列表详细信息

参数:
  • listid -- 列表id

  • page -- 页码,默认为1

返回:

ListResponse 对象

抛出:

requests.exceptions.HTTPError -- 当API返回非200状态码时

get_movie(tmdbid: int) MovieResponse[源代码]

获取电影详细信息

参数:

tmdbid -- 电影的TMDB ID

返回:

MovieResponse 对象

抛出:

requests.exceptions.HTTPError -- 当API返回非200状态码时

get_movie_115(tmdbid: int, page: int = 1) Movie115Response[源代码]

获取电影网盘资源

参数:
  • tmdbid -- 电影的TMDB ID

  • page -- 页码,默认为1

返回:

Movie115Response 对象

抛出:
  • requests.exceptions.HTTPError -- 当API返回非200状态码时

  • ValueError -- 当未设置API KEY时

get_movie_ed2k(tmdbid: int) MovieEd2kResponse[源代码]

获取电影电驴资源

参数:

tmdbid -- 电影的TMDB ID

返回:

MovieEd2kResponse 对象

抛出:
  • requests.exceptions.HTTPError -- 当API返回非200状态码时

  • ValueError -- 当未设置API KEY时

get_movie_magnet(tmdbid: int) MovieMagnetResponse[源代码]

获取电影磁力资源

参数:

tmdbid -- 电影的TMDB ID

返回:

MovieMagnetResponse 对象

抛出:
  • requests.exceptions.HTTPError -- 当API返回非200状态码时

  • ValueError -- 当未设置API KEY时

get_movie_video(tmdbid: int) MovieVideoResponse[源代码]

获取电影video资源(m3u8/http)

参数:

tmdbid -- 电影的TMDB ID

返回:

MovieVideoResponse 对象

抛出:
  • requests.exceptions.HTTPError -- 当API返回非200状态码时

  • ValueError -- 当未设置API KEY时

get_tv(tmdbid: int) TVResponse[源代码]

获取剧集详细信息

参数:

tmdbid -- 剧集的TMDB ID

返回:

TVResponse 对象

抛出:

requests.exceptions.HTTPError -- 当API返回非200状态码时

get_tv_115(tmdbid: int, page: int = 1) TV115Response[源代码]

获取剧集网盘资源

参数:
  • tmdbid -- 剧集的TMDB ID

  • page -- 页码,默认为1

返回:

TV115Response 对象

抛出:
  • requests.exceptions.HTTPError -- 当API返回非200状态码时

  • ValueError -- 当未设置API KEY时

get_tv_episode(tmdbid: int, season_number: int, episode_number: int) TVEpisodeResponse[源代码]

获取剧集单集详细信息

参数:
  • tmdbid -- 剧集的TMDB ID

  • season_number -- 季数

  • episode_number -- 集数

返回:

TVEpisodeResponse 对象

抛出:

requests.exceptions.HTTPError -- 当API返回非200状态码时

get_tv_episode_ed2k(tmdbid: int, season_number: int, episode_number: int) TVEpisodeEd2kResponse[源代码]

获取剧集单集ed2k资源

参数:
  • tmdbid -- 剧集的TMDB ID

  • season_number -- 季数

  • episode_number -- 集数

返回:

TVEpisodeEd2kResponse 对象

抛出:
  • requests.exceptions.HTTPError -- 当API返回非200状态码时

  • ValueError -- 当未设置API KEY时

get_tv_episode_magnet(tmdbid: int, season_number: int, episode_number: int) TVEpisodeMagnetResponse[源代码]

获取剧集单集磁力资源

参数:
  • tmdbid -- 剧集的TMDB ID

  • season_number -- 季数

  • episode_number -- 集数

返回:

TVEpisodeMagnetResponse 对象

抛出:
  • requests.exceptions.HTTPError -- 当API返回非200状态码时

  • ValueError -- 当未设置API KEY时

get_tv_episode_video(tmdbid: int, season_number: int, episode_number: int) TVEpisodeVideoResponse[源代码]

获取剧集单集video资源(m3u8/http)

参数:
  • tmdbid -- 剧集的TMDB ID

  • season_number -- 季数

  • episode_number -- 集数

返回:

TVEpisodeVideoResponse 对象

抛出:
  • requests.exceptions.HTTPError -- 当API返回非200状态码时

  • ValueError -- 当未设置API KEY时

get_tv_season(tmdbid: int, season_number: int) TVSeasonResponse[源代码]

获取剧集单季详细信息

参数:
  • tmdbid -- 剧集的TMDB ID

  • season_number -- 季数

返回:

TVSeasonResponse 对象

抛出:

requests.exceptions.HTTPError -- 当API返回非200状态码时

get_tv_season_magnet(tmdbid: int, season_number: int) TVSeasonMagnetResponse[源代码]

获取剧集季磁力资源

参数:
  • tmdbid -- 剧集的TMDB ID

  • season_number -- 季数

返回:

TVSeasonMagnetResponse 对象

抛出:
  • requests.exceptions.HTTPError -- 当API返回非200状态码时

  • ValueError -- 当未设置API KEY时

get_user_info() UserInfoResponse[源代码]

获取当前用户的订阅信息和配额使用情况

返回:

UserInfoResponse 对象

抛出:
  • requests.exceptions.HTTPError -- 当API返回非200状态码时

  • ValueError -- 当未设置API KEY时

redeem_user_code(code: str) UserRedeemResponse[源代码]

使用提示码兑换订阅升级

参数:

code -- 提示码

返回:

UserRedeemResponse 对象

抛出:
  • requests.exceptions.HTTPError -- 当API返回非200状态码时

  • ValueError -- 当未设置API KEY时

search(query: str, page: int = 1) SearchResponse[源代码]

搜索合集、电影、剧集、人物

参数:
  • query -- 搜索关键词

  • page -- 页码,默认为1

返回:

SearchResponse 对象

抛出:

requests.exceptions.HTTPError -- 当API返回非200状态码时

数据模型

基础模型

class nullbr.models.base.MediaItem(media_type: str, tmdbid: int, poster: str, title: str, overview: str, vote_average: float | None = None, release_date: str | None = None, rank: int | None = None)[源代码]

基类:object

媒体项目基础模型

media_type: str

媒体类型,如 "movie" 或 "tv"

overview: str

简介/概述

poster: str

海报图片URL

rank: int | None = None

排名

release_date: str | None = None

发布日期,格式为 YYYY-MM-DD

title: str

标题

tmdbid: int

TMDB(The Movie Database)ID

vote_average: float | None = None

评分,范围通常为0-10

搜索模型

class nullbr.models.search.ListResponse(id: int, name: str, description: str, updated_dt: str, page: int, total_page: int, items: list[MediaItem])[源代码]

基类:object

列表响应模型

description: str

列表描述

id: int

列表ID

items: list[MediaItem]

媒体项目列表

name: str

列表名称

page: int

当前页码

total_page: int

总页数

updated_dt: str

更新时间

class nullbr.models.search.SearchResponse(page: int, total_pages: int, total_results: int, items: list[MediaItem])[源代码]

基类:object

搜索结果响应模型

items: list[MediaItem]

媒体项目列表

page: int

当前页码

total_pages: int

总页数

total_results: int

搜索结果总数

电影模型

class nullbr.models.movie.Movie115Item(title: str, size: str, share_link: str, resolution: str | None = None, quality: str | list[str] | None = None, season_list: list[str] | None = None)[源代码]

基类:object

115云盘电影资源项目

quality: str | list[str] | None = None

视频质量标签

resolution: str | None = None

分辨率,如 "1080p", "4K" 等

season_list: list[str] | None = None

季数列表(主要用于电视剧)

分享链接

size: str

文件大小

title: str

电影标题

class nullbr.models.movie.Movie115Response(id: int, media_type: str, page: int, total_page: int, items: list[Movie115Item])[源代码]

基类:object

电影115云盘资源响应模型

id: int

电影ID

items: list[Movie115Item]

115云盘资源列表

media_type: str

媒体类型

page: int

当前页码

total_page: int

总页数

class nullbr.models.movie.MovieEd2kItem(name: str, size: str, ed2k: str, resolution: str, source: str | None, quality: str | list[str], zh_sub: int)[源代码]

基类:object

电影ed2k链接项目

ed2k: str

ed2k链接

name: str

资源名称

quality: str | list[str]

视频质量标签

resolution: str

分辨率

size: str

文件大小

source: str | None

资源来源

zh_sub: int

中文字幕标识(1表示有,0表示无)

class nullbr.models.movie.MovieEd2kResponse(id: int, media_type: str, ed2k: list[MovieEd2kItem])[源代码]

基类:object

电影ed2k链接响应模型

ed2k: list[MovieEd2kItem]

ed2k链接列表

id: int

电影ID

media_type: str

媒体类型

class nullbr.models.movie.MovieMagnetItem(name: str, size: str, magnet: str, resolution: str, source: str, quality: str | list[str], zh_sub: int)[源代码]

基类:object

电影磁力链接项目

magnet: str

磁力链接

name: str

资源名称

quality: str | list[str]

视频质量标签

resolution: str

分辨率

size: str

文件大小

source: str

资源来源

zh_sub: int

中文字幕标识(1表示有,0表示无)

class nullbr.models.movie.MovieMagnetResponse(id: int, media_type: str, magnet: list[MovieMagnetItem])[源代码]

基类:object

电影磁力链接响应模型

id: int

电影ID

magnet: list[MovieMagnetItem]

磁力链接列表

media_type: str

媒体类型

class nullbr.models.movie.MovieResponse(id: int, poster: str, title: str, overview: str, vote: float, release_date: str, has_115: bool, has_magnet: bool, has_ed2k: bool, has_video: bool)[源代码]

基类:object

电影详情响应模型

has_115: bool

是否有115云盘资源

has_ed2k: bool

是否有ed2k链接

has_magnet: bool

是否有磁力链接

has_video: bool

是否有在线视频

id: int

电影ID

overview: str

电影简介

poster: str

海报图片URL

release_date: str

发布日期

title: str

电影标题

vote: float

评分

class nullbr.models.movie.MovieVideoItem(name: str, type: str, link: str, source: str | None = None)[源代码]

基类:object

电影在线视频项目

视频链接

name: str

视频名称

source: str | None = None

视频来源

type: str

视频类型,如 "m3u8" 或 "http"

class nullbr.models.movie.MovieVideoResponse(id: int, media_type: str, video: list[MovieVideoItem])[源代码]

基类:object

电影在线视频响应模型

id: int

电影ID

media_type: str

媒体类型

video: list[MovieVideoItem]

在线视频列表

电视剧模型

class nullbr.models.tv.TV115Response(id: int, media_type: str, page: int, total_page: int, items: list[Movie115Item])[源代码]

基类:object

电视剧115云盘资源响应模型

id: int

电视剧ID

items: list[Movie115Item]

115云盘资源列表

media_type: str

媒体类型

page: int

当前页码

total_page: int

总页数

class nullbr.models.tv.TVEd2kItem(name: str, size: str, ed2k: str, resolution: str, source: str, quality: str, zh_sub: bool)[源代码]

基类:object

电视剧ed2k链接项目模型

ed2k: str

ed2k链接

name: str

文件名

quality: str

质量

resolution: str

分辨率

size: str

文件大小

source: str

来源

zh_sub: bool

是否有中文字幕

class nullbr.models.tv.TVEpisodeEd2kResponse(tv_show_id: int, season_number: int, episode_number: int, media_type: str, ed2k: list[TVEd2kItem])[源代码]

基类:object

电视剧剧集ed2k链接响应模型

ed2k: list[TVEd2kItem]

ed2k链接列表

episode_number: int

集数

media_type: str

媒体类型

season_number: int

季数

tv_show_id: int

电视剧ID

class nullbr.models.tv.TVEpisodeMagnetResponse(tv_show_id: int, season_number: int, episode_number: int, media_type: str, magnet: list[TVMagnetItem])[源代码]

基类:object

电视剧剧集磁力链接响应模型

episode_number: int

集数

magnet: list[TVMagnetItem]

磁力链接列表

media_type: str

媒体类型

season_number: int

季数

tv_show_id: int

电视剧ID

class nullbr.models.tv.TVEpisodeResponse(tv_show_id: int, season_number: int, episode_number: int, episode_type: str, name: str, overview: str, air_date: str, vote_average: float, poster: str, poseter: str, runtime: int, has_magnet: bool, has_ed2k: bool)[源代码]

基类:object

电视剧剧集响应模型

air_date: str

播出日期

episode_number: int

集数

episode_type: str

剧集类型

has_ed2k: bool

是否有ed2k链接

has_magnet: bool

是否有磁力链接

name: str

剧集名称

overview: str

剧集简介

poseter: str

海报图片URL(兼容旧版本拼写错误,等同于poster)

poster: str

海报图片URL

runtime: int

运行时长(分钟)

season_number: int

季数

tv_show_id: int

电视剧ID

vote_average: float

评分

class nullbr.models.tv.TVEpisodeVideoResponse(tv_show_id: int, season_number: int, episode_number: int, media_type: str, video: list[TVVideoItem])[源代码]

基类:object

电视剧剧集在线视频响应模型

episode_number: int

集数

media_type: str

媒体类型

season_number: int

季数

tv_show_id: int

电视剧ID

video: list[TVVideoItem]

在线视频列表

class nullbr.models.tv.TVMagnetItem(name: str, size: str, magnet: str, resolution: str, source: str, quality: str, zh_sub: bool)[源代码]

基类:object

电视剧磁力链接项目模型

magnet: str

磁力链接

name: str

文件名

quality: str

质量

resolution: str

分辨率

size: str

文件大小

source: str

来源

zh_sub: bool

是否有中文字幕

class nullbr.models.tv.TVResponse(id: int, poster: str, title: str, overview: str, vote: float, release_date: str, number_of_seasons: int, has_115: bool, has_magnet: bool, has_ed2k: bool, has_video: bool)[源代码]

基类:object

电视剧详情响应模型

has_115: bool

是否有115云盘资源

has_ed2k: bool

是否有ed2k链接

has_magnet: bool

是否有磁力链接

has_video: bool

是否有在线视频

id: int

电视剧ID

number_of_seasons: int

季数

overview: str

电视剧简介

poster: str

海报图片URL

release_date: str

首播日期

title: str

电视剧标题

vote: float

评分

class nullbr.models.tv.TVSeasonMagnetResponse(id: int, season_number: int, media_type: str, magnet: list[TVMagnetItem])[源代码]

基类:object

电视剧季度磁力链接响应模型

id: int

电视剧ID

magnet: list[TVMagnetItem]

磁力链接列表

media_type: str

媒体类型

season_number: int

季数

class nullbr.models.tv.TVSeasonResponse(tv_show_id: int, season_number: int, name: str, overview: str, air_date: str, poster: str, poseter: str, episode_count: int, vote_average: float, has_magnet: bool)[源代码]

基类:object

电视剧季度响应模型

air_date: str

播出日期

episode_count: int

集数

has_magnet: bool

是否有磁力链接

name: str

季度名称

overview: str

季度简介

poseter: str

海报图片URL(兼容旧版本拼写错误,等同于poster)

poster: str

海报图片URL

season_number: int

季数

tv_show_id: int

电视剧ID

vote_average: float

平均评分

class nullbr.models.tv.TVVideoItem(name: str, type: str, link: str, source: str)[源代码]

基类:object

电视剧在线视频项目模型

链接

name: str

名称

source: str

来源

type: str

类型

合集模型

class nullbr.models.collection.Collection115Response(id: int, media_type: str, page: int, total_page: int, items: list[Movie115Item])[源代码]

基类:object

合集115云盘资源响应模型

id: int

合集ID

items: list[Movie115Item]

115云盘资源列表

media_type: str

媒体类型

page: int

当前页码

total_page: int

总页数

class nullbr.models.collection.CollectionResponse(id: int, poster: str, title: str, overview: str, vote: str, release_date: str, has_115: bool, items: list[MediaItem])[源代码]

基类:object

合集响应模型

has_115: bool

是否有115云盘资源

id: int

合集ID

items: list[MediaItem]

媒体项目列表

overview: str

合集简介

poster: str

海报图片URL

release_date: str

发布日期

title: str

合集标题

vote: str

评分(注意:这里是字符串类型)

用户模型

class nullbr.models.user.UserInfoResponse(sub_name: str, expires_at: str | None, daily_used: int, daily_quota: int, monthly_used: int, monthly_quota: int)[源代码]

基类:object

用户信息及配额响应模型

daily_quota: int

每日配额上限

daily_used: int

今日已使用配额

expires_at: str | None

订阅到期时间,free 用户为 null

monthly_quota: int

每月配额上限

monthly_used: int

本月已使用配额

sub_name: str

订阅等级名称

class nullbr.models.user.UserRedeemResponse(success: bool, message: str, sub_name: str | None = None, expires_at: str | None = None)[源代码]

基类:object

兑换提示码响应模型

expires_at: str | None = None

兑换后的订阅到期时间

message: str

兑换结果描述信息

sub_name: str | None = None

兑换后的订阅等级名称

success: bool

兑换是否成功