dudiskbitte.22.08.17

群里有人发了一个sex syndrome里某个叫做近卫的小乳房萌妹的全集度盘链接🤔

一般来说我不会用我的度盘解析脚本处理这种玩意的,因为我去年刚做这个脚本的时候,就知道它没法用来解析unicode文件名,尤其是这个链接里还全都是各种申必日文字符时🤔但如果是近卫的话,那我倒是想试一试(迫真🤔

果然,它根本解析不出任何东西🤔所以我今天干脆改进下这个脚本得了(半恼🤔

bugfix

首先我需要解决它返回的json里全都是\uXXXX这种玩意的问题🤔这个还算比较好办的,比如先用一个变量保存下度盘api返回的结果,然后用echo -en取代echo来将其塞进解析各种参数的管道里,这样它应该就能还原文件名了(确信🤔

接下来这个脚本还有问题,对一个文件名里充满[]的文件,它可能读到]就不再解析后面的文件了🤔在我的114514次调试之后,我发现是grep的问题,最后设置了一个贪婪匹配,这次所有文件都被解析了出来🤔

但至少我最怕的递归解析部分是完全正常的,我以前用pascal编程的时候,那狗逼玩意只要一递归就出问题,搞得我现在每次写递归都担心它能否按预期运行(恼🤔

现在文件数目是对的,但文件名很多都没有解析出来(恼🤔我接着排查,发现是我写的上古grep语句的问题🤔一年前我大概喜欢用grep -Po的方式来检索json里的某个键值,但现在我完全不用这种低级方法,我现在都是先将逗号便乘回车让每一个键值便乘一行,然后直接用一个不加任何参数的fixed grep(当然不fixed也行,反正我也没写什么正则表达式)来筛选出含有某个键的行🤔

这种方法可以筛选出值里有任何奇怪字符的行,而老办法遇到奇怪字符可能就搞不出任何结果了🤔本质上来说,老办法用到了正则表达式,所以有正则表达式法的各种缺陷,比如在此处它就有可能直接被某个申必字符橄榄🤔而我现在搞的这一套,本质上来说利用了源字符串中的数据结构信息(比如无论json树的结构如何,所有键值对之间一定会用一个逗号分隔),所以能够在不用任何艹蛋正则表达式的情况下完成解析(确信🤔

接下来还有一个问题,这个脚本解析出来的文件路径前面还包括一坨什么parent_dir,我应该返回的路径是这个路径减去parent_dir,但我发现脚本里删除这个子串的操作并没有成功🤔其实是因为parent_dir和json别的地方不同,它居然用了url encode而非json encode来表示/,难怪我替换不出来🤔我自从用echo -en处理json encode之后,我基本上把所有的url decode全部删了,看来至少在这个变量处我得加回来(🤔

另外该填进aria2c的--dir参数里的文件夹路径,我发现也没有配置对,它貌似并不能删除后面的文件名,非常有可能是因为文件名里面有什么奇奇怪怪的字符(确信🤔那么,我干脆将它最后一个斜杠和后面的所有内容删掉得了🤔哪怕在最极端的情况,也就是分享的不是文件夹而是一堆文件时,它应该也会剩下一个./塞进--dir(确信🤔

至此,这个脚本已经改进完了,我也拿它解析出了所有近卫的片子链接,而且保留了所有目录结构🤔现在,我只需将其上传到我的vps,bash它,很快度盘里面这个文件夹是什么样,我本地也会是什么样了(确信🤔

extras

除此之外,我还给这个脚本加了一点点功能,比如现在它第三个参数是options🤔当然我并没有写什么正经参数处理,现在这部分options里只要包括连续的关键词单词就可生效,比如包括一个dryrun就可以实现不解析文件链接,而是用一个占位符来表示文件链接,生成的脚本仍然可以下载,但下下来的东西只能体现目录结构🤔discord drive相关部分也被我整成了一个option,只要包括discorddrive,它生成的脚本就不再尝试恢复目录结构,而是将文件统一放在temp目录里面,而将路径便乘文件名,斜杠被点替代🤔至少dudisk2discord脚本里面就是每次下载后都将temp目录里的所有东西都上传到discord drive一遍并删除它们🤔

more problems

现在它用来处理单文件分享链接可能会有点问题,parent_dir会便乘一个叫做.zip或者诸如此类的玩意,导致最后生成的脚本里,--dir会便乘..zip这样的极其令人迷惑的东西(恼🤔

可能它需要特别的处理,比如当检测出它是这坨寄吧时,直接强行便乘./🤔但我现在懒得测试了,因为我还在impact cuties,我感觉这次活动搞不好打不完了(全恼🤔

发表评论