基于.NET 6 和 Windows UI 3的强大、快速、漂亮的Pixiv桌面程序

Pixeval是什么

Pixeval是由我在业余是开发的一个第三方免代理P站客户端,UI使用Windows Presentation Foundation实现,基于.NET Core 3.0,支持Windows7-10(计划取消Win10以外的支持),实现了大部分的浏览功能,并且做了诸多加强,目前已经在基于AGPL协议在Github上开源,该项目设想起源于2018年,当时用Java写了P站的api,当时还可以通过修改hosts的方法访问,之后GFW升级了封锁策略,将DNS污染升级成了SNI阻断,因此就去找资料开始了解GFW的不同阻断级别以及阻断机制,在2019年下半年开始写此项目,大约花费了3个月左右的时间实现(实际本项目的实现部分灵感来源于Notsfsssf(下称探姬),因为最初我使用的是硬编码ip,在看了探姬的源码之后发现可以使用dns查询来动态查找,使得实现优雅了很多),最终才呈现给各位,除了Pixeval之外,同样还有几个可以实现免代理访问P站的方法,在此将会一一列举:

注:
* 如未指明,以上所有内容所使用的方案都是通过直接操作/转发流量实现,并不包含任何通过第三方服务器的转发过程,在安全方面大可放心

Pixeval可以做什么

  • 快速且流畅的用户体验
    Pixeval是基于.NET Core 3.0开发的WPF项目,其中使用到了诸多.NET的强大特性,所有的请求均使用.NET的异步架构并发处理,同时依赖C# 8.0的异步流来流畅的将图片加载至UI,所有的UI容器均使用了WPF的虚拟化技术,最大程度的减少内存占用,您可以尽情的体验高速浏览美图的快感
  • 特辑浏览
    许多用户都希望能够快速的浏览并收藏特辑——也就是Pixiv官方精心准备的集锦,但无论是Pixiv网页端还是App端都不能方便快捷的实现,在本应用里,你可以在片刻之间获取到数百个特辑集锦并且随时下载他们
  • 批量下载
    一张一张的点开大图,等待加载后再去右键保存,遇到网络波动还可能会前功尽弃,恐怕是下载过程中所遇到的最令人沮丧的事情了,而在这里,所有的下载任务都被集中到管理面板并且可视化,只需要轻点鼠标,作品就会被添加到下载列表 ,并且随时可以查看当前的下载进度,无论作品是只有一张,还是一个图集,抑或是一张GIF动态图片,Pixeval都可以轻松的处理完善,下载文件夹的格式经过统一,你一眼就能够分辨出刚刚下载的作品位于哪里
  • 自定义过滤
    除了选择过滤R-18/R-18G内容以外,Pixeval准备了多种的过滤方案,可以选择需要排除(Exclude)的标签,也可以选择需要包含(Include)的标签,除此之外,你甚至可以自定义作品的最低收藏数以满足口味,这些方案结合起来可以带来最舒适的浏览体验
  • GIF在线预览
    你可以流畅的预览任何Pixiv上面的动态图片,使用体验与查看普通的图片没有任何区别,同样,你也可以选择下载GIF,Pixeval将会自动合成动态图片
  • 用户动态
    Pixeval集成了用户动态功能,随时查看关注用户的动态,而这是大部分客户端所使用的APPAPI无法做到的,我们通过某些特殊手段实现了WEBAPI的访问,以此补全了这一短板
  • 作品榜单
    你可以在左侧的作品榜单页面查看今日以及过往日期的榜单,榜单包含十数个选项:

    • 日榜
    • 月榜
    • 周榜
    • 男性向日榜
    • 女性向日榜
    • 多图/漫画日榜
    • 多图/漫画周榜
    • 原创
    • 新人
    • R-18日榜
    • 男性向R-18日榜
    • 女性向R-18日榜
    • R-18周榜
    • R-18G周榜

注:包含了R-18的所有选项需要在应用和p站的web端打开R-18开关

我应该在哪里下载?

你可以直接访问这里下载,也可以通过在Github上获取最新版本的Release,同样的,你也可以选择自行编译,自行编译时需注意你的电脑需要安装.NET Core 3.1或更高版本的.NET Core SDK,之后使用Windows Powershell执行Pixeval/src/Pixeval/build.ps1即可在bin/x64/Release/publish目录下生成可执行文件以及附加的运行库

一些常见的问题/我下载之后没法XXXX

在此列举了一些常见的问题,在问问题前请务必确保你已经满足下列条件:

  • 本项目基于.NET Core,所以在使用前请确保自己安装了版本号>= 3.1的.NET Core Desktop Runtime
  • 如果你想在没有梯子的情况下使用本应用,请确保在设置里打开了直连,否则你什么都搜索不到
  • 如果你无法安装.NET Core Desktop Runtime,请确保你的系统至少是Windows 7 Service Pack 1,如果不是,请自行安装补丁
  • 如果你发现热门tag搜索到的内容很少,那么很可能是你忘了去设置里设置搜索页数,默认为1,封顶100,每页搜索30张
  • 如果登录时显示Webapi无法登陆/登录失败,请确保自己的杀毒软件没有拦截安装证书的操作(详见为什么要安装证书),如果还是不行,可以通过上文提到的方式向我提交issue

为什么需要安装证书?

