R酱的Userscript笔记(2): 新手入门篇

在上一篇中,我简单的介绍了一下什么是Userscript,以及怎么使用Userscript。那么,在这篇中,我们就要开始编写我们的第一个脚本了。

第一个脚本

模板样例(ES5)

在Tampermonkey的管理面板(配置页),点击已安装脚本左边的加号按钮,就会新建一个默认的空用户脚本模板如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// ==UserScript==
// @name New Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match http://*/*
// @grant none
// ==/UserScript==

(function() {
'use strict';

// Your code here...
})();

可以看到,整个模板分为两部分:

  • 第一部分是由// ==UserScript==// ==/UserScript==之间的metadata信息区,用来对脚本进行描述说明。格式应该使用以下形式说明。

    1
    2
    3
    // ==UserScript==
    // @key value
    // ==/UserScript==

    更具体地说明我会在之后进行说明,当然你也可以在脚本平台进行查阅

  • 第二部分则是剩下的代码区,是用户脚本运行时的脚本。所有的代码就应该写在这里。

Hello World

那么下面就使用alert方法在进入百度页面的时候提示hello world对话框吧。将上面的示例代码改为如下,并保存

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// ==UserScript==
// @name Alert Hello World in Baidu
// @namespace Rhilip
// @version 0.1
// @description Alert Hello World in Baidu
// @author Rhilip
// @match https*://www.baidu.com/*
// @grant none
// ==/UserScript==

(function() {
'use strict';

alert("hello world~");
})();

可以看到我们在meta部分修改了以下选项:

  • name: 脚本的名称
  • namespace: 脚本命名空间,如果不知道什么是命名空间可以稍微搜索一下。实际可以看成与name字段联合确定一个独立脚本的东西。
  • description: 脚本功能描述,用来说明脚本的具体用途
  • author: 脚本作者,你自己
  • match: 脚本匹配网站(等下再讲)

并在脚本代码区添加了一条alert("hello world~");,于是在访问www.baidu.com域名下的网站时。这个页面将会像平时一样显示出来,还会弹出一个对话框:“Hello world~”

TIM截图20180526223816.jpg

当然这个简单的脚本中还隐藏了一些知识,如果你的JavaScript基础还不是很好,可以先略过这部分。直接进入下一部分~

脚本使用(function() {})()封装了一个立刻执行的匿名函数,这样可以防止污染页面原有脚本当然,如果你不自己封装也不用担心,现在的脚本平台均会在幕后做了很多的事情来确保用户脚本不会与页面所包含的原有脚本发生严重的冲突,其使用原理也是这种方法。

当然,但这样也导致了一些其他调试上面的问题。比如在用户脚本里定义的变量和函数能被别的脚本访问。事实上,只要用户脚本运行完了,所有的变量和函数就都不能使用了。 这样你直接使用开发者工具的Console面板就不能获得脚本中的变量以及函数。

下面列出了最终Tampermonkey注入www.baidu.com页面的JavaScript片段**(经过格式化后),**这个信息你可以在Developer tools - Sources - top - Tampermonkey中找到(,如果没有的话,请保证开发者面板开启的情况下刷新页面查看)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
(function() {
(function(context, fapply, console) {
with (context) {
(function(module) {
"use strict";
try {
fapply(module, context, [, , context.CDATA, context.uneval, context.define, context.module, context.exports, context.GM, context.GM_info]);
} catch (e) {
if (e.message && e.stack) {
console.error("ERROR: Execution of script 'Alert Hello World in Baidu' failed! " + e.message);
console.log(e.stack.replace(/(\\(eval at )?<anonymous>[: ]?)|([\s.]*at Object.tms_[\s\S.]*)/g, ""));
} else {
console.error(e);
}
}
}
)(function(context, fapply, CDATA, uneval, define, module, exports, GM, GM_info) {

// ==UserScript==
// @name Alert Hello World in Baidu
// @namespace Rhilip
// @version 0.1
// @description Alert Hello World in Baidu
// @author Rhilip
// @match https*://www.baidu.com/*
// @grant none
// ==/UserScript==

(function() {
'use strict';

alert("hello world~");
})();
})
}
})(this.context, this.fapply, this.console);
}).apply(window["__u__16777552.02102864_"])

