获取 Pixiv RefreshToken

从下列方式中选择一种进行操作,操作之前确保自己可以连接到 Pixiv 进行登录,获取到的 RefreshToken 可妥善保管以便后续使用

方式一:从本站(pixiv.pictures)网页端进行登录

Android 端可以使用 Firefox / Edge Canary 浏览器进行操作

  1. 首先安装 Redirector 浏览器扩展,下载地址:Redirector
  2. 导入 Redirector 规则配置,规则地址:https://pixiv.pictures/helper/Redirector.json
  3. 安装 Tampermonkey 浏览器扩展,下载地址:Home | Tampermonkey
  4. 安装登录工具用户脚本,脚本地址:点击安装
  5. 在此页面选择 App API (OAuth) 进行登录:https://pixiv.pictures/account/login ,会打开 Pixiv 官方登录页面
  6. 登录成功后可在设置页面导出 RefreshToken 以供其他软件使用

方式二:从本站(pixiv.pictures) APP 端进行登录

  1. 下载本站(pixiv.pictures) APP 端 (Android/Windows): https://pixiv.pictures/setting/down_app
  2. 安装打开后从 设置 - 登录 - App API (OAuth) 进行登录,会弹出 Pixiv 官方登录页面
  3. 登录成功后 Android 端如果有弹窗的话请选择本站 APP(Pixiv-Viewer) 进行回调,Windows 端会自动重启
  4. 之后可在 设置 - 其他设置 导出 RefreshToken 以供其他软件使用

方式三:使用 pxder (Node.js) 脚本登录

以下内容来自 pxder Readme 文件

准备

首先你需要先安装 Node.js >= 16

  • Windows / Mac

打开官网 => 下载左边的 LTS 版本 => 安装一路确定

  • Linux
# Ubuntu
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt-get install -y nodejs

# Debian
curl -sL https://deb.nodesource.com/setup_16.x | bash -
apt-get install -y nodejs

# Centos
curl -sL https://rpm.nodesource.com/setup_16.x | bash -
yum install -y nodejs

安装

Windows 打开“命令提示符”或者“Powershell”,执行下面的命令,即可安装(注:后续命令皆在此执行)

npm i -g pxder

登录

如果不能直接访问 Pixiv,首先设置代理:

pxder --setting

5 设置代理,例如: http://127.0.0.1:7890 或者 http://127.0.0.1:1080

然后进行登录

pxder --login
  • Windows

正常情况下应该会自动弹出浏览器访问一个登录授权页面,如果没有的话请手动打开“Login URL”,操作下去即可

登录成功时浏览器会弹出如下图所示的一个对话框,选择“打开”即可,这时 pxder 应该会显示登录成功

打开应用

如果你的体验与上述情况不一致,请使用 pxder --login --no-protocol 命令进行登录,并参考下面的“其他系统”部分进行操作

  • 其他系统

正常情况下应该会自动弹出浏览器访问一个登录授权页面,如果没有的话请手动打开“Login URL”,不要急着登录或授权,按以下步骤操作:

  1. 按下 F12 打开“开发者工具”,切换到“Network”选项卡,勾选“Preserve log”
  2. 进行登录或授权操作,最终会进入一个空白页面
  3. 点击“Doc”进行筛选,找到(一般是)最后一个请求,将 code 参数复制出来,粘贴到程序中并回车

以上步骤尽量快速完成,太慢的话验证可能会过期

jGr1nyMUsxKwTXh

导出 token

pxder --export-token

方式四:使用 Python 脚本进行登录

如果不能直接访问 Pixiv 的话注意设置好代理环境变量 HTTPS_PROXY

  1. 安装 Python 环境,可选择官网安装或者微软商店
  2. 尝试以下几个脚本,使用方式见其说明
pip install gppt
gppt login

方式五:使用 PixEz (Android/iOS) 进行登录

  1. 下载Android: Google Play | Github ReleaseiOS: App Store(美区)
  2. 打开软件进行登录,会跳转到 Pixiv 官方登录页面
  3. 登录成功后如果有弹窗的话选择 PixEz
  4. 进入软件后从 更多 - 账户信息 - Token export 导出后妥善保存

P.S.

目前来看 RefreshToken 的时效是比较久的,因此只要登录一次保存好,之后便可以在支持直接从 Token 登录的网站/软件使用,无需再次登录了

via:如何获取 Pixiv RefreshToken | Himekana's

Github

*更多信息详见 Github 上的 README

先上图

