声明:纸鸢花的花语所提供的任何资源或素材代码,仅供学习交流和技术分析,严禁用于任何商业牟利行为(包括但不限于引流用户加入社群,利用免费学习素材牟利贩卖,冒充原作者盗用引流增加用户数…),出现任何后果自行承担,资源的分享者没有任何关系和责任。

基于Cloudflare Worker的强化磁力搜索工具,纸鸢磁力只负责请求接口,数据均来自于网络上现有的磁力搜索引擎;搜索时支持直接查看预览图,用户可自定义规则集,添加自己的磁力搜索网站,自定义规则教程在文档结尾。

在线工具测试网址:PaperkiteBT-version1.3.0 (paperkitemagnet.top)

工具素材包获取:关注微信公众号【纸鸢花的小屋】,回复关键字【纸鸢磁力】将自动发送工具和教程链接。

一、界面样式展示以及功能介绍:

请输入图片描述

请输入图片描述

『预览磁力资源』模块优化:搜索出的结果可查看预览图和文件信息,用户也能点击中间的收藏按钮,将磁力项目收藏进『我的收藏夹』模块备用。

请输入图片描述

『磁力规则配置』模块优化:工具已支持自定义规则导入,不会自定义也可以选择云导入默认规则,点击规则名称即可切换[启用/禁用状态],还支持提前选择好搜索时需要的排序方式。

请输入图片描述

『我的收藏夹』模块上线:用户在浏览磁力时可收藏磁力链接,在『我的收藏』功能菜单下即可查看历史收藏。

请输入图片描述

二、自定义磁力规则教程:

磁力引擎底层原理:工具采用类似【HTML DOM querySelectorAll() 方法】来实现网页标签的定位与文本获取,接下来开发者会介绍规则模版中各值的含义,以及如何正确制作自定义规则。

// 规则模版
{
        "name": "海盗湾",
        "url": "https://thepiratebay10.xyz",
        "now_sorted":0,
        "sort":[
            {
                "name":"All",
                "url":"/search/%PaperSearch%/%PaperPage%/99/0"
            },
            {
                "name":"Audio",
                "url":"/search/%PaperSearch%/%PaperPage%/99/100"
            },
            {
                "name":"Video",
                "url":"/search/%PaperSearch%/%PaperPage%/99/200"
            },
            {
                "name":"Games",
                "url":"/search/%PaperSearch%/%PaperPage%/99/400"
            }
        ],
        "rule": {
            "integration":true,
            "title": "td:nth-child(2)",
            "parent":"#searchResult > tbody > tr",
            "magnet_a": {
                "type": "a",
                "rule": "td:nth-child(4) > nobr > a"
            },
            "detail": ["td.vertTh","td:nth-child(3)","td:nth-child(5)"]
        },
        "method": "GET",
        "page": 1,
        "type": 1
}
// 附带注释版
{
        "name": "海盗湾",
        "url": "https://thepiratebay10.xyz",// 磁力引擎的真正请求并获取到磁力数据的网址,尾部无需带/
        "now_sorted":0,// 初始选择的排序方式,基于sort数组
        "sort":[
            {
                "name":"All",// 排序方式的名称
                "url":"/search/%PaperSearch%/%PaperPage%/99/0"// 根据某种排序方式下引擎请求的网址,%PaperSearch%为搜索关键字的占位符,%PaperPage%为页号的占位符,真正搜索时会被替换掉。
            },
            {
                "name":"Audio",
                "url":"/search/%PaperSearch%/%PaperPage%/99/100"
            }
        ],
        "rule": {
            "integration":true|false,// 根据上述两种网站情况选择。
            "title": "td:nth-child(2)",// 基于parent位置定位,即地址=parent地址+自身地址
            "parent":"#searchResult > tbody > tr",// parent属性为绝对定位DOM地址
            "link_a":"",// 基于parent位置定位,即地址=parent地址+自身地址
            "magnet_a": {
                "type": "a"|"text"|"XX",// 获取值的三种方式,即磁力链接存在于a标签的href中、文本标签的innerText中、标签的XX属性值中,根据情况选择。
                "rule": "td:nth-child(4) > nobr > a"// integration=true:一体化页面就采用基于【parent标签】的相对定位DOM地址;integration=false:不是一体化页面就采用绝对定位DOM地址。
            },
            "detail": ["td.vertTh","td:nth-child(3)","td:nth-child(5)"]// 基于parent位置定位,即地址=parent地址+自身地址,由于描述信息可能存在多个标签,所以采用数组形式。
        },
        "enable":true|false,// 是否默认启用
        "method": "GET",// 请求方式,现只支持GET请求页面
        "page": 1,// 初始的页号
        "type": 1// 默认即可
}

『parent值』根据网页源码,类似querySelectorAll() 来定位每条磁力结果的所属容器(这边暂时称为父标签);

"rule": {
    "parent":"#searchResult > tbody > tr",// parent属性为绝对定位DOM地址
}

请输入图片描述

『title、link_a、detail值』在上面定位到的『parent父标签』基础上进行查找,进一步定位每个磁力的标题、详情页链接、资源描述,以上三种的属性值只需填写基于『parent父标签』的相对定位地址;为了方便快捷,我们可以利用浏览器的右键检查功能,快速获取到标签的DOM定位(注:当integration=true时,无需填写『link_a值』);

"rule": {
     "integration":false,
     "title": "td:nth-child(2)",// 基于parent位置定位,即地址=parent地址+自身地址
     "parent":"#searchResult > tbody > tr",
     "link_a":"td > a",// 基于parent位置定位,即地址=parent地址+自身地址
     "detail": ["td.vertTh","td:nth-child(3)","td:nth-child(5)"]// 基于parent位置定位,即地址=parent地址+自身地址,由于描述信息可能存在多个标签,所以采用数组形式。
}

"rule": {
     "integration":true,
     "title": "td:nth-child(2)",// 基于parent位置定位,即地址=parent地址+自身地址
     "parent":"#searchResult > tbody > tr",
     "detail": ["td.vertTh","td:nth-child(3)","td:nth-child(5)"]// 基于parent位置定位,即地址=parent地址+自身地址,由于描述信息可能存在多个标签,所以采用数组形式。
}

请输入图片描述

请输入图片描述

『magnet_a、integration值』由于磁力网站结构不同,规则会有所不同,第一种是网站在搜索时不会显示磁力链接的情况,磁力链接存在于另外的详情页里;第二种是网站在搜索时就会显示磁力链接,无需跳转详情页。

『integration=false』第一种情况,『magnet_a值』需要绝对定位DOM地址,因为磁力链接存在于新的详情页中,而不是搜索页,无法基于搜索页的『parent父标签』来定位。

"rule": {
     "integration":false,
     "parent":"#searchResult > tbody > tr",
     "magnet_a": {
         "type": "a"|"text"|"XX",// 获取值的三种方式,即磁力链接存在于a标签的href中、文本标签的innerText中、标签的XX属性值中,根据情况选择。
         "rule": "#Result > tbody > tr > td:nth-child(4) > nobr > a"// 不是一体化页面就采用绝对定位DOM地址。
     }
}

请输入图片描述

请输入图片描述

『integration=true』第二种情况,『magnet_a值』需要相对定位DOM地址,与『title、detail、link_a值』原理相同,都是基于『parent父标签』定位的。因为不需要跳转详情页,所以『integration=true』情况下无需『link_a值』。

"rule": {
     "integration":true,
     "parent":"#searchResult > tbody > tr",
     "magnet_a": {
         "type": "a"|"text"|"XX",// 获取值的三种方式,即磁力链接存在于a标签的href中、文本标签的innerText中、标签的XX属性值中,根据情况选择。
         "rule": "td:nth-child(4) > nobr > a"// 一体化页面就采用基于【parent标签】的相对定位DOM地址。
     }
}

请输入图片描述

『url值』必须是真正返回数据的网页网址;由于网站可能存在多种排序方式,『sort值』在不同排序下的网页地址会有所不同。

"url": "https://thepiratebay10.xyz",// 磁力引擎的真正请求并获取到磁力数据的网址,尾部无需带/
"sort":[
    {
        "name":"All",// 排序方式的名称
        "url":"/search/%PaperSearch%/%PaperPage%/99/0"// 根据某种排序方式下引擎请求的网址,%PaperSearch%为搜索关键字的占位符,%PaperPage%为页号的占位符,真正搜索时会被替换掉。
    },
    {
        "name":"Audio",
        "url":"/search/%PaperSearch%/%PaperPage%/99/100"
    }
]

请输入图片描述

『其他值填写说明』

{
        "name": "海盗湾",
        "now_sorted":0,// 初始选择的排序方式,基于sort数组
        "sort":[
            {
                "name":"All",
                "url":"/search/%PaperSearch%/%PaperPage%/99/0"
            }
        ],
        "enable":true|false,// 是否默认启用
        "method": "GET",// 请求方式,现只支持GET请求页面
        "page": 1,// 初始的页号
        "type": 1// 默认即可
}

开发者留言:PaperkiteMagnet搜索工具的磁搜模块已经基本完成,但是引擎的兼容性和稳定性还不够完善,而且存在一些底层BUG和样式UI问题,十分欢迎小伙伴反馈问题和建议;默认的云规则由于是靠开发者一人编写,所以可能并不完全符合所有小伙伴的使用习惯,同样欢迎小伙伴在【纸鸢的博客】评论区下讨论和发表自定义的引擎规则,如果需要自用的磁力网站规则编写求助,可以在博客评论区下留言,开发者和其他大佬也能帮助小伙伴成功导入自定义的磁力规则。【注:带有人机验证的网站现在还不支持获取到搜索结果】

img