PureDark / H-Viewer

An android feed reader application which fetch data with selector and regular expression.
Apache License 2.0
1.74k stars 236 forks source link

功能建议 #40

Open zhihaofans opened 8 years ago

zhihaofans commented 8 years ago

建议↓


浏览图片

图

zhihaofans commented 8 years ago

还有希望支持nogallery,因为有的网站在indexpage就可以得到完整图片并且没有galleryRule

PureDark commented 8 years ago

最近沉迷新游戏,没空管这应用233333

另外noGallery完全不需要啊,现在就可以不指定galleryRule,我记得没错的话tumblr就是这样,所有数据在index就能获取,所以只有indexRule

zhihaofans commented 8 years ago

@PureDark bing.txt 那这个文件有哪里不对吗?不能获取任何图片,cover得到了地址但没有加载图片(用浏览器打开cover的地址则没问题)

PureDark commented 8 years ago

实机测试看log后发现在国内得到的cover本身就是完整地址 例如 http://s.cn.bing.net/az/hprichbg/rb/OcellatedTurkey_ROW10376571112_1920x1080.jpg 所以经过你的replacement后地址会变成 https://www.bing.comhttp://s.cn.bing.net/az/hprichbg/rb/OcellatedTurkey_ROW10376571112_1920x1080.jpg 就错了 估计是因为国内会自动采用CDN的地址,而herokuap因为在国外所以得到的html中直接用本地服务器的相对地址

zhihaofans commented 8 years ago

但我在用浏览器挂不挂代理都说得到的都说相对地址啊。。 用抓包软件然后运行h-viewer的话就获取的是完整地址。。。 不知道是不是UA问题

zhihaofans commented 8 years ago

原来是我忘记加pictureRule了。。。 终于搞定了。。。

PureDark commented 8 years ago

另外我记得我在wiki里提到过,相对地址不用做处理,会自动判断并转化为完整地址的,你用regex来手动替换反而容易出错

zhihaofans commented 8 years ago

@PureDark 还有一件事。 就是当pictureRule获取到的item不存在url与thumbnail时能否自动去掉这个item? 或者item的path能否做到多输入多个值?

这个破网站的图片不好解析啊,试了很多种方法都无法同时匹配顶级的imgreplys下的img(因为没有图片时img参数也存在) jsonpath又不能匹配同级或父级元素

PureDark commented 8 years ago

有时不存在url和thumbnail时也可能有用处,所以不想取的item就像AcFun漫画那样用regex进行区分啊 比如

        "item": {
            "path": "$.img",
            "regex": "/"
        },

这样img是空的自然匹配不到/这个字符就不会取这个item

但是另一个需求可能比较难,因为jsonpath本身不像css选择器那样加个逗号就可以使用多个不同的选择器、 我看看之后版本能不能自己实现一下类似的功能吧

虽然其实按照我目前的写的规则解析器完善度,还是可以实现解析这个站点的、但是里面很多猫腻只有我自己知道2333 很难在教程里解释清楚我就没写上去
比如pictureRule只有thumbnail和url不提供item的话,是把selector或者path取到的内容当成字符串处理,然后根据regex得到所有匹配放在一个数组里,然后thumbnail和url得到的两个数组中序号相同的两个数据会拿来凑成一个Picture之类的2333

这个用法我似乎在bilibili画友中用到了

        "pictureRule": {
            "thumbnail": {
                "fun": "html",
                "regex": "s_url.*?drawyoo(.*?)\"",
                "replacement": "http://i0.hdslb.com/bfs/drawyoo$1",
                "selector": "div.d_body > script"
            },
            "url": {
                "fun": "html",
                "regex": "m_url.*?drawyoo(.*?)\"",
                "replacement": "http://i0.hdslb.com/bfs/drawyoo$1",
                "selector": "div.d_body > script"
            }
        },

因为bilibili画友的多图的数据在html中很难提取,干脆直接从script里的json数据中提了:

var list = [{
    "id": "237243",
    "s_url": "http:\/\/i0.hdslb.com\/bfs\/drawyoo\/aeea8a88685db1af911a0ae972f2a16ad64ff9f1.jpg",
    "m_url": "http:\/\/i0.hdslb.com\/bfs\/drawyoo\/bf79c0370848b7c50a42fe424617e73f4d29b561.jpg"
},
{
    "id": "237244",
    "s_url": "http:\/\/i0.hdslb.com\/bfs\/drawyoo\/066b506176239f0c6f285be4b4cad5dd19efbfdc.jpg",
    "m_url": "http:\/\/i0.hdslb.com\/bfs\/drawyoo\/7d9a9eb694194db85c2dffc380a64311d661fb52.jpg"
}];

其实有两种选择,我可以选用item的selector选中script,然后用正则把这段json提取出来,然后用path填$,这样接下来都可以直接用jsonpath,但是当时似乎我还没实现jsonpath,就用了另一种方法,靠单纯字符串匹配 thumbnail匹配到所有s_url后面的数据,得到含有两个数据的数组,url匹配到所有m_url后面的数据,也得到一个含有两个数据的数组,就分别凑到一起得到两个Picture

Soooya commented 7 years ago

有的网页没有封面图,比如论坛神马的,能不能用取到的图片当封面图啊,就在flag里面设置。、 ~

zhihaofans commented 7 years ago

@ShallYu 你可以把 cover 加在 galleryRule

Soooya commented 7 years ago

cover加在 galleryRule里完美^^取了第一个图片~

zhihaofans commented 7 years ago

@PureDark 建议在下载列表加个重新下载的功能,经常卡在90%+就动不了了,删掉下载太麻烦了