Pixiv 推荐插画
本地数据库查询标签
插画详情页
同步收藏的插画图片到本地
对插画标签进行逻辑回归
使用逻辑回归模型对推荐插画进行打分

  • 该逻辑回归实现比较草率,就图一乐

热门标签(突然发现把 Trending Tag 翻译成趋势标签好蠢)

接下来是介绍

PixivWahu 的目的在于解决p站只能建一个收藏夹的痛点.

围绕「在本地储存插画数据」这个主题, PixivWahu 主要实现了下述功能

在本地数据库文件中储存收藏的插画,精确到页

将数据库中收藏的插画下载到本地储存库,精确到页

浏览 Pixiv 内容,如查看推荐、关注的画师、作品排行等

对本地数据库中插画的标签进行逻辑回归,评估 Pixiv 搜索/推荐/新作

使用 Python 创建命令行接口,扩展功能

PixivWahu 主要基于

aiohttp :异步 HTTP 库

cython :快速创建 Python C 扩展

click :命令行处理

fuzzywuzzy :字符串模糊匹配

vue :前端框架

quasar :前端 UI 库

快速开始

本地功能

前往 Releases · danzou1ge6/pixiv_wahu · GitHub 下载最新的 Relase 中的 Pixivwahu-win64.zip 并解压

解压后找到 PixivWahu.exe ,执行

解压后目录下的部分内容
浏览器窗口会自动打开

Home 页
点击左上角导航抽屉按钮,「本地」一栏中的条目均已可以使用

登录 Pixiv

由于 Pixiv 禁用了用户名和密码的 API ,所以登录只能通过网页端( Pixiv 客户端也是这么干的)但是由于作者又懒又菜,没有去实现内建的登陆页面,而是使用了更好实现的 refresh_token 认证

为了获取认证所需的信息,需要使用浏览器调试工具拦截请求,具体操作详见导航抽屉中的「获取 Refresh Token」页面

这个实现也是从 Pixiv OAuth Flow · GitHub 抄过来的

配置

完成上述步骤后 PixivWahu 已经可以使用(大概(汗

PixivWahu 有一些选项可以自定义,储存在 conf.toml 文件中,是纯文本文件

TOML 配置文件格式参考 TOML:Tom 的(语义)明显、(配置)最小化的语言

配置文件中,「#」开头的行是注释,解释了每个配置项

关于专有词的说明

PixivWahu 的交互界面中可能会出现一些比较难以理解的专有词,如「iid」「插画数据库」「索引缓存区」「access_token」,这是由于 PixivWahu 自动化程度较低,许多中间步骤需要手工操作,且另一方面土气的交互设计会造成较大的认知负担

对于作者认为可能有些难理解的专有词,在 README.md / README.html 中已经有解释。如果还有其他的,欢迎提出修改建议 / 询问

技术探讨与感想

本人没有经过专业的软件工程训练,即使作为业余爱好也没有太多经验

起初,我就是想写一个下载 Pixiv 收藏的工具,于是写了个命令行小工具。后来又发现 Pixiv 只有一个收藏夹,很难分类别收藏,比如「萌图」「有意思的图」「猎奇的图」,于是重新写了另一个命令行小工具。再后来觉得命令行用起来太麻烦,手机上还很难打命令行 (termux) ,所以用前后端分离的设计整了个 WebUI 出来。于是,花了很长一段时间之后,我得到了一坨屎山…

用一坨随时可能崩溃的屎山上p站很难让人咽下这口气,所以,前段时间有空,我又重新着手重构:

首先是采用了基于 Vue 的 Quasar UI 库 ,因为原生 JS + HTML 写起来是真的累;

为了减少低级错误,我采用了 Python 类型标注,并且写了一个转换工具把 Python 类型标注转换成 Typescript ;

为了提高稳定性,我为基础层的模块用 pytest 写了测试;

为了提高开发效率,我设计了一套简单的 RPC 协议,在前端可以通过函数调用的形式和后端联系;

为了提高扩展性,我还提供了使用 click 库 创建命令行工具的接口。

把之前用逻辑回归研究xp的构想实现了,为了减少打包体积我用 Cython 写了一个矩阵运算的实现

但是,尽管我十分注重这个项目的工程性,写到现在的 v0.3 还是写进去了一些我觉得有些难受的代码,比如命令行扩展不得不被挂载到动态的「上下文」中,但按逻辑它应该是静态的;比如模块级配置和实例级配置混用;比如请求图片的 Endpoints 无法和 RPC 的 Endpoints 统一起来;前端里也有很多逻辑混乱的代码。

当然,我发布这个项目是因为我认为它已经相对完善了。但是不完善之处也肯定还有很多,希望有大佬不吝赐教。