nas-tools icon indicating copy to clipboard operation
nas-tools copied to clipboard

[错误报告]: mt新架构适配

Open Itachi666 opened this issue 2 years ago • 45 comments

确认

  • [X] 我的版本是最新版本,我的版本号与 version 相同。
  • [X] 我已经 issue 中搜索过,确认我的问题没有被提出过。
  • [X] 我已经修改标题,将标题中的 描述 替换为我遇到的问题。

当前程序版本

v3.3.15 3fbde6a

问题类型

主程序运行问题

问题描述

MT更新了新架构,现在站点测试会提示cookie失效,理解应该需要重新适配一下

发生问题时系统日志和配置文件

No response

Itachi666 avatar Mar 23 '24 02:03 Itachi666

我的也是

linsmalldragon avatar Mar 23 '24 03:03 linsmalldragon

@hsuyelin 等大佬适配,应该不是简单更改站点文件,这个改动和HH一样,比较大的改动

jackloves111 avatar Mar 23 '24 03:03 jackloves111

坐等更新

Qwerty4401 avatar Mar 23 '24 05:03 Qwerty4401

坐等大佬适配。这次改版太彻底了

Sameliya avatar Mar 23 '24 12:03 Sameliya

站点适配和资源浏览推送下载倒是基本ok了 不过刷流得大改 看了一下午暂时放弃.... 其他大佬上吧

iovejieba avatar Mar 23 '24 18:03 iovejieba

站点适配和资源浏览推送下载倒是基本ok了 不过刷流得大改 看了一下午暂时放弃.... 其他大佬上吧

感谢大佬!期待PR与更新

TyxTang avatar Mar 23 '24 18:03 TyxTang

现在页面改成静态的了,页面是react+antd;其实可以直接请求接口获取数据,没必要像以前一样解析html了

比如综合的列表接口:/api/torrent/search 详情接口:/api/torrent/detail

其他操作类似,都可以拿到接口。直接用requests库发请求操作就行。 就是不知道mt那边对这种是什么态度

@iovejieba

ruanun avatar Mar 24 '24 03:03 ruanun

期待

xinmans avatar Mar 24 '24 03:03 xinmans

等待大佬出手。现在刷流和RSS都废掉了。

MoogleXX avatar Mar 24 '24 05:03 MoogleXX

MP已经更新了,他的逻辑是用Cookie爬取API地址,所以只需要更新cookie即可,这个方法可以参考

jackloves111 avatar Mar 24 '24 11:03 jackloves111

rss看日志是parser的问题,单独给mt的订阅,enclouse加了个type,目前我这边是能用的,不过刷流和站点签到订阅可能还要等dalao的pr了

{
    "list": "//channel/item",
    "item": {
        "title": {
            "path": ".//title/text()"
        },
        "enclosure": {
            "path": ".//enclosure[@type='application/octet-stream']/@url"
        },
        "link": {
            "path": ".//link/text()"
        },
        "date": {
            "path": ".//pubDate/text()"
        },
        "description": {
            "path": ".//description/text()"
        },
        "size": {
            "path": ".//link/@length"
        }
    }
}

等待大佬出手。现在刷流和RSS都废掉了。

houskii avatar Mar 24 '24 12:03 houskii

rss看日志是parser的问题,单独给mt的订阅,enclouse加了个type,目前我这边是能用的,不过刷流和站点签到订阅可能还要等dalao的pr了

{
    "list": "//channel/item",
    "item": {
        "title": {
            "path": ".//title/text()"
        },
        "enclosure": {
            "path": ".//enclosure[@type='application/octet-stream']/@url"
        },
        "link": {
            "path": ".//link/text()"
        },
        "date": {
            "path": ".//pubDate/text()"
        },
        "description": {
            "path": ".//description/text()"
        },
        "size": {
            "path": ".//link/@length"
        }
    }
}

等待大佬出手。现在刷流和RSS都废掉了。

大佬细说啊,先用上,本项目大佬不知道啥时候才有空 @houskii

jackloves111 avatar Mar 24 '24 12:03 jackloves111

顶上去

unyielding2013 avatar Mar 24 '24 12:03 unyielding2013

需要添加请求头了,cookie不能再使用了,馒头tg群里说了再使用cookie可能会被ban

shiningth avatar Mar 24 '24 12:03 shiningth

您好,这里是张威的邮箱,您的来信已收到,我将尽快给您回复,谢谢!

designcolorfullife avatar Mar 24 '24 12:03 designcolorfullife

rss看日志是parser的问题,单独给mt的订阅,enclouse加了个type,目前我这边是能用的,不过刷流和站点签到订阅可能还要等dalao的pr了

{
    "list": "//channel/item",
    "item": {
        "title": {
            "path": ".//title/text()"
        },
        "enclosure": {
            "path": ".//enclosure[@type='application/octet-stream']/@url"
        },
        "link": {
            "path": ".//link/text()"
        },
        "date": {
            "path": ".//pubDate/text()"
        },
        "description": {
            "path": ".//description/text()"
        },
        "size": {
            "path": ".//link/@length"
        }
    }
}

等待大佬出手。现在刷流和RSS都废掉了。

大佬细说啊,先用上,本项目大佬不知道啥时候才有空 @houskii

自定义订阅 -> RSS解析器,新增一个单独给MT用的,然后mt的rss解析都选这个就行

houskii avatar Mar 24 '24 12:03 houskii

rss看日志是parser的问题,单独给mt的订阅,enclouse加了个type,目前我这边是能用的,不过刷流和站点签到订阅可能还要等dalao的pr了

{
    "list": "//channel/item",
    "item": {
        "title": {
            "path": ".//title/text()"
        },
        "enclosure": {
            "path": ".//enclosure[@type='application/octet-stream']/@url"
        },
        "link": {
            "path": ".//link/text()"
        },
        "date": {
            "path": ".//pubDate/text()"
        },
        "description": {
            "path": ".//description/text()"
        },
        "size": {
            "path": ".//link/@length"
        }
    }
}

等待大佬出手。现在刷流和RSS都废掉了。

大佬细说啊,先用上,本项目大佬不知道啥时候才有空 @houskii

自定义订阅 -> RSS解析器,新增一个单独给MT用的,然后mt的rss解析都选这个就行

这个操作确实不太行,得等大佬适配

jackloves111 avatar Mar 24 '24 13:03 jackloves111

需要添加请求头了,cookie不能再使用了,馒头tg群里说了再使用cookie可能会被ban

cookie应该是没有办法被侦测是人为操作还是软件操作,只是不想让给你用,吓吓你们的,只要不是非常频繁,基本没啥问题的

jackloves111 avatar Mar 24 '24 13:03 jackloves111

按馒头群里开发人员的意思,以后都需要用access token来获取信息,请求种子等,继续使用cookie可能会导致ban号。好处是,就像楼上聊到的,不用再解析html等操作了。

nukewarrior avatar Mar 24 '24 13:03 nukewarrior

站点适配和资源浏览推送下载倒是基本ok了 不过刷流得大改 看了一下午暂时放弃.... 其他大佬上吧

大佬,可以先提一个draft pull request,可能会减少重复工作。

ixff avatar Mar 24 '24 13:03 ixff

资源浏览推送

大佬PR一下 @iovejieba

jackloves111 avatar Mar 24 '24 13:03 jackloves111

资源浏览推送

大佬PR一下 @iovejieba

我也...菜鸡 这两天不在家 看谁方便先pr吧

iovejieba avatar Mar 24 '24 16:03 iovejieba

您好,您的来信已收到,我将第一时间给您回复,谢谢

designcolorfullife avatar Mar 24 '24 16:03 designcolorfullife

你们急着刷流的话可以试试这段 code snippet

在刷流任务上,似乎本质上目前是对资源详情的获取、识别出现了不对称,因此只要针对这部分做 override 即可。

  1. 考虑到 MT 的 headers 里现在有一个 auth 字段,可能需要你们更新一下新的 MT 的 cookies
  2. 还有就是,似乎目前 rss 的清单的列表更新的很慢,我这里最新的一条资源是 22号的,完全 outdate 了
  3. 我自己暂时把 MT 的 brush 停了,不对这段代码负责,仅抛砖引玉。

P.S. 顺手花了10分钟写的我没很全面的测试过,勉强算个临时方案,不算正经方案,毕竟是草台代码。针对 MT 这类的独立解析,感觉需要一个 parser dispatcher,现有的 torrent rss parser 作为fallback parser,独立 site 需要有优先级更高的 rss parser。 考虑到用户有别的需求,因此overall 的看,需要一个 site 类去 hook 以及优先调度所有相关逻辑,e.g. 签到、资源页、刷流。

Patch location as below: 1711298597675

Patch:

        if torrent_url.startswith('https://kp.m-team.cc'):
            try:
                match = re.search(r"detail/(\d+)", torrent_url)
                if match == None:
                    return ret_attr
                
                val = match.group(1)
                params = { "id": val }
                
                res = RequestUtils(
                    cookies=cookie,
                    headers=ua,
                    proxies=Config().get_proxies() if proxy else None
                ).post_res(url = "https://kp.m-team.cc/api/torrent/detail", params = params)
                
                if res.status_code != 200:
                    return ret_attr
                    
                response_json = res.json()
                if response_json["message"] != "SUCCESS":
                    return ret_attr
                
                data = response_json["data"]
                torrent_status = data["status"]
                discount = torrent_status["discount"]
                peer_count = torrent_status["seeders"]
                
                if discount == "2XFREE":
                    ret_attr["free"] = True
                    ret_attr["2xfree"] = True
                elif discount == "FREE":
                    ret_attr["free"] = True

                ret_attr["peer_count"] = int(peer_count) if len(peer_count) > 0 else 0
                return ret_attr
            except Exception as err:
                ExceptionUtils.exception_traceback(err)
                # 随机休眼后再返回
                time.sleep(round(random.uniform(1, 5), 1))
                return {
                    "free": False,
                    "2xfree": False,
                    "hr": False,
                    "peer_count": 0
                }

Saviio avatar Mar 24 '24 16:03 Saviio

你们急着刷流的话可以试试这段 code snippet

在刷流任务上,似乎本质上目前是对资源详情的获取、识别出现了不对称,因此只要针对这部分做 override 即可。

  1. 考虑到 MT 的 headers 里现在有一个 auth 字段,可能需要你们更新一下新的 MT 的 cookies
  2. 还有就是,似乎目前 rss 的清单的列表更新的很慢,我这里最新的一条资源是 22号的,完全 outdate 了
  3. 我自己暂时把 MT 的 brush 停了,不对这段代码负责,仅抛砖引玉。

P.S. 顺手花了10分钟写的我没很全面的测试过,勉强算个临时方案,不算正经方案,毕竟是草台代码。针对 MT 这类的独立解析,感觉需要一个 parser dispatcher,现有的 torrent rss parser 作为fallback parser,独立 site 需要有优先级更高的 rss parser。 考虑到用户有别的需求,因此overall 的看,需要一个 site 类去 hook 以及优先调度所有相关逻辑,e.g. 签到、资源页、刷流。

Patch location as below: 1711298597675

Patch:

        if torrent_url.startswith('https://kp.m-team.cc'):
            try:
                match = re.search(r"detail/(\d+)", torrent_url)
                if match == None:
                    return ret_attr
                
                val = match.group(1)
                params = { "id": val }
                
                res = RequestUtils(
                    cookies=cookie,
                    headers=ua,
                    proxies=Config().get_proxies() if proxy else None
                ).post_res(url = "https://kp.m-team.cc/api/torrent/detail", params = params)
                
                if res.status_code != 200:
                    return ret_attr
                    
                response_json = res.json()
                if response_json["message"] != "SUCCESS":
                    return ret_attr
                
                data = response_json["data"]
                torrent_status = data["status"]
                discount = torrent_status["discount"]
                peer_count = torrent_status["seeders"]
                
                if discount == "2XFREE":
                    ret_attr["free"] = True
                    ret_attr["2xfree"] = True
                elif discount == "FREE":
                    ret_attr["free"] = True

                ret_attr["peer_count"] = int(peer_count) if len(peer_count) > 0 else 0
                return ret_attr
            except Exception as err:
                ExceptionUtils.exception_traceback(err)
                # 随机休眼后再返回
                time.sleep(round(random.uniform(1, 5), 1))
                return {
                    "free": False,
                    "2xfree": False,
                    "hr": False,
                    "peer_count": 0
                }

刷流其实无所谓,主要是现在没办法搜搜和订阅了

jackloves111 avatar Mar 25 '24 07:03 jackloves111

你们急着刷流的话可以试试这段 code snippet

在刷流任务上,似乎本质上目前是对资源详情的获取、识别出现了不对称,因此只要针对这部分做 override 即可。

  1. 考虑到 MT 的 headers 里现在有一个 auth 字段,可能需要你们更新一下新的 MT 的 cookies
  1. 还有就是,似乎目前 rss 的清单的列表更新的很慢,我这里最新的一条资源是 22号的,完全 outdate 了
  1. 我自己暂时把 MT 的 brush 停了,不对这段代码负责,仅抛砖引玉。

P.S. 顺手花了10分钟写的我没很全面的测试过,勉强算个临时方案,不算正经方案,毕竟是草台代码。针对 MT 这类的独立解析,感觉需要一个 parser dispatcher,现有的 torrent rss parser 作为fallback parser,独立 site 需要有优先级更高的 rss parser。 考虑到用户有别的需求,因此overall 的看,需要一个 site 类去 hook 以及优先调度所有相关逻辑,e.g. 签到、资源页、刷流。

Patch location as below: 1711298597675

Patch:

    if torrent_url.startswith('https://kp.m-team.cc'):
        try:
            match = re.search(r"detail/(\d+)", torrent_url)
            if match == None:
                return ret_attr
            val = match.group(1)
            params = { "id": val }
            res = RequestUtils(
                cookies=cookie,
                headers=ua,
                proxies=Config().get_proxies() if proxy else None
            ).post_res(url = "https://kp.m-team.cc/api/torrent/detail", params = params)
            if res.status_code != 200:
                return ret_attr
            response_json = res.json()
            if response_json["message"] != "SUCCESS":
                return ret_attr
            data = response_json["data"]
            torrent_status = data["status"]
            discount = torrent_status["discount"]
            peer_count = torrent_status["seeders"]
            if discount == "2XFREE":
                ret_attr["free"] = True
                ret_attr["2xfree"] = True
            elif discount == "FREE":
                ret_attr["free"] = True
            ret_attr["peer_count"] = int(peer_count) if len(peer_count) > 0 else 0
            return ret_attr
        except Exception as err:
            ExceptionUtils.exception_traceback(err)
            # 随机休眼后再返回
            time.sleep(round(random.uniform(1, 5), 1))
            return {
                "free": False,
                "2xfree": False,
                "hr": False,
                "peer_count": 0
            }

刷流其实无所谓,主要是现在没办法搜搜和订阅了

一样的阿,临时方案就是扒一下search 逻辑然后短路 hook 掉。 正经点的方案么就是把一些通用能力抽出来,然后给独立站点比如馒头写一个独立的 site 类,然后把通用逻辑 DI 进去,然后拿个 dispatcher 调度一下

Saviio avatar Mar 25 '24 07:03 Saviio

刷流其实无所谓,主要是现在没办法搜搜和订阅了

一样的阿,临时方案就是扒一下search 逻辑然后短路 hook 掉。 正经点的方案么就是把一些通用能力抽出来,然后给独立站点比如馒头写一个独立的 site 类,然后把通用逻辑 DI 进去,然后拿个 dispatcher 调度一下

试了一下,加进去这个代码好像也没啥用

jackloves111 avatar Mar 25 '24 08:03 jackloves111

刷流其实无所谓,主要是现在没办法搜搜和订阅了

一样的阿,临时方案就是扒一下search 逻辑然后短路 hook 掉。 正经点的方案么就是把一些通用能力抽出来,然后给独立站点比如馒头写一个独立的 site 类,然后把通用逻辑 DI 进去,然后拿个 dispatcher 调度一下

试了一下,加进去这个代码好像也没啥用

你看看docker log ,是不是没有 import re

Saviio avatar Mar 25 '24 09:03 Saviio

UPDATE:

MT 现在不太稳定,无论是调研还是 bugfix 都没什么意义。刚回家看了一眼 rss response,只有 3 个资源。

Saviio avatar Mar 25 '24 13:03 Saviio

UPDATE:

MT 现在不太稳定,无论是调研还是 bugfix 都没什么意义。刚回家看了一眼 rss response,只有 3 个资源。

再等等吧,馒头的api有点看不懂怎么用

jackloves111 avatar Mar 25 '24 14:03 jackloves111