Skip to main content

为在Bilibili上的影视资源自动获取imdb评分

Project description

logo

bilibili-rater

PyPI - License PyPI - Version PyPI - Python Version Testing GitHub Tag

⚠️使用注意: 请勿使用本项目用于违反法律或违反社区规则的行为, 例如刷屏、辱骂、广告推广等。

本项目基于bilibili-api开发, ⚠️⚠️务必注意B站官方的反爬虫系统, 设置合理的请求间隙。

本项目使用GPLv3许可证, 仅供个人学习使用, 请勿用于商业用途。

仓库地址: https://github.com/NearlyHeadlessJack/bilibili-rater

安装最新稳定版

pip install bilibili-rater

// 使用清华镜像加速
pip install -i https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple bilibili-rater

安装开发中版本
PyPI - Version

pip install --index-url https://test.pypi.org/simple/ bilibili-rater==0.x.x.dev13

简介

bilibili-rater 适用于在B站搬运的美剧、动画等视频下, 按预置规则获取对应imdb信息, 并自动评论标题评分等信息。

设置自动化后, 可24h监控指定up主的最新视频并提供评分信息, 供其他观众参考。

示例

Feature

  • 自定义“季-集”信息的爬取方式, 可通过视频简介的固定模式来获取。
  • 基于bilibili-api开发, 对B站的访问高可靠性。
  • 提供多种imdb数据获取方式。(目前仅支持从OMDB数据库获取, 其它方式开发中)

适合用户

  • 影视搬运类up主本人。
  • 热心观众, 但需要与up主沟通好“季-集”信息获取模式。

FAQ

  • 本项目可以直接识别某个视频是哪个节目, 以及具体某一季、某一集吗?
    • 不可以, 是哪个节目需要在脚本中设定resource_id。“季-集”信息需要视频上传者提供获取模式, 本项目只提供从视频信息中抓取对应“季-集”信息的接口 handler及其抽象类class SeasonEpisodeHandler(ABC)。 用户可以设置自定义抓取方法。
  • imdb信息是自动获取的吗?
    • 是的, 首先从b站视频获取到“季-集”信息后, 会自动获取imdb信息。
  • 可以使用豆瓣评分吗?
    • 不可以, 因为豆瓣没有单集评分功能。

使用教程与示例

1. 确定你要抓取的up主与节目信息

up主通过B站数字uid确定, 节目信息通过imdb编号确定。
例如要抓取up主龙三条, uid5024187
我要抓取的节目为《恶搞之家》, imdb编号为tt0182576

imdb影视节目的编码一般为tt开头。可通过imdb网站对应页面的URL看到。

⚠️ 连载节目请获取根节目的imdb代码, 不要使用季或集的imdb代码, 他们是独立的。

连载节目的根imdb代码可通过imdb网站搜索节目名, 进入根节目的页面, 通过URL看到。例如《恶搞之家》https://www.imdb.com/title/tt0182576/ 的根imdb编号为tt0182576

2. 获取用于发表评论账号的credentials

获取用于评论的账号credentials, 具体方法请直接参考bilibili-api使用文档

这里一共需要五个值:sessdata, bili_jct, buvid3, buvid4, dedeuserid

3. 创建omdb网站的api key

  • omdb网站提供了免费、快速的api, 可以获得imdb的数据。
  • 输入邮箱并提交后, 邮件会收到api key。请点击邮件中的激活链接, 否则api key无法使用

4. 创建Python脚本

创建一个Python文件, 并添加以下内容:

import bilibili_rater
from bilibili_api import Credential
import asyncio

credential = Credential(
    sessdata="",
    bili_jct="",
    buvid3="",
    buvid4="",
    dedeuserid="",
)

fetcher1 = bilibili_rater.OmdbFetcher(api_key="myapikey",is_show_title=True) #  是否显示集标题

job = bilibili_rater.BilibiliRater(
    uploader_uid=591331248,  # up主 uid
    credential=credential,  
    handler=bilibili_rater.OnlyNumberHandler.handle,  # “季-集”信息的解包方式
    resource_id="tt0397306",  # 根节目的imdb编号
    resource_cn_name="美国老爹",  #  最终显示在评论中的节目中文名
    imdb_fetchers=[fetcher1],  # 使用的imdb信息获取器 目前仅支持omdbapi
)

asyncio.run(job.run())

其中, handler的设置详情请见自定义handler

5. 运行脚本或设置自动化

可以直接运行脚本

python script.py

如果一切正常, 会提示评论发送成功。

但是这样, 脚本只会运行一次。

自动化

使用cron

    1. 创建一个运行脚本run-bilibili-rater-1.sh
#!/bin/bash
python /path/to/script.py
    1. 添加定时任务
crontab -e

// 在新页面里面添加一行
*/10 0 * * * /path/to/run-bilibili-rater-1.sh

这样脚本会每10分钟运行一次。
关于cron语法, 请参见教程, 或直接使用生成器

多任务运行