##其他模板样例

Tampermonkey为开发者还提供了一些其他的模板。比如ECMAScript6、CoffeeScript。分别如下:

  • ECMAScript6 ,使用babel和polyfill为浏览器提供ES6支持
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// ==UserScript==
// @name New ES6-Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description shows how to use babel compiler
// @author You
// @require https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.18.2/babel.js
// @require https://cdnjs.cloudflare.com/ajax/libs/babel-polyfill/6.16.0/polyfill.js
// @match <$URL$>
// ==/UserScript==

var inline_src = (<><![CDATA[

// Your code here...

]]></>).toString();
var c = Babel.transform(inline_src, { presets: [ "es2015", "es2016" ] });
eval(c.code);

随着浏览器对ES6规范的支持不断增强,你可以不用使用ECMAScript6 的模板而是直接使用ES5的。

  • CoffeeScript,使用CoffeeScript转换器为这种方言提供浏览器适配
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// ==UserScript==
// @name New Coffee-Userscript
// @namespace http://tampermonkey.net/
// @version 0.1
// @description shows how to use coffeescript compiler
// @author You
// @require http://coffeescript.org/browser-compiler/coffeescript.js
// @match <$URL$>
// ==/UserScript==

var inline_src = (<><![CDATA[

// Your code here

]]></>).toString();
var compiled = this.CoffeeScript.compile(inline_src);
eval(compiled);

补一些基础知识

Userscript实际是JavaScript。并很考验脚本编写者HTML、CSS、JavaScript的综合能力。

以下为一些网站,你可以作为基础学习,也可以作为手册翻阅。

当然随着ES6规范被浏览器不断支持,你可以开始了解下ES6的一些语法特性:

R酱的Userscript笔记(1): 基础介绍篇

什么是Userscript

按照eMule Fans对Userscirpt的描述,用户脚本(UserScript)是一种强大的客户端(浏览器)Javascript脚本。下载了用户脚本保存在电脑里,通过浏览器的某些扩展程序(最常用的是Firefox的Greasemonkey扩展),就可以运行于相关页面上。用户脚本为用户增强浏览体验和控制。在安装之后,它们可可以任意修改HTML页面,请求其他站点的数据,自动为用户访问的网站添加功能,或使其更加易用、更加清新。
并依据描述,用户脚本(UserScript)一般后缀为 .user.js

用户脚本管理平台

要使用用户脚本,用户首先需要安装一个用户脚本管理器,最常见的是 Tampermonkey、Violentmonkey(经常被称为暴力猴)、Greasymonkey。你可以直接在你浏览器的插件商店中获取这些插件。

由于Greasymonkey的4.x版本的更新了自身API的调用方式,例如废弃了GM_addStyle等API,导致先前使用GM API的脚本全部失效,且这次更新没有提供对于旧接口的兼容和过渡。虽然Greasemonkey给开发者提供了相应的解决方案,但是该方案建立在修改旧脚本的基础之上,考虑到社区中已有大量油猴脚本,部分脚本的作者可能已经不再更新,Greasemonkey目前的做法无疑会给油猴脚本开发者、油猴脚本社区以及油猴脚本用户带来不必要的麻烦,这应该是软件开发过程中极力避免的问题。

由上所述,不建议使用Greasymonkey作为自己的用户脚本管理平台,而是使用Tampermonkey、Violentmonkey作为用户脚本管理平台,这些插件管理平台均使用 Greasymonkey 3.x 版本的API,对现有脚本的支持性良好。

另一方面,部分插件平台还扩展了一些自己的API方法,例如: Tampermonkey提供了GM_addValueChangeListener 。如果你脚本的受众可能使用其他用户脚本管理平台,请在使用GM_* API之前查看这个API是否被这个平台实现。否则可能你的脚本就不能运行了23333

常见平台的API文档你可以在以下页面翻阅:

因为本人使用Tampermonkey进行脚本开发以及使用,所以接下去我会以Tampermonkey作为例子。
tampermonkey.jpg

怎么获取Userscript

一般用户脚本都从一些脚本分享网站获取。由于现在网站页面ui变动较大,一般请选择较为新的脚本,或者目前还在更新的脚本,以防止因为页面变动而脚本不再更新导致的无法使用情况。

目前,对于中国用户来说 GreasyFork 可能是最好用、最熟悉的分享平台。
greasyfork.jpg

当然除了GreasyFork,还有一些其他的脚本分享网站,例如:

国内还有一些转载脚本的站点,因为站点脚本可能不是最新的,所以在此就不做列举了。

【战舰少女R】5月生煎结果

5月4日15点50入场,约16点23分U1405出货出场。建造耗时约33min
总计消耗油1W,建造177次。
除了3号位这个轻巡以外,其他立绘不好舔
251DC24EA1FF685A2D56D0F8A8C9ABE5.jpg


NGA相关帖子:

使用rclone在Windows下挂载Google个人/团队云盘

前几天上了朋友提供的Google云盘商业版的车
但是Google默认提供的工具 Backup and Sync 中并不能对团队云盘进行编辑,而 Drive File Stream 又提示不是 G Suite账号不能使用(额,虽然我个人觉得应该是管理员没有开相关权限。。。。。。
结果试了下rclone可以在Windows环境下挂载,那tm的就rclone大法好,rclone大法好,rclone大法好了喽。。。

本处仅讲mount操作,但其他rclone命令也可在windows环境下使用。

工具

其中rclone的windows版需要解压,并添加解压目录到系统路径中。(额,不添加,然后使用时写完整路径也行23333)。而依赖库winfsp下载完后一路Next直接安装就可以了。

补充工具

添加Google团队云盘

确认rclone已经添加到系统路径中后可以使用rclone config进入配置项。
具体的配置设置可参见下面他人写的帮助或者直接搜索就行,挺简单的所以本处不再累述(实际情况是没有对中间过程做保存),注意在提示“Configure this as a team drive?”时,输入Y,并填入需要使用的团队云盘。

挂载 Mount

我这里假设我前面添加的名称为GDrive,想要挂载在本机的X:上,并设置缓存目录为F:\Temp(cache路径中请不要带有空格,默认缓存目录为C盘用户目录下, C:\Users\<Your user name>\AppData\Local\rclone)。那么运行以下命令执行挂载(整个GDrive根目录)操作,然后你就会看到一个可爱的X盘出现了~

1
rclone mount GDrive:/ x: --cache-dir F:\Temp --vfs-cache-mode writes

关于vfs-cache-mode项设置,还是建议看下官方的说明根据自己的需求和网络情况来进行选择 https://rclone.org/commands/rclone_mount/#file-caching 。这里只做简单说明:

  • off: In this mode the cache will read directly from the remote and write directly to the remote without caching anything on disk. (本地不做任何缓存,所有文件直接从云端获取并写入。建议网速特别好时(复制粘贴大文件时建议至少100M管以上速度)使用。
  • minimal: This is very similar to “off” except that files opened for read AND write will be buffered to disks. This means that files opened for write will be a lot more compatible, but uses the minimal disk space. (和off类似,但是已经打开的文件会被缓存到本地。个人推荐,小文件基本够用,但是如果你的网络情况(梯子)不是特别好的话,用writes也行
  • writes: In this mode files opened for read only are still read directly from the remote, write only and read/write files are buffered to disk first. (如果文件属性为只读则只从云端获取,不然先缓存在本地进行读写操作,随后被同步。个人推荐使用,但是在直接从本地复制文件到GDrive时还是看网络情况
  • full:In this mode all reads and writes are buffered to and from disk. When a file is opened for read it will be downloaded in its entirety first. (所有的读写操作都会缓存到磁盘中。然后才会同步。不是很推荐。会导致所有文件均被缓存到本地。直到达到你缓存总额(–cache-total-chunk-size,默认大小10G)。但是你网速特别差时也可以使用。

后端运行以及开机自动挂载

上面的挂载操作在退出cmd后就自动结束了,所以我们需要让它后台运行。
rclone虽然提供了--daemon参数来实行后台运行,但是该参数并不适合于windows环境中。会有如下提示:

1
2
λ rclone mount GDrive:/ x: --cache-dir F:\Temp --vfs-cache-mode writes --daemon
2018/05/01 09:54:19 background mode not supported on windows platform

所以,我们需要另外想个办法让rclone能够后端运行以及开机自动挂载。

在你之前解压的rclone目录下新建一个文本文件,填入以下内容,请注意修改倒数第二行的WS.Run中相关命令为你上步成功执行的命令,然后将该文件名改为rclone.vbs (后缀名为.vbs即可)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit
Dim WMIService, Process, Processes, Flag, WS
Set WMIService = GetObject("winmgmts:{impersonationlevel=impersonate}!\\.\root\cimv2")
Set Processes = WMIService.ExecQuery("select * from win32_process")
Flag = true
for each Process in Processes
if strcomp(Process.name, "rclone.exe") = 0 then
Flag = false
exit for
end if
next
Set WMIService = nothing
if Flag then
Set WS = Wscript.CreateObject("Wscript.Shell")
WS.Run "rclone mount GDrive:/ x: --cache-dir F:\Temp --vfs-cache-mode writes", 0
end if

完成后双击运行,你会看到X盘挂载成功。

补充说明下,如果你看到显示的挂载空间其实是个人空间大小,请参阅此issue: The amount of disk space incorrent when mount Team Drives (gdrive) in Windows 10 · Issue #2288 · ncw/rclone 下载最新的rclone并安装。但超大文件仍建议使用rclone copy或者rclone sync进行复制或者同步操作,而不是直接使用挂载盘,以免卡挂载盘。

TIM截图20180501100446.jpg

如果你需要中断这个挂载操作,请直接在任务管理器中kill掉rclone.exe进程即可。
然后将这个文件复制(或者剪贴)到开机项中C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp(Windows 10)即可实现开机自动挂载~

上传速度相关

rclone直接连通www.goolgeapis.com进行文件的上传与下载操作。能直接走IPv6流量,在教育网100M环境下,能做到满速上传。其他环境网速视你的网络情况决定。

TIM图片20180501164229.jpg

TIM截图20180501163934.jpg

【战舰少女R】所罗门之晓(2018.04) 总结

我也不是攻略党,所以活动情报及攻略等请直接参照 [攻略] [活动] 所罗门之晓推图,打捞攻略,求助,讨论,吐槽集中贴 就好了。
主要抄五葉茶的,不行就看下其他人的23333

基于Pt-Board的国内Pt站点大数据分析

基于Pt-Board数据库的国内PT站点大数据分析

本帖娱乐统计向,标题党和瞎BB,都请不要太当真。
不吹不黑不挑事,不诋毁任何站点,不希望伤害任何人。
谢绝任何形式转载,拒绝搞事!

Pt-Board介绍

详细介绍请参见: 国内 PT 站点最新种子公告板 Pt-Board 以及 相关Docs说明文档

Pt-Board是本人于2017年9月份上线的一个国内站点RSS聚合搜索的服务。截止本人撰稿截稿为止(2018年4月),数据库共收集210万条信息,基本收集了国内常见PT站点的种子信息。

既然有了这么多条目,顺带可以做个”大”数据分析了吧233333
(我其实年初就很想写一个这样的分析报告了,结果一直拖拉到现在 囧rz

但后端数据库记录的信息其实很少,只有站点、种子号、种子标题、种子发布时间几项。所以能够分析的也就只有这几个吧(轻笑

目前数据库中记录的数据最早可以追溯到教育网站点北交知行于2005-05-05发布的种子:[[美国][TVseries][FRIENDS(老友记/六人行)][mkv]](http://pt.zhixing.bjtu.edu.cn/torrents/27073/)。至于更久远的历史就不知道了。同样在该服务上线前已经消逝在历史潮流中的站点也没有办法了~

说明:

  • 2017年9月上线前各站数据为补抓数据,9月上线后数据为RSS源信息整理。即数据抓取时间段为2017年9月至2017年12月
  • 仅基于本人数据库分析,因站点存在种子修改、删除、禁止等情况,分析数据不代表各站目前站点种子数量、种子信息,也不一定能代表各站的历史种子情况。
  • 因为行文时间较长(没空+懒),不同段落统计数据并不一定是来自同一时间。

Pt-Analytics介绍

详见: https://rhilip.github.io/PT-help/ptanalytics ,因为使用了ES6语法,请使用现代浏览器打开浏览。

首先后端脚本定时从数据库中统计数据并生成对应的json静态信息。
页面使用$.getJSON()方法从后端API中获取信息并存在localStorage中。
渲染方法从localStorage中获取信息并使用echarts渲染出折线图、日历热力图等统计图形。

涉及站点数据总览

因为文章拖拖拉拉写了很久所以这里数据就截止2017年12月31日,不包含2018年数据

站点 种子最小ID号 种子最大ID号 记录种子信息条数 存留比[1] 最小种发布时间[2]
6V[3] 11 1613532 330392 20.48% 2008/09/07 23:50:00
91Ring 1 11 11 100.00% 2017/01/12 15:34:22
Antsoul 5 52383 31617 60.36% 2010/11/11 02:45:45
BTSCHOOL 2 1755 1516 86.38% 2012/07/31 22:08:21
BYR 53 253943 73724 29.03% 2008/03/31 14:02:11
CCFBits 72 170783 136249 79.78% 2008/03/03 07:31:11
CHCDVD 1 125 106 84.80% 2017/12/13 17:11:34
CHDBits 123 29465 26650 90.45% 2016/08/29 06:08:44
CMCT 7 59330 39752 67.00% 2010/09/01 03:45:42
CUGB 351 10948 6908 63.10% 2016/03/04 07:12:58
DUTPT 27 42835 19309 45.08% 2012/07/11 00:25:31
GZTown 47 4823 3413 70.77% 2012/09/01 21:01:28
HD4FANS 1 12699 12057 94.94% 2013/12/28 11:32:29
HDChina 25 279864 25204 9.01% 2010/02/05 04:46:08
HDCity 185 34921 9905 28.36% 2009/05/09 02:06:11
HDCK 1 9 9 100.00% 2017/12/02 04:18:52
HDHome 2 32608 27194 83.40% 2014/11/25 05:39:08
HDNode 1 146 144 98.63% 2017/05/15 15:56:53
HDSKY 22 61567 53690 87.21% 2013/05/18 03:38:34
HDStreet 17 47682 1023 2.15% 2017/09/28 17:11:06
HDTime 12 12603 11538 91.55% 2014/08/03 11:12:27
HDU 3 15405 14244 92.46% 2014/12/27 23:40:35
HUDBT 2 136964 95597 69.80% 2010/11/13 07:45:45
Hyperay 3 14404 11166 77.52% 2015/12/17 10:40:45
JoyHD 59435 67949 6568 9.67% 2013/10/31 07:12:26
KeepFrds 1 6781 6488 95.68% 2012/08/04 07:34:02
MTeam 3 220281 194500 88.30% 2012/02/15 18:50:29
MyHDbits 1 20 16 80.00% 2017/12/04 20:36:15
NPU 5 118284 61202 51.74% 2011/12/09 09:46:10
NWSUAF6 242 133138 35748 26.85% 2010/12/16 12:36:54
NYPT 9 48331 21597 44.69% 2014/09/28 21:45:31
OpenCD 7 72667 50858 69.99% 2010/01/29 00:34:50
Ourbits 9 66441 18811 28.31% 2016/11/20 02:43:33
QXXZ 3 125 56 44.80% 2016/08/05 20:18:32
SJTU 76 148510 60315 40.61% 2009/05/05 19:35:06
SolaGS 9 1208 1132 93.71% 2015/10/24 10:54:51
TCCF 2 33288 20072 60.30% 2009/08/01 02:35:53
TJUPT 48 162768 39160 24.06% 2010/09/01 10:18:14
TLFBits 20 18221 1386 7.61% 2011/03/06 16:23:17
TTG 15 343218 190546 55.52% 2009/02/28 14:22:05
TTHD 3145 7079 3416 48.26% 2015/01/28 03:55:34
U2 209 29819 22752 76.30% 2008/09/16 16:46:32
WHU 3 43770 35941 82.11% 2013/03/14 10:32:19
XAUAT6 272 130646 18364 14.06% 2010/06/18 11:32:05
ZX 27073 601488 280166 46.58% 2005/05/06 07:31:00

数据解释

  1. 存留比:由记录条数除以最大种子号得到。可在一定程度上反映站点删种程度
  2. 最小种发布时间:记录中第一个种子的发布时间,在一定程度上反应站点的开站时间
  3. 六维空间(6V)与知行(ZX)不同的是,六维空间的种子贴与论坛贴混杂在一起。本处统计种子条数时不计算论坛帖。

浅谈PT站自动发种

最近写Autoseed的人真多,我就抛砖引玉的讲讲Python的实现吧。但是其实并不是只有Python才能实现,只要该语言具有网络通信以及本地文件读写的能力均可以。(比如某人的就是用Node.js)

传统发种流程

在介绍Autoseed的流程前,我们先回顾下传统的发种流程。。

传统发种流程.png

可以看到,我们需要先要在本地存在你想要自动发布的文件,并准备好发种表单需要的信息。完成发布后需要下载对应种子,以及做种软件中正确做种即可。
所以我们的自动发种程序只要模拟这个过程即可了~ (是吧是吧,多简单

序言

本来在PT站发种就不是一件简单的事,想要自动发种就更存在问题了。比如,

  1. 种子资源从那里获取?(上游PT站点、BT网络,自抓取);如果种子资源不是自抓取的,那么使用什么方法获取?(flexget,irssi-autodl;torrent文件还是magnet连接)
  2. 简介如何生成?(数据库、自引用)
  3. 发种表单中那些是需要根据转发种子信息修改的?(季度信息,副标题)
  4. 如果将表单模拟发送到站点?又使用什么方法向bt做种软件添加新种子?(watch-dir,rpc,web-api)

如果你都有点思路了,欢迎看下本人已有的开源实现 Rhilip/Pt-Autoseed。(广告:欢迎watch、star、fork、pr)
额(⊙﹏⊙) ,如果不能一下子看懂的话,可以看下最早的一次commits 6b4fb88/autoseed.py至少那时候还稚嫩,而且单文件的逻辑比较好理清。

其他实现: https://github.com/rachpt/AutoSeed

后面我会以 Ubuntu + Python3 + Transmission 环境介绍整个过程。

慎用PTT这类辅助软件

慎用PTT(PT-Tool)这类辅助软件。除非你能保持定期修改密码和Passkey的好习惯。

类别指:

  • 代码不开源或无第三方审查,纯粹依赖于开发者个人自觉
  • 使用Cookies(或者账号密码形式)获取用户信息,拥有完全站点访问权限(部分站点设有二次验证或对敏感操作需要二次密码验证等除外)

PTT使用截图(v2.0.1)
ptt.png

以下为贴吧质疑帖及作者宣传贴:


以下为原文

1、软件自身

该软件目前并不是完全开源状态。
给大家的也是编译完后的程序。
虽然有原作者保证,但是万一存在源代码投毒或者编译投毒的情况那?
各位的PT账号是自己辛苦求来的,还请为自己的账号安全性多做考虑。(部分有二次验证的站除外)
至少目前就这软件的功能上讲,没什么必要。
聚合搜索的教程吧里小吧也整理过很多,数据展示各站有流量条,
自己真心在意自己的数据增长,拿个Excel表格记录也好。(然而你玩就了就知道数据只是浮云

此外我个人对E语言编写的任何程序都不放心!

2、Cookies问题

别说目前用的是浏览器用来登录抓cookie没什么关系。
一方面,该软件在根目录明文存储站点Cookies信息,并未进行任何混淆加密,可能存在文件被盗取上传的可能;
另一方面,NexusPHP系的logout只是把你本地浏览器的cookies给清除而已,如果你在退出后冒用原来的Cookies,仍然可以直接使用。只有修改账号密码后才能彻底弃用掉原有的Cookies。
以下为原版代码。分别是NexusPHP登陆和登出的函数。

  • 登陆设置Cookies并以此识别用户信息

login.jpg

  • 登出只将用户Cookies从浏览器中清除

logout.jpg

3、作者本身态度

我个人记得该软件作者曾在Pt吧发布过帖子宣传该软件,但是对于帖子中要求开源以及对软件安全性质疑的楼层均未给予明确回复。且在本人质疑后直接删除该贴(update:据作者回复只是因为初版只是小规模公开)。另据他人告知,原来该软件曾在群内有过源代码公开,但目前已删除,只有成品。(update: 目前群内有学习代码公开,但学习代码并不代表成品代码,同时也不能代表编译结果。

Pt站资源简介生成工具 PT-Gen

此工具已不公开维护,请考虑直接使用以下API地址调用:

或者使用 https://www.bfdz.ink/tools/ptgen 作为替代。


嘛,此类工具已经很多了,比如前有领头的 movieinfogen 后又有别人在movieinfogen暂时失效时间写的替代 http://huancun.org/ ,此外还有各种各样的脚本可供生成相关的简介。
就比如我在BYRBT内部论坛分享的整篇 资源简介美化——电影、剧集、动漫简介生成 ,就比较完整的介绍了这类工具的使用。

这篇博文介绍的也是类似工具。也没什么别的大的功能,毕竟大家都大同小异。只不过就以下功能罢了。

  • 支持使用Douban链接来生成电影、剧集简介(movieinfogen格式)
  • 支持使用Bangumi链接来生成动漫信息(BYR推荐 Story、Staff、Cast格式)
  • 支持使用Steam链接来生成游戏信息
  • 豆瓣、Bangumi不用登陆(因此也导致部分资源不可查询)
  • 支持在豆瓣上有imdb号的资源
  • 支持豆瓣搜索

唯一有点不同的是,在提供展示页面的基础上,还提供无CORS的API接口,可以直接调用。

DEMO: https://rhilip.github.io/PT-help/ptgen
API: https://api.rhilip.info/tool/movieinfo/gen
DOCS: https://github.com/Rhilip/PT-help/blob/master/modules/infogen/README.md

这个后端API我早就写了,当时在研究用户脚本,面对Javascript的异步问题解决方法不是很懂,转而想用后端生成的形式。
主文件就一个gen.py,不受其他Flask环境依赖。你也可以复制该脚本,在任何其他脚本中使用Gen(url).gen()调用。
这几天补个了前端页面而已。顺带水一篇博文~

Github提交失败修复小记

今天在使用本地Git工具Push Commits到Github的时候突然提示需要重新登陆了。如下分别是使用http及ssh的提示窗口
github_need_login.jpg
github_need_login_ssh.jpg

然而,无论我输入了多少次正确的密码,依然提示我

1
2
3
Logon failed, use ctrl+c to cancel basic credential prompt.
remote: Anonymous access to Rhilip/PT-help.git denied.
fatal: Authentication failed for 'https://github.com/Rhilip/PT-help.git/'

在确认不是墙以及不是密码输错的情况下,我发现了Github的这条Twitter推送
github_turn_off_tls_1.jpg

1
We've turned off TLS v1.0 and v1.1 for the next hour as we move toward permanently disabling them. Check out https://githubengineering.com/crypto-removal-notice/ … to learn more about our plans to deprecate weak crypto standards.

问题一下子就解决了。因为之前本地的缓存身份信息失效了,且使用旧版本TLS加密通信通道关闭了。导致我新的身份认真通过不了。这一个操作同时还影响了使用Putty版本(Git-Extensions中)低于0.70的所有用户。

只要更新Putty版本到0.7就可以修复这个问题。或者使用Git Credential Manager for Windows v1.14.0就可以修复这个问题。