安装不被信任的自签证书本身是一个不安全操作,但是本应用实现WEBAPI登录的方式是本地架设一个代理服务器,同时在应用内把流量转发到localhost,localhost再把流量转发给真正的服务器;由于P站强制使用HTTPS,因此在这个过程中SSL证书是必要的,很明显,我们没有办法拿到Pixiv官方的证书,因此退而求其次的办法就是使用自签证书(如果你有更好的见解/方法, 欢迎加群分享或者提交Pull Request,我个人保证证书私钥不会被泄露和分发,然而,如果你依然对安全性持怀疑态度,那么欢迎你clone下仓库,自己签发一张证书(具体如何签发请自行google/百度,有诸多教程,如果你实在不会可以联系我)替换掉Pixeval/src/Pixeval/Resources文件夹下的证书并且自行编译(如何编译?),注意此处有两个证书,一个是.cer格式(不包含私钥,用作客户端根证书校验),而另一个是pixeval_server_ca.pfx(包含私钥,用作服务端校验),其中pixeval_ca.cer是应当被放在受信任的根证书颁发机构中的自签根证书,而pixeval_server_ca.pfx是作为服务端校验的根证书(签发时请确保把对应证书的文件名改成这两个的),后者应当使用前者签发(什么意思?,我该怎么做?: https://infiniteloop.io/powershell-self-signed-certificate-via-self-signed-root-ca/, 或者google搜索"powershell sign certificate using a custom root-CA")。另外,用于安装证书的代码位于这里

更新日志

  • 2020/1/9
    • 将用户浏览器和作品浏览器集成到主窗口中
    • 修改了图片列表的UI
    • 压缩包内包含了完整的.NET Core运行环境,避免有些非常非常可爱的萌新不看说明不知道要装.net,缺点是体积大大增加
  • 2020/2/14
    • 优化了代码,删除了部分无用函数和工具类
  • 2020/3/13
    • 现在下载时可以查看进度了
    • 你可以即时预览GIF了
    • 新增了使用SauceNAO作为源的搜图功能
    • 改进了核心API,优化了异常处理
    • 优化了图片浏览弹窗的开启速度
    • 现在可以在设置里选择不使用直连了
  • 2020/3/14
    • 标签趋势
    • 密码不再使用明文管理,而是通过Windows Credential Manager保存
  • 2020/3/15
    • 添加了自动更新功能(尚处于测试)
    • 添加了一个导航到介绍网址的超链接
  • 2020/3/29
    • 添加了缓存系统
    • 搜图功能可以拖拽文件了
    • 添加了自动下载Runtime的C++脚本
  • 2020/4/13
    • 新增"下载中"与"下载完成"选项卡,可以查看自己的下载历史,同时点击右侧文件夹图标可以导航到对应目录
    • 新增二次过滤功能,在图片搜索结果页面(可以是关键字搜索也可以是用户上传/收藏),在该页面点击/ 键即可打开过滤文本框(不能开启输入法),按照以下规则 输入即可进行对应的过滤:
    • #tag:<要搜索的tag>
    • #tag:!<要排除的tag>
    • #name:<要搜索的作品名>
    • #id:<要搜索的id>
  • 2020/4/14
    • 现在可以直接复制图片了
    • 改进了二次过滤的语法,现在不需要输入诸如#tag:的前缀了
  • 2020/4/17
    • 私人收藏夹与私人关注功能
  • 2020/5/7
    • 实现webapi
    • 实现webapi登录
    • 作品榜单
    • 用户动态
  • 2020/5/23
    • 现在除了可以再应用内查看浏览记录外,还可以在Windows时间线里查看了(仅支持Windows 10 1803+)用户(感谢来自@tobiichiamane的灵感)
    • Pixeval现在会自动注册自定义协议到注册表,可以使用如下方法使用:
    • 当浏览作品时,替换url的协议部分(http/https)为自定义协议(pixeval) (例: https://www.pixiv.net/artworks/81470442 => pixeval://www.pixiv.net/artworks/81470442)
    • 当浏览作者时,替换url的协议部分(http/https)为自定义协议(pixeval) (例: https://www.pixiv.net/users/28603589 => pixeval://www.pixiv.net/users/28603589)
    • 当浏览特辑时,替换url的协议部分(http/https)为自定义协议(pixeval) (例: https://www.pixivision.net/en/a/5423 => pixeval://www.pixivision.net/en/a/5423)
    • 可以直接在图片浏览页设置图片为当前的桌面了,如果你的windows版本 >= 8 (build number: 6.2.9200),则当图片长宽比超过1.7时会自动设置为Span样式)
  • 2020/6/10
    • 可以在右键菜单中选择"下载到"来手动指定下载位置了
    • 可以在设置中选择将作者的作品下载到一个单独文件夹了
  • 2020/9/24
    • 修复了源站上了cf所以无法登陆的bug
  • 2020/10/11
    • 修复了源站上了cf所以无法正常工作的bug
  • 2021/3/9
    • 修复了P站鉴权接口更换导致的登录问题
    • 修复了图片查看器高度不匹配的问题
    • 优化了镜像站替换算法,现在可以支持http和https两种协议了
    • 使用全局唯一的HttpClient(之前犯下的蠢错误)
    • 尽量将所有MessageBox替换为模态窗口
    • 由于P站鉴权接口更换,现在可以自动获取Cookie了

当前计划

撤掉对于Win7的支持
找到更好的WEBAPI登陆手段,不再使用Cefsharp和自签证书
修复默认排序的bug
修复二次过滤无法启动的bug
修复作者浏览页内存泄漏的bug

相关链接

鸣谢列表(没有他们的支持就没有这个作品)

注: 排名不分先后

厚颜无耻的求发电

如果你觉得Pixeval还算合你的胃口的话,欢迎前往我的爱发电给我一点的支持(对目前的我来说将会是雪中送炭),我在学习的业余时间里写了这个作品,你们的支持是我维护的动力

Jusqu'à ce que le mort nous sépare.
最后更新于 2022-10-10