有些时候我们并不会只关注一个up主的某个节目, 而是关注多个up主或者多个节目。这样需要分别编写Python脚本与对应的运行脚本。
对于同一个up主的不同节目, 请不要使用相同的handler。否则会被解析为同一个节目。
例如《辛普森一家》使用简介第一行用"S03E05"形式来标注“季-集”信息, 《恶搞之家》使用简介第一行用"10-4"来标注“季-集”信息。

使用不同的handler可以区分两者, 不至于误将一个节目解析为另一个节目。

此外, 在使用cron来调度脚本时, ⚠️请勿设置多个脚本在同一时刻运行, 会极大增加被系统检测的风险, 可能导致账号封禁。

可以这样设置:

1,31 * * * * /path/to/run-bilibili-rater-1.sh
16,46 * * * * /path/to/run-bilibili-rater-2.sh

这样两个脚本岔开运行, 减少了被封禁的风险。

自定义handler

bilibili-rater通过handler来抓取视频对应的“季-集”信息。

handler本质是一个字符串解析器, 将字符串中包含的“季-集”信息解析出来。

handler属于抽象类SeasonEpisodeHandler, 其原型为:

from abc import ABC
class SeasonEpisodeHandler(ABC):
    @staticmethod
    def handle(desc: str) -> tuple[int, int]:
        pass

其中
desc为经过处理视频简介, 只包含简介第一行的信息。 handler返回一个元组, 元组的第一个元素为“季”信息, 第二个元素为“集”信息。

bilibili-rater已实现三种handler, 可以直接使用:

handler 说明 适用情形
OnlyNumberHandler.handler 简介第一行, 只使用数字来标注“季-集”信息 简介第一行为"3-2","10-5","6-14"
NormalLetterHandler.handler 简介第一行, 使用"S"和"E"字母来标注 "S08E12","S1E09","S13E15"
DotHandler.handler 简介第一行, 使用"."来分割"季-集"信息 "1.2","8.5","14.3"

自己实现的handler

注意, 在解析失败情况下也需要返回元组(0,0), 程序会略过本次更新, 否则会崩溃。

import bilibili_rater
from bilibili_api import Credential
import asyncio

# 继承SeasonEpisodeHandler
class MyCustomHandler(bilibili_rater.SeasonEpisodeHandler): 
    # 实现handle方法
    @staticmethod
    def handle(desc: str) -> tuple[int, int]:
      # 处理逻辑
      #
      #
      if True:
          # 成功返回结果
          return 3,6
      else:
          # 失败返回0,0
          return 0,0

        
credential = Credential(
    sessdata="",
    bili_jct="",
    buvid3="",
    buvid4="",
    dedeuserid="",
)

fetcher1 = bilibili_rater.OmdbFetcher(api_key="myapikey",is_show_title=True) #  是否显示集标题

job = bilibili_rater.BilibiliRater(
    uploader_uid=591331248,  # up主uid
    credential=credential,  
    handler=MyCustomHandler.handle,  # “季-集”信息的解包方式
    resource_id="tt0397306",  # 根节目的imdb编号
    resource_cn_name="美国老爹",  #  最终显示在评论中的节目中文名
    imdb_fetchers=[fetcher1],  # 使用的imdb信息获取器 目前仅支持omdbapi
)

asyncio.run(job.run())

形参说明

  • desc: str, 类型为字符串, 仅包含简介第一行内容。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bilibili_rater-0.1.1b2.tar.gz (144.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bilibili_rater-0.1.1b2-py3-none-any.whl (40.6 kB view details)

Uploaded Python 3

File details

Details for the file bilibili_rater-0.1.1b2.tar.gz.

File metadata

  • Download URL: bilibili_rater-0.1.1b2.tar.gz
  • Upload date:
  • Size: 144.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for bilibili_rater-0.1.1b2.tar.gz
Algorithm Hash digest
SHA256 a77654735cc59ec0887bf2665710a7813015efe7a7f6090ec86225d66c130180
MD5 d5a6c21b73764652c72ad55455daa6b9
BLAKE2b-256 b1c956c523770922fe3016e6f9e484216c8c1c18aa385f7dad99c1b5236aaf44

See more details on using hashes here.

Provenance

The following attestation bundles were made for bilibili_rater-0.1.1b2.tar.gz:

Publisher: Publish.yml on NearlyHeadlessJack/bilibili-rater

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file bilibili_rater-0.1.1b2-py3-none-any.whl.

File metadata

File hashes

Hashes for bilibili_rater-0.1.1b2-py3-none-any.whl
Algorithm Hash digest
SHA256 965d47c36803fdecd19c0d7dae108a683824301ea33ec74991052f20ffc9d3cc
MD5 7426c9beb34395e3667d6ed42a553cb6
BLAKE2b-256 87ea2440bfe344e0b1c4f4cb7d9c37574c6e514aa8b497c3f8085ad627c32bb9

See more details on using hashes here.

Provenance

The following attestation bundles were made for bilibili_rater-0.1.1b2-py3-none-any.whl:

Publisher: Publish.yml on NearlyHeadlessJack/bilibili-rater

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page