Skip to content

Commit

Permalink
v0.10.1
Browse files Browse the repository at this point in the history
- 修复重启AnimeGo后无法继续执行重命名已下载完成任务的问题
- 优化anisource流程
- 下载webapi支持bangumi类型
  - 仅需要传入torrent链接和bangumi_id即可使用
  • Loading branch information
wetor committed Oct 1, 2023
1 parent cda778e commit b9ac3d6
Show file tree
Hide file tree
Showing 31 changed files with 340 additions and 179 deletions.
10 changes: 8 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@
- `setting.download_path`: 下载器下载保存位置。临时位置,移动后将会删除
- `setting.save_path`: 重命名后移动到位置。此时将会改名
- `plugin.feed`中的`builtin_mikan_rss.py`插件 : 可选,内置自动订阅插件
- `vars.url`: 订阅地址,如Mikan的rss订阅地址
- `vars.cron`: 订阅时间,Cron格式,参考[Feed订阅插件帮助](assets/plugin/feed/README.md)
- `vars.__url__`: 订阅地址,如Mikan的rss订阅地址
- `vars.__cron__`: 订阅时间,Cron格式,参考[Feed订阅插件帮助](assets/plugin/feed/README.md)
- 其余配置项根据需求修改

### 3 启动程序
Expand Down Expand Up @@ -90,6 +90,12 @@

## 开发日志

### v0.10.1
- 修复重启AnimeGo后无法继续执行重命名已下载完成任务的问题
- 优化anisource流程
- 下载webapi支持bangumi类型
- 仅需要传入torrent链接和bangumi_id即可使用

### v0.10.0
- 全新的下载管理机制
- 新的downloader和database管理器
Expand Down
4 changes: 2 additions & 2 deletions assets/plugin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,11 +131,11 @@ result = core.parse_mikan_rss(xml_data)
# result = [
# {
# "date": "2023-02-15",
# "download": "https://mikanani.me/Download/20230215/301289d8fcde1751a26f55b4dc156da7f9ca1a6f.torrent",
# "torrent_url": "https://mikanani.me/Download/20230215/301289d8fcde1751a26f55b4dc156da7f9ca1a6f.torrent",
# "length": 237083040,
# "name": "[OPFans枫雪动漫][ONE PIECE 海贼王][第1051话][周日版][720p][MP4]",
# "type": "application/x-bittorrent",
# "url": "https://mikanani.me/Home/Episode/301289d8fcde1751a26f55b4dc156da7f9ca1a6f"
# "mikan_url": "https://mikanani.me/Home/Episode/301289d8fcde1751a26f55b4dc156da7f9ca1a6f"
# },
# {...},
# ]
Expand Down
15 changes: 9 additions & 6 deletions assets/plugin/feed/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,16 +66,19 @@ def parse(args):
return {
"items": [
{
"url": "https://mikanani.me/Home/Episode/134903ffdc03d1e7b2f3440191ac0f18720a9ff0",
"name": "[OPFans枫雪动漫][one_piece 海贼王][1052][1080p]_mkv[周日版]",
"date": "2023-02-19",
"type": "application/x-bittorrent",
"download": "https://mikanani.me/Download/20230219/134903ffdc03d1e7b2f3440191ac0f18720a9ff0.torrent",
"length": 1503238528
"mikan_url": "https://mikanani.me/Home/Episode/134903ffdc03d1e7b2f3440191ac0f18720a9ff0",
"name": "[OPFans枫雪动漫][one_piece 海贼王][1052][1080p]_mkv[周日版]",
"date": "2023-02-19",
"type": "application/x-bittorrent",
"torrent_url": "https://mikanani.me/Download/20230219/134903ffdc03d1e7b2f3440191ac0f18720a9ff0.torrent",
"length": 1503238528,
"bangumi_id": 0
},
{},
# ...
],
"error": None
}
```
其中`torrent_url`为torrent链接,必要。
`bangumi_id`和`mikan_url`其中一个有值即可,优先`bangumi_id`
6 changes: 3 additions & 3 deletions assets/plugin/filter/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,18 @@

`filter_all(args) -> dict`
#### 入参
入参args为dict类型,筛选前的列表。
入参args为dict类型,筛选前的列表。
结构为:
```python
args = {
"items": [
{
"date": "2023-02-15",
"download": "https://mikanani.me/Download/20230215/301289d8fcde1751a26f55b4dc156da7f9ca1a6f.torrent",
"torrent_url": "https://mikanani.me/Download/20230215/301289d8fcde1751a26f55b4dc156da7f9ca1a6f.torrent",
"length": 237083040,
"name": "[OPFans枫雪动漫][ONE PIECE 海贼王][第1051话][周日版][720p][MP4]",
"type": "application/x-bittorrent",
"url": "https://mikanani.me/Home/Episode/301289d8fcde1751a26f55b4dc156da7f9ca1a6f"
"mikan_url": "https://mikanani.me/Home/Episode/301289d8fcde1751a26f55b4dc156da7f9ca1a6f"
},
{...},
]
Expand Down
2 changes: 1 addition & 1 deletion assets/plugin/filter/mikan_tool.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ def filter_all(args):
# 1,2,3
log.debug('==1,2,3.MikanID,SubGroupID.Start==')
if isNeedGetMikanInfo:
mikanInfo = core.parse_mikan(item.url)
mikanInfo = core.parse_mikan(item.mikan_url)
key1 = 'key_' + str(mikanInfo.id) + '_' + str(mikanInfo.sub_group_id)
key2 = str(int(mikanInfo.id))
key3 = str(int(mikanInfo.sub_group_id))
Expand Down
24 changes: 12 additions & 12 deletions assets/plugin/filter/testdata.json
Original file line number Diff line number Diff line change
@@ -1,55 +1,55 @@
[
{
"url": "https://mikanani.me/Home/Episode/dcc28079dfda415cdcdf46159aad0fa94f1a2f11",
"mikan_url": "https://mikanani.me/Home/Episode/dcc28079dfda415cdcdf46159aad0fa94f1a2f11",
"name": "[LoliHouse] 想要成为影之实力者 / 我想成为影之强者 / Kage no Jitsuryokusha ni Naritakute! [01-20 合集][WebRip 1080p HEVC-10bit AAC][简繁内封字幕][Fin]",
"date": "2023-02-22",
"type": "application/x-bittorrent",
"download": "https://mikanani.me/Download/20230222/dcc28079dfda415cdcdf46159aad0fa94f1a2f11.torrent",
"torrent_url": "https://mikanani.me/Download/20230222/dcc28079dfda415cdcdf46159aad0fa94f1a2f11.torrent",
"length": 7623566848,
"parsed": null
},
{
"url": "https://mikanani.me/Home/Episode/8411b8de5aecb5be2af78726e5f0abb36a6a9b22",
"mikan_url": "https://mikanani.me/Home/Episode/8411b8de5aecb5be2af78726e5f0abb36a6a9b22",
"name": "[LoliHouse] 想要成为影之实力者 / 我想成为影之强者 / Kage no Jitsuryokusha ni Naritakute! - 20 [WebRip 1080p HEVC-10bit AAC][简繁内封字幕][END]",
"date": "2023-02-16",
"type": "application/x-bittorrent",
"download": "https://mikanani.me/Download/20230216/8411b8de5aecb5be2af78726e5f0abb36a6a9b22.torrent",
"torrent_url": "https://mikanani.me/Download/20230216/8411b8de5aecb5be2af78726e5f0abb36a6a9b22.torrent",
"length": 432747328,
"parsed": null
},
{
"url": "https://mikanani.me/Home/Episode/eb98d74dd42effb215dedd11b894105f892946e4",
"mikan_url": "https://mikanani.me/Home/Episode/eb98d74dd42effb215dedd11b894105f892946e4",
"name": "[LoliHouse] 想要成为影之实力者 / 我想成为影之强者 / Kage no Jitsuryokusha ni Naritakute! - 19 [WebRip 1080p HEVC-10bit AAC][简繁内封字幕]",
"date": "2023-02-09",
"type": "application/x-bittorrent",
"download": "https://mikanani.me/Download/20230209/eb98d74dd42effb215dedd11b894105f892946e4.torrent",
"torrent_url": "https://mikanani.me/Download/20230209/eb98d74dd42effb215dedd11b894105f892946e4.torrent",
"length": 319301888,
"parsed": null
},
{
"url": "https://mikanani.me/Home/Episode/0576a4e4f757e2c98f8aa48da4c5236ed6034ee0",
"mikan_url": "https://mikanani.me/Home/Episode/0576a4e4f757e2c98f8aa48da4c5236ed6034ee0",
"name": "[LoliHouse] 想要成为影之实力者 / 我想成为影之强者 / Kage no Jitsuryokusha ni Naritakute! - 14 [WebRip 1080p HEVC-10bit AAC][简繁内封字幕]",
"date": "2023-01-05",
"type": "application/x-bittorrent",
"download": "https://mikanani.me/Download/20230105/0576a4e4f757e2c98f8aa48da4c5236ed6034ee0.torrent",
"torrent_url": "https://mikanani.me/Download/20230105/0576a4e4f757e2c98f8aa48da4c5236ed6034ee0.torrent",
"length": 461216160,
"parsed": null
},
{
"url": "https://mikanani.me/Home/Episode/9fb1b5150d8a00cb8317913bb8b211f82061fa28",
"mikan_url": "https://mikanani.me/Home/Episode/9fb1b5150d8a00cb8317913bb8b211f82061fa28",
"name": "[LoliHouse] 想要成为影之实力者 / 我想成为影之强者 / Kage no Jitsuryokusha ni Naritakute! - 13 [WebRip 1080p HEVC-10bit AAC][简繁内封字幕]",
"date": "2022-12-29",
"type": "application/x-bittorrent",
"download": "https://mikanani.me/Download/20221229/9fb1b5150d8a00cb8317913bb8b211f82061fa28.torrent",
"torrent_url": "https://mikanani.me/Download/20221229/9fb1b5150d8a00cb8317913bb8b211f82061fa28.torrent",
"length": 396571456,
"parsed": null
},
{
"url": "https://mikanani.me/Home/Episode/99bcd0c631fb70e8700fcd5ee8b3c6c9cf320c8d",
"mikan_url": "https://mikanani.me/Home/Episode/99bcd0c631fb70e8700fcd5ee8b3c6c9cf320c8d",
"name": "[LoliHouse] 想要成为影之实力者 / 我想成为影之强者 / Kage no Jitsuryokusha ni Naritakute! - 12 [WebRip 1080p HEVC-10bit AAC][简繁内封字幕]",
"date": "2022-12-22",
"type": "application/x-bittorrent",
"download": "https://mikanani.me/Download/20221222/99bcd0c631fb70e8700fcd5ee8b3c6c9cf320c8d.torrent",
"torrent_url": "https://mikanani.me/Download/20221222/99bcd0c631fb70e8700fcd5ee8b3c6c9cf320c8d.torrent",
"length": 363834912,
"parsed": null
}
Expand Down
5 changes: 4 additions & 1 deletion cmd/animego/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ import (
anidataMikan "github.com/wetor/AnimeGo/internal/animego/anidata/mikan"
anidataThemoviedb "github.com/wetor/AnimeGo/internal/animego/anidata/themoviedb"
"github.com/wetor/AnimeGo/internal/animego/anisource"
"github.com/wetor/AnimeGo/internal/animego/anisource/bangumi"
"github.com/wetor/AnimeGo/internal/animego/anisource/mikan"
"github.com/wetor/AnimeGo/internal/animego/database"
"github.com/wetor/AnimeGo/internal/animego/downloader"
Expand Down Expand Up @@ -266,7 +267,9 @@ func Main() {
}
}
// 初始化parser
parserSrv := parser.NewManager(parse, &mikan.Mikan{ThemoviedbKey: config.Setting.Key.Themoviedb})
bgmSource := bangumi.NewBangumiSource(config.Setting.Key.Themoviedb)
mikanSource := mikan.NewMikanSource(bgmSource)
parserSrv := parser.NewManager(parse, mikanSource, bgmSource)

// ===============================================================================================================
// 初始化filter配置
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
package mikan_test
package anisource_test

import (
"github.com/pkg/errors"
"github.com/wetor/AnimeGo/internal/animego/anisource"

"github.com/wetor/AnimeGo/internal/animego/anidata/bangumi"
"github.com/wetor/AnimeGo/internal/animego/anidata/mikan"
"github.com/wetor/AnimeGo/internal/animego/anisource"
"github.com/wetor/AnimeGo/internal/api"
"github.com/wetor/AnimeGo/internal/exceptions"
)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package mikan_test
package anisource_test

import (
"fmt"
Expand All @@ -15,6 +15,7 @@ import (
"github.com/wetor/AnimeGo/assets"
"github.com/wetor/AnimeGo/internal/animego/anidata"
"github.com/wetor/AnimeGo/internal/animego/anisource"
"github.com/wetor/AnimeGo/internal/animego/anisource/bangumi"
"github.com/wetor/AnimeGo/internal/animego/anisource/mikan"
"github.com/wetor/AnimeGo/internal/exceptions"
"github.com/wetor/AnimeGo/internal/models"
Expand Down Expand Up @@ -132,7 +133,7 @@ func TestMikan_Parse(t *testing.T) {
name: "海贼王",
args: args{
opts: &models.AnimeParseOptions{
MikanUrl: "https://mikanani.me/Home/Episode/18b60d48a72c603b421468aade7fdd0868ff2f2f",
Input: "https://mikanani.me/Home/Episode/18b60d48a72c603b421468aade7fdd0868ff2f2f",
},
name: "OPFans枫雪动漫][ONE PIECE 海贼王][第1029话][1080p][周日版][MP4][简体] [299.5MB]",
},
Expand All @@ -142,7 +143,7 @@ func TestMikan_Parse(t *testing.T) {
name: "欢迎来到实力至上主义的教室 第二季",
args: args{
opts: &models.AnimeParseOptions{
MikanUrl: "https://mikanani.me/Home/Episode/8849c25e05d6e2623b5333bc78d3a489a9b1cc59",
Input: "https://mikanani.me/Home/Episode/8849c25e05d6e2623b5333bc78d3a489a9b1cc59",
},
name: "[ANi] Classroom of the Elite S2 - 欢迎来到实力至上主义的教室 第二季 - 07 [1080P][Baha][WEB-DL][AAC AVC][CHT][MP4] [254.26 MB]",
},
Expand All @@ -152,7 +153,7 @@ func TestMikan_Parse(t *testing.T) {
name: "想要成为影之实力者",
args: args{
opts: &models.AnimeParseOptions{
MikanUrl: "https://mikanani.me/Home/Episode/dcc28079dfda415cdcdf46159aad0fa94f1a2f11",
Input: "https://mikanani.me/Home/Episode/dcc28079dfda415cdcdf46159aad0fa94f1a2f11",
},
name: "[LoliHouse] 想要成为影之实力者 / 我想成为影之强者 / Kage no Jitsuryokusha ni Naritakute! - 19 [WebRip 1080p HEVC-10bit AAC][简繁内封字幕]",
},
Expand All @@ -162,7 +163,7 @@ func TestMikan_Parse(t *testing.T) {
name: "AnimeParseOverride",
args: args{
opts: &models.AnimeParseOptions{
MikanUrl: "https://mikanani.me/Home/Episode/dcc28079dfda415cdcdf46159aad0fa94f1a2f11",
Input: "https://mikanani.me/Home/Episode/dcc28079dfda415cdcdf46159aad0fa94f1a2f11",
AnimeParseOverride: &models.AnimeParseOverride{
MikanID: 114,
BangumiID: 514,
Expand All @@ -179,7 +180,7 @@ func TestMikan_Parse(t *testing.T) {
wantAnime: &models.AnimeEntity{ID: 514, ThemoviedbID: 1919, MikanID: 114, Name: "AnimeParseOverride", NameCN: "AnimeParseOverrideCN", Season: 1, Eps: 20, AirDate: "2022-10-05"},
},
}
m := mikan.Mikan{}
m := mikan.NewMikanSource(bangumi.NewBangumiSource(""))
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotAnime, err := m.Parse(tt.args.opts)
Expand All @@ -206,7 +207,7 @@ func TestMikan_Parse_Failed(t *testing.T) {
name: "err_mikan",
args: args{
opts: &models.AnimeParseOptions{
MikanUrl: "err_mikan",
Input: "err_mikan",
},
name: "err_mikan",
},
Expand All @@ -218,7 +219,7 @@ func TestMikan_Parse_Failed(t *testing.T) {
name: "err_bangumi",
args: args{
opts: &models.AnimeParseOptions{
MikanUrl: "err_bangumi",
Input: "err_bangumi",
},
name: "err_bangumi",
},
Expand All @@ -230,7 +231,7 @@ func TestMikan_Parse_Failed(t *testing.T) {
name: "err_themoviedb_search",
args: args{
opts: &models.AnimeParseOptions{
MikanUrl: "err_themoviedb_search",
Input: "err_themoviedb_search",
},
name: "err_themoviedb_search",
},
Expand All @@ -242,7 +243,7 @@ func TestMikan_Parse_Failed(t *testing.T) {
name: "err_themoviedb_get",
args: args{
opts: &models.AnimeParseOptions{
MikanUrl: "err_themoviedb_get",
Input: "err_themoviedb_get",
},
name: "err_themoviedb_get",
},
Expand All @@ -251,7 +252,7 @@ func TestMikan_Parse_Failed(t *testing.T) {
}
Hook()
defer UnHook()
m := mikan.Mikan{}
m := mikan.NewMikanSource(bangumi.NewBangumiSource(""))
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
gotEntity, err := m.Parse(tt.args.opts)
Expand Down
85 changes: 85 additions & 0 deletions internal/animego/anisource/bangumi/bangumi.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package bangumi

import (
"github.com/wetor/AnimeGo/internal/animego/anidata/bangumi"
"github.com/wetor/AnimeGo/internal/animego/anidata/themoviedb"
"github.com/wetor/AnimeGo/internal/animego/anisource"
"github.com/wetor/AnimeGo/internal/api"
"github.com/wetor/AnimeGo/internal/models"
"github.com/wetor/AnimeGo/pkg/log"
)

type Bangumi struct {
ThemoviedbKey string
}

func NewBangumiSource(tmdbKey string) api.AniSource {
return Bangumi{
ThemoviedbKey: tmdbKey,
}
}

func (m Bangumi) Parse(opts *models.AnimeParseOptions) (anime *models.AnimeEntity, err error) {
var bgmID int
var mikanID int
var bgmEntity = &bangumi.Entity{}
var season int
var tmdbID int

switch input := opts.Input.(type) {
case models.MikanEntity:
bgmID = input.BangumiID
mikanID = input.MikanID
case int:
bgmID = input
mikanID = 0
}
// ------------------- 获取bangumi信息 -------------------
if opts.AnimeParseOverride == nil || !opts.OverrideBangumi() {
log.Debugf("[AniSource] 解析Bangumi,%d", bgmID)
entity, err := anisource.Bangumi().GetCache(bgmID, nil)
if err != nil {
return nil, err
}
bgmEntity = entity.(*bangumi.Entity)
} else {
bgmEntity.Name = opts.AnimeParseOverride.Name
bgmEntity.NameCN = opts.AnimeParseOverride.NameCN
bgmEntity.AirDate = opts.AnimeParseOverride.AirDate
bgmEntity.Eps = opts.AnimeParseOverride.Eps
}

// ------------------- 获取tmdb信息(季度信息) -------------------
if opts.AnimeParseOverride == nil || !opts.OverrideThemoviedb() {
log.Debugf("[AniSource] 解析Themoviedb,%s, %s", bgmEntity.Name, bgmEntity.AirDate)
t := anisource.Themoviedb(m.ThemoviedbKey)
id, err := t.SearchCache(bgmEntity.Name)
if err != nil {
return nil, err
}
tmdbID = id
entity, err := t.GetCache(id, bgmEntity.AirDate)
if err != nil {
log.Warnf("[AniSource] 解析Themoviedb获取番剧季度信息失败")
} else {
season = entity.(*themoviedb.SeasonInfo).Season
}
} else {
tmdbID = opts.AnimeParseOverride.ThemoviedbID
season = opts.AnimeParseOverride.Season
}

anime = &models.AnimeEntity{
ID: bgmID,
ThemoviedbID: tmdbID,
MikanID: mikanID,
Name: bgmEntity.Name,
NameCN: bgmEntity.NameCN,
Season: season,
Eps: bgmEntity.Eps,
AirDate: bgmEntity.AirDate,
}
anime.Default()
log.Infof("[AniSource] 获取「%s」信息成功!", anime.NameCN)
return anime, nil
}
Loading

0 comments on commit b9ac3d6

Please sign in to comment.