honue / MoviePilot-Plugins

MoviePilot插件库
GNU General Public License v3.0
78 stars 17 forks source link

Bangumi打格子和豆瓣书影音 支持开始播放/标记为已播放两种触发方式 #30

Open happyTonakai opened 4 months ago

happyTonakai commented 4 months ago

Emby item.markplayed 测试通过。 Plex 根据官方文档 https://support.plex.tv/articles/115002267687-webhooks/ 应该是 media.scrobble – Media is viewed (played past the 90% mark). Jellyfin 暂不支持 https://github.com/jellyfin/jellyfin-plugin-webhook/issues/118 ,大概可以通过 UserDataSaved 做进一步筛选,不过我没Jellyfin,用户可以打开debug模式看一下webhook的输出。

honue commented 4 months ago

这个我担心的是mark整个季度,事件多次触发会不会直接卡死

honue commented 4 months ago

我豆瓣插件也想这么改来着,想想算了

honue commented 4 months ago

这个我担心的是mark整个季度,事件多次触发会不会直接卡死

你考虑下这个问题,emby mark季度是对单集多次mark

happyTonakai commented 4 months ago

这个我担心的是mark整个季度,事件多次触发会不会直接卡死

你考虑下这个问题,emby mark季度是对单集多次mark

我看一下

happyTonakai commented 4 months ago

最小调用间隔3秒钟

豆瓣书影音

【INFO】2024-05-14 20:08:50,612 - doubanwatching - 摇曳露营△ 第三季 已同步到豆瓣在看,不处理
【INFO】2024-05-14 20:08:50,611 - themoviedb - 摇曳露营△ TMDB识别结果:电视剧 摇曳露营△ (2020) 95623
【INFO】2024-05-14 20:08:50,610 - tmdbapi.py - 95623 查询结果:摇曳露营△
【INFO】2024-05-14 20:08:50,609 - tmdbapi.py - 正在查询TMDB电视剧:95623 ...
【INFO】2024-05-14 20:08:50,608 - themoviedb - 摇曳露营△ 使用TMDB识别缓存:摇曳露营△
【INFO】2024-05-14 20:08:50,597 - doubanwatching - 匹配播放事件 item.markplayed: 摇曳露营△ S3E6 那么 改天再见, tmdb id = None
【INFO】2024-05-14 20:08:47,609 - doubanwatching - 摇曳露营△ 第三季 已同步到豆瓣在看,不处理
【INFO】2024-05-14 20:08:47,609 - themoviedb - 摇曳露营△ TMDB识别结果:电视剧 摇曳露营△ (2020) 95623
【INFO】2024-05-14 20:08:47,607 - tmdbapi.py - 95623 查询结果:摇曳露营△
【INFO】2024-05-14 20:08:47,606 - tmdbapi.py - 正在查询TMDB电视剧:95623 ...
【INFO】2024-05-14 20:08:47,605 - themoviedb - 摇曳露营△ 使用TMDB识别缓存:摇曳露营△
【INFO】2024-05-14 20:08:47,594 - doubanwatching - 匹配播放事件 item.markplayed: 摇曳露营△ S3E5 篝火和牛肉盛宴, tmdb id = None
【INFO】2024-05-14 20:08:44,610 - doubanwatching - 摇曳露营△ 第三季 已同步到豆瓣在看,不处理
【INFO】2024-05-14 20:08:44,609 - themoviedb - 摇曳露营△ TMDB识别结果:电视剧 摇曳露营△ (2020) 95623
【INFO】2024-05-14 20:08:44,608 - tmdbapi.py - 95623 查询结果:摇曳露营△
【INFO】2024-05-14 20:08:44,607 - tmdbapi.py - 正在查询TMDB电视剧:95623 ...
【INFO】2024-05-14 20:08:44,606 - themoviedb - 摇曳露营△ 使用TMDB识别缓存:摇曳露营△
【INFO】2024-05-14 20:08:44,595 - doubanwatching - 匹配播放事件 item.markplayed: 摇曳露营△ S3E4 前往畑薙!!地狱的死亡之路, tmdb id = None
【INFO】2024-05-14 20:08:41,609 - doubanwatching - 摇曳露营△ 第三季 已同步到豆瓣在看,不处理
【INFO】2024-05-14 20:08:41,608 - themoviedb - 摇曳露营△ TMDB识别结果:电视剧 摇曳露营△ (2020) 95623
【INFO】2024-05-14 20:08:41,607 - tmdbapi.py - 95623 查询结果:摇曳露营△
【INFO】2024-05-14 20:08:41,606 - tmdbapi.py - 正在查询TMDB电视剧:95623 ...
【INFO】2024-05-14 20:08:41,605 - themoviedb - 摇曳露营△ 使用TMDB识别缓存:摇曳露营△
【INFO】2024-05-14 20:08:41,597 - doubanwatching - 匹配播放事件 item.markplayed: 摇曳露营△ S3E3 前往吊桥之国, tmdb id = None
【INFO】2024-05-14 20:08:39,613 - doubanwatching - 摇曳露营△ 第三季 已同步到豆瓣在看,不处理
【INFO】2024-05-14 20:08:39,409 - themoviedb - 摇曳露营△ TMDB识别结果:电视剧 摇曳露营△ (2020) 95623
【INFO】2024-05-14 20:08:39,408 - tmdbapi.py - 95623 查询结果:摇曳露营△
【INFO】2024-05-14 20:08:38,625 - tmdbapi.py - 正在查询TMDB电视剧:95623 ...
【INFO】2024-05-14 20:08:38,623 - themoviedb - 摇曳露营△ 使用TMDB识别缓存:摇曳露营△
【INFO】2024-05-14 20:08:38,594 - doubanwatching - 匹配播放事件 item.markplayed: 摇曳露营△ S3E2 小露营和庭院露营, tmdb id = None
【INFO】2024-05-14 20:08:35,868 - doubanwatching - 调用过于频繁,等待 14.72 秒后继续执行
【INFO】2024-05-14 20:08:35,813 - doubanwatching - 调用过于频繁,等待 11.78 秒后继续执行
【INFO】2024-05-14 20:08:35,756 - doubanwatching - 调用过于频繁,等待 8.83 秒后继续执行
【INFO】2024-05-14 20:08:35,701 - doubanwatching - 调用过于频繁,等待 5.89 秒后继续执行
【INFO】2024-05-14 20:08:35,645 - doubanwatching - 调用过于频繁,等待 2.94 秒后继续执行
【INFO】2024-05-14 20:08:35,599 - doubanwatching - 剧集第1集的活动不同步到豆瓣档案,跳过
【INFO】2024-05-14 20:08:35,596 - doubanwatching - 匹配播放事件 item.markplayed: 摇曳露营△ S3E1 下次要去哪里呢, tmdb id = None

Bangumi

【INFO】2024-05-14 20:03:37,949 - bangumisync - 摇曳露营△ 第3季 第6集: 单集已经点过格子了
【INFO】2024-05-14 20:03:37,486 - bangumisync - 摇曳露营△ 第3季 第6集: 摇曳露营△ => 摇曳露营△ 第三季 (2024) https://bgm.tv/subject/405785
【INFO】2024-05-14 20:03:37,485 - bangumisync - 匹配播放事件 item.markplayed: 摇曳露营△ S3E6 那么 改天再见, tmdb id = None
【INFO】2024-05-14 20:03:34,915 - bangumisync - 摇曳露营△ 第3季 第5集: 单集已经点过格子了
【INFO】2024-05-14 20:03:34,486 - bangumisync - 摇曳露营△ 第3季 第5集: 摇曳露营△ => 摇曳露营△ 第三季 (2024) https://bgm.tv/subject/405785
【INFO】2024-05-14 20:03:34,485 - bangumisync - 匹配播放事件 item.markplayed: 摇曳露营△ S3E5 篝火和牛肉盛宴, tmdb id = None
【INFO】2024-05-14 20:03:31,956 - bangumisync - 摇曳露营△ 第3季 第4集: 单集已经点过格子了
【INFO】2024-05-14 20:03:31,485 - bangumisync - 摇曳露营△ 第3季 第4集: 摇曳露营△ => 摇曳露营△ 第三季 (2024) https://bgm.tv/subject/405785
【INFO】2024-05-14 20:03:31,485 - bangumisync - 匹配播放事件 item.markplayed: 摇曳露营△ S3E4 前往畑薙!!地狱的死亡之路, tmdb id = None
【INFO】2024-05-14 20:03:29,408 - bangumisync - 摇曳露营△ 第3季 第3集: 单集已经点过格子了
【INFO】2024-05-14 20:03:29,187 - bangumisync - 摇曳露营△ 第3季 第3集: 单集已经点过格子了
【INFO】2024-05-14 20:03:28,494 - bangumisync - 摇曳露营△ 第3季 第3集: 单集已经点过格子了
【INFO】2024-05-14 20:03:28,485 - bangumisync - 摇曳露营△ 第3季 第3集: 摇曳露营△ => 摇曳露营△ 第三季 (2024) https://bgm.tv/subject/405785
【INFO】2024-05-14 20:03:28,485 - bangumisync - 匹配播放事件 item.markplayed: 摇曳露营△ S3E3 前往吊桥之国, tmdb id = None
【INFO】2024-05-14 20:03:27,023 - bangumisync - 摇曳露营△ 第3季 第2集: 合集状态 在看 => 在看,无需更新在看状态
【INFO】2024-05-14 20:03:26,990 - bangumisync - 摇曳露营△ 第3季 第2集: 合集状态 在看 => 在看,无需更新在看状态
【INFO】2024-05-14 20:03:25,486 - bangumisync - 摇曳露营△ 第3季 第2集: 摇曳露营△ => 摇曳露营△ 第三季 (2024) https://bgm.tv/subject/405785
【INFO】2024-05-14 20:03:25,485 - bangumisync - 匹配播放事件 item.markplayed: 摇曳露营△ S3E2 小露营和庭院露营, tmdb id = None
【INFO】2024-05-14 20:03:24,504 - bangumisync - 摇曳露营△ 第3季 第1集: 摇曳露营△ => 摇曳露营△ 第三季 (2024) https://bgm.tv/subject/405785
【INFO】2024-05-14 20:03:22,760 - bangumisync - 调用过于频繁,等待 14.72 秒后继续执行
【INFO】2024-05-14 20:03:22,703 - bangumisync - 调用过于频繁,等待 11.78 秒后继续执行
【INFO】2024-05-14 20:03:22,647 - bangumisync - 调用过于频繁,等待 8.84 秒后继续执行
【INFO】2024-05-14 20:03:22,592 - bangumisync - 调用过于频繁,等待 5.89 秒后继续执行
【INFO】2024-05-14 20:03:22,536 - bangumisync - 调用过于频繁,等待 2.95 秒后继续执行
【INFO】2024-05-14 20:03:22,484 - bangumisync - 匹配播放事件 item.markplayed: 摇曳露营△ S3E1 下次要去哪里呢, tmdb id = None
happyTonakai commented 4 months ago

不行,emby的这个事件只有手动打勾才会触发,播放完毕后自动标记为看完好像不会触发,这个pr先关掉了

SanaeMio commented 4 months ago

Jellyfin可以通过判断webhook中的 NotificationType == 'PlaybackStop' && PlayedToCompletion == 'True'

happyTonakai commented 4 months ago

Jellyfin可以通过判断webhook中的

NotificationType == 'PlaybackStop' && PlayedToCompletion == 'True'

在片尾时跳到下一集也会触发吗

SanaeMio commented 4 months ago

Jellyfin可以通过判断webhook中的 NotificationType == 'PlaybackStop' && PlayedToCompletion == 'True'

在片尾时跳到下一集也会触发吗

理论上应该是会触发的(跳到下一集应会有播放停止这个动作),我晚上试一下

happyTonakai commented 4 months ago

Jellyfin可以通过判断webhook中的 NotificationType == 'PlaybackStop' && PlayedToCompletion == 'True'

在片尾时跳到下一集也会触发吗

理论上应该是会触发的(跳到下一集应会有播放停止这个动作),我晚上试一下

感谢你的思路,我试了一下emby跳转下一集是会先停止的,而且可以通过percentage来判断是否播放完毕

event.py - 发送事件:webhook.message - event='playback.stop' channel='emby' item_type='TV' percentage=99.55245626712912

这样emby的问题应该是解了

happyTonakai commented 4 months ago

不过MP的Jellyfin模块既没有 PlayedToCompletion 也没有 percentage…… https://github.com/jxxghp/MoviePilot/blob/de0237f3482d1d43d099a2fd9eaba710efecde94/app/modules/jellyfin/jellyfin.py#L509-L624 在MP那提了个PR,添加percentage字段

happyTonakai commented 4 months ago

https://emby.media/community/index.php?/topic/129057-enhanced-notification-webhooks-for-automatic-markplayed/ @SanaeMio Emby的playback.stop也有PlayedToCompletion,建议你在Bangumi-syncer里使用这个,而不是item.markplayed,那个是手动触发的。在这个插件中受限于mp的代码,我就先用播放百分比来判断了。

honue commented 3 months ago

image @happyTonakai 用锁实现了批量触发标记完成的问题,也重构了下代码,你帮忙看下jellyfin和plex的标记完成event?

zww94 commented 3 months ago

请问emby的 webhook 怎么填写

happyTonakai commented 3 months ago

请问emby的 webhook 怎么填写

emby需要打开playback.start, playback.stop, item.markplayed

honue commented 3 months ago

请问emby的 webhook 怎么填写

emby需要打开playback.start, playback.stop, item.markplayed

请我一下 有详细的教程吗?不知道哪儿打开 你所说的、我以为打开emby填写WEBbook通知 填写上MP的IP地址就可以了、

看这位哥们期末完了没,有时间他给你介绍介绍用法。建议加mp群吧不会的去群里问。

happyTonakai commented 3 months ago

请问emby的 webhook 怎么填写

emby需要打开playback.start, playback.stop, item.markplayed

请我一下 有详细的教程吗?不知道哪儿打开 你所说的、我以为打开emby填写WEBbook通知 填写上MP的IP地址就可以了、

emby设置-通知-添加一个webhooks通知,url填写http://127.0.0.1:3001/api/v1/webhook?token=是你在环境变量或app.env里设置的,默认moviepilot,请求内容类型为multipart/form-data。填写完了你发送一下测试通知试试,显示通知已发送就说明你的url填对了;通知下面的events里播放四个全选,加上用户-标记为已播放。

插件设置主要就是豆瓣要获取你的cookie,bangumi要去生成api key,媒体服务器用户名就是你emby的用户名,注意大小写。

url里的127.0.0.1是当你emby和mp在同一个设备上才能这么填,如果是docker安装应该都需要host网络(大概),如果不是的话修改为对应的ip,3001也是默认的,是这个环境变量里的PORT: API服务端口,默认3001,可自行修改,不能与WEB服务端口冲突

zww94 commented 3 months ago

请问emby的 webhook 怎么填写

emby需要打开playback.start, playback.stop, item.markplayed

请我一下 有详细的教程吗?不知道哪儿打开 你所说的、我以为打开emby填写WEBbook通知 填写上MP的IP地址就可以了、

emby设置-通知-添加一个webhooks通知,url填写http://127.0.0.1:3001/api/v1/webhook?token=是你在环境变量或app.env里设置的,默认moviepilot,填写完了你发送一下测试通知试试,显示通知已发送就说明你的url填对了;通知下面的events里播放四个全选,加上用户-标记为已播放。

插件设置主要就是豆瓣要获取你的cookie,bangumi要去生成api key,媒体服务器用户名就是你emby的用户名,注意大小写。

url里的127.0.0.1是当你emby和mp在同一个设备上才能这么填,如果是docker安装应该都需要host网络(大概),如果不是的话修改为对应的ip,3001也是默认的,是这个环境变量里的PORT: API服务端口,默认3001,可自行修改,不能与WEB服务端口冲突

谢谢您

happyTonakai commented 3 months ago

@happyTonakai 用锁实现了批量触发标记完成的问题,也重构了下代码,你帮忙看下jellyfin和plex的标记完成event?

我的想法是给用户三种触发方式:开始播放和完成播放(90%进度条自动标记)二选一,手动标记应该是必然支持的,因为我个人有的时候看点开看两分钟就关了去干别的事了,或者像我们这种测试插件的,就不太适合开始播放就同步记录,你怎么看?

手动标记Jellyfin现在感觉可以使用UserDataSaved做筛选,不过我只用Emby不太好去看具体怎么实现,第三方的插件倒是有支持手动标记的 https://github.com/shemanaev/jellyfin-plugin-webhooks/blob/95ea08b3bf6ab908a9722c220e9858be44b60afe/Jellyfin.Webhooks/Formats/PlexFormat.cs#L99 Plex应该就是你写的那样

honue commented 3 months ago

@happyTonakai 用锁实现了批量触发标记完成的问题,也重构了下代码,你帮忙看下jellyfin和plex的标记完成event?

我的想法是给用户三种触发方式:开始播放和完成播放(90%进度条自动标记)二选一,手动标记应该是必然支持的,因为我个人有的时候看点开看两分钟就关了去干别的事了,或者像我们这种测试插件的,就不太适合开始播放就同步记录,你怎么看?

手动标记Jellyfin现在感觉可以使用UserDataSaved做筛选,不过我只用Emby不太好去看具体怎么实现,第三方的插件倒是有支持手动标记的 https://github.com/shemanaev/jellyfin-plugin-webhooks/blob/95ea08b3bf6ab908a9722c220e9858be44b60afe/Jellyfin.Webhooks/Formats/PlexFormat.cs#L99 Plex应该就是你写的那样

你那种方法我那个adaptiveintro helper有算百分比的,但是感觉会把这个插件复杂度提高了

happyTonakai commented 3 months ago

@happyTonakai 用锁实现了批量触发标记完成的问题,也重构了下代码,你帮忙看下jellyfin和plex的标记完成event?

我的想法是给用户三种触发方式:开始播放和完成播放(90%进度条自动标记)二选一,手动标记应该是必然支持的,因为我个人有的时候看点开看两分钟就关了去干别的事了,或者像我们这种测试插件的,就不太适合开始播放就同步记录,你怎么看?

手动标记Jellyfin现在感觉可以使用UserDataSaved做筛选,不过我只用Emby不太好去看具体怎么实现,第三方的插件倒是有支持手动标记的 https://github.com/shemanaev/jellyfin-plugin-webhooks/blob/95ea08b3bf6ab908a9722c220e9858be44b60afe/Jellyfin.Webhooks/Formats/PlexFormat.cs#L99 Plex应该就是你写的那样

你那种方法我那个adaptiveintro helper有算百分比的,但是感觉会把这个插件复杂度提高了

那回头给mp提个pr吧,把emby和jellyfin本身就支持的PlayedToCompletion加进报文里