Closed MichaelMai2000 closed 6 years ago
https://github.com/upbit/pixivpy/wiki/sniffer 在上面,我找到了age_limit这个参数,请问这个参数能获取到吗?
还有就是我手动筛选了一下,发现现有掩码 sanity_level 大于等于6的时候就应该是R的水平了,所以, sanity_level 能用来准确分级吗?
这么久没搞我记得不清楚了,sanity_level好像是跟访问权限相关的吧,比如仅好友访问之类的。age_limit我没注意,你可以把掩码写在文本输出模式试试看。 只要你能找出规律,当然就可以用来准确分级,写一个if判断的高级掩码就行。
@Mapaler %{illust.age_limit}在文本输出模式里没有输出,于是age_limit还可能在其他什么位置吗?
另外,我还发现了一个问题,当文本输出模式格式如下时 %{illust.user.id}%{画师名}/%{动图标记gif}%{多于9图分p}%{illust.filename}%{page}%{动图延迟}.%{illust.extention} %{illust.title.replace(/[\/\]/ig, "_")} %{illust.title}
输出如下 7140895 - 極道畫師/40123321_p0.jpg
Kill La Kill-決闘1/4
replace函数似乎并没有起作用。我查了一下JS的语法,如果正则匹配没有匹配上,应该会直接输出,为什么这里会输出为空白呢? 对于其他illust.title里面不含 / \字符的,replace输出仍旧为空,是哪里出现了什么问题吗?多谢
我昨天结婚,所以没能回复
我看了P站返回应该就不含age_limit这个属性,你说的不知道是不是其他软件通过某些参数换算的。
你按F12打开开发者工具,在运行栏输入"Kill La Kill-決闘1/4".replace(/[\/\\]/ig,"_")
来看看输出呢?右斜杠本身在js里就是转义符,我不知道是不是因为掩码里右斜杠是我后来加入的掩码的转义符,你没有写成转义符。那就要在掩码里写成"Kill La Kill-決闘1/4".replace(/[\\/\\\\]/ig,"_")
才行(掩码先转义成js的,js再转义成实际需要的)
@Mapaler 首先祝贺新婚! age_limit参数在upbit/pixivpy的sniffer的返回值里面出现过,不过Sniffer的更新时间24 Jan 2016,可能已经是个历史遗留物品了,我觉得已经没什么意义了。如果大大没什么思路,我还是先放弃了吧orz
Chrome Console转义符测试结果:
"Kill La Kill-決闘1/4".replace(/[\/\\]/ig,"_")
"Kill La Kill-決闘1_4"
"Kill La Kill-決闘1/4".replace(/[\\/\\\\]/ig,"_")
"Kill La Kill-決闘1_4"
文本输出模式结果格式及输出:
格式:
%{illust.url_without_page}%{page}.%{illust.extention}
%{illust.user.id}%{画师名}/%{动图标记gif}%{多于9图分p}%{illust.filename}%{page}%{动图延迟}.%{illust.extention}
%{illust.title.replace(/[\/\\]/ig, "_")}
%{illust.title.replace(/[\\/\\\\]/ig,"_")}
%{illust.title}
结果:
https://i.pximg.net/img-original/img/2013/11/29/08/07/52/39999104_p0.jpg
7140895 - 極道畫師/39999104_p0.jpg
kill la kill-決闘1_5
kill la kill-決闘1/5
从结果看应该是没问题了,多谢! 不过我想补充一些问题和建议:
- %{illust.user.name.split(/[:\*\?"<>\|\r\n@@]/ig)[0]}
是否应该改为
- %{illust.user.name.split(/[:\\*\\?"<>\\|\\r\\n@@]/ig)[0]}
(这个我也会自己测试一下)以上,再次感谢!
sniffer是老版API,现在我的程序已经没用了,现在用的是第二版API,他的那么多页面我其实不是很了解是什么结构。
最开始因为高级掩码是用大括号来括的,所以不能写function和if这些,不然括号就会冲突,于是当初不需要转义,写法和js一样。后来我加入了{}
的转义,用右斜杠来表示,不过这样正常的右斜杠接括号就无法表示了,所以右斜杠也得转义。不过老的wiki部分忘记改了。
@Mapaler 大概明白了,也就是说掩码里面的 \ 都需要转义成 双 \ ,原因是支持“\{”→“{”、“\}”→“}”、“\\”→“\”三个转义符
age_limit应该是没什么办法了,sanity_level我再找找有什么硬性规律吧。多谢了。
你这么懂的话,其实可以自己改一下程序,把需要处理的图像对象输出到控制台看一下有哪些具体的属性,看看会不会多出来新的信息(不过我觉得多半不会有)
另一个思路是看tag里面有没有r-18和r-18g,我在p站客户端里看限定图似乎是有这个tag的。
@Mapaler 其实没那么懂。如果知道怎么调试,简单debug还是可以的。然而高三寒假比较蛋疼。
输出到控制台看一下有哪些具体的属性
具体操作是什么呢?是看控制台network里面的js属性吗?(这类调试操作我不是很熟悉。。。) 然后改程序可能也不知道改哪儿,简单读过js,只能大概看出来。
我也没有在电脑旁,用手机简单看了下代码,在2160到2161行之间,插入
console.log(item);
然后你点击生成文本的时候,就会把所有的illust对象输出到控制台。
我觉得可以写成自定义掩码,以下是原始js,自己记得加掩码的转义符。
//数组对象的some方法,只要提供的函数有一例返回true就返回true。下面这行就是判断是不是r18-g的条件。
illust.tags.some(function(tag){return tag.name == "R-18G"})
//等于那里还可以用正则表达式的方式来书写,一次性匹配大小写的r-18和r-18g
/r-18g?/ig.test(tag.name)
@Mapaler
illust.tags.some(function(tag){return tag.name == "R-18G"})
是合法且有效的,
但illust.tags.some(function(tag)\{return tag.name == "R-18G"\})
是非法且无效的(死循环了),console中报错“自定义掩码错误”。
illust.tags.some(function(tag){return /r-18g?/ig.test(tag.name)})
也是合法的。illust.tags.some(function(tag){return tag.name == "R-18"})&&!illust.tags.some(function(tag){return tag.name == "R-18G"})
我想起来了,因为自定义掩码的判断条件是单纯js,不需要也不能写%{}
,所以就没有转义。
恐怕没什么化简的或者好理解的。如果要有,都是高级掩码,一种我想到的是写两层三目运算符,我只写思路
如果有r-18?(如果有r-18g?"r-18g":"r-18"):""
高级掩码太长可以写到自定义掩码的内容里面,条件写true或者1就行了。
@Mapaler 新春快乐! 跟我想得差不多,那我就不做什么其他改动了。
新春快乐,没问题回复我还有点不习惯了
我刚才试了下新的投稿都会自动加上R-18,但是老的投稿还真的不一定有,而且这个TAG是可以被删除的。不过确实R-18的都是sanity_level=6,但R-18G还是6没区别。只有网页版才能看到没有R-18 tag的仍然是R-18。
例如R18 R18G的分类,可以通过掩码实现吗?多谢