gupingan / khs-pyside6

基于 PySide6 和 xhs-api 所开发的某书自动化工具
MIT License
41 stars 11 forks source link

About Donate #20

Open gupingan opened 3 weeks ago

gupingan commented 3 weeks ago

关于自助打赏

最初开发某红薯的 Web 全接口时,我秉持开源精神,希望为社区做出贡献。然而,现实情况比预想的更为复杂:工作环境日益严峻,官方的严格管控,以及频繁更新的密钥和算法,都给维护工作带来了巨大挑战。

免费共享接口虽然降低了入门门槛,但也导致了过度使用和滥用的问题。考虑到长期维护的成本和价值,我决定采用适度的打赏模式。与市面上动辄99元、128元,甚至单接口几百元的收费相比,打赏的起步价仅为20元,相当于一顿简餐的价格。这不仅是对我作品的认可,也是确保项目可持续发展的必要措施。

打赏选项:

档位 价格(元) 内容 特点
Y档 ≥20 y-xhs接口包(仓库邀请) • 需要Node.js环境和sdev-jsdom依赖
X档 ≥50 x-xhs接口包(仓库邀请) • 纯算法实现
• 无需额外Node.js环境
Y+档 ≥120 • y-xhs接口包(仓库邀请)
• y-xhs源码(邮件发送)
• 需要Node.js环境和sdev-jsdom依赖
• 包含完整源代码
X+档 ≥150 • x-xhs接口包(仓库邀请)
• x-xhs源码(邮件发送)
• 纯算法实现
• 无需额外Node.js环境
• 包含完整源代码
Z档 ≥180 • x-xhs接口包(仓库邀请)
• 附赠:昆仑红书
• 包含x-xhs接口包
• 附赠基于Electron + Vue 3开发的分布式采集软件
Z+档 ≥210 • x-xhs接口包(仓库邀请)
• x-xhs源码(邮件发送)
• 附赠:昆仑红书
• 包含x-xhs接口包
• 附赠基于Electron + Vue 3开发的分布式采集软件
• 包含x-xhs源代码

注意事项:

  1. 所有档位均为一次性付费,无额外或长期收费。
  2. 打赏时请在备注中注明所选档位和GitHub绑定的邮箱地址。
  3. 如需更正邮箱,请重新捐赠0.1元并附上正确邮箱。
  4. 备注过长的情况,请通过打赏的消息通道私聊我。
  5. 作者会尽力维护更新,能力非无限不保证永久支持。

QrCode

1. zf宝打赏码

zfb_money

2. wx打赏码

由于 wechat 的限制,如果选择 Z+ 档位的等金额超过 200 的情况,请务必分两次打赏,备注要一样!

wx_money

yuxing719 commented 1 week ago

请问这个X档是有接口吗?我能用请求接口得形式来制作web项目吗?

gupingan commented 1 week ago

请问这个X档是有接口吗?我能用请求接口得形式来制作web项目吗?

你是要 后端的那种接口?

yuxing719 commented 1 week ago

是得

gupingan commented 1 week ago

是得

没有直接的写后端的接口,x-xhs是提供给上层程序员开发的,比如直接使用或者封装后端,我给你看看简单的调用方式吧 截图_20240912163631 如果你是其他语言编写的,比如web前端的话,的确需要后端,你可以基于 flask 集成下方的是我基于 flask 和 x-xhs 写的接口,但是不全,而且是给老板定制过的,你需要根据你自己的需求封装,仅供参考

import xhs
import random
import typing as t
from flask import Flask, request, jsonify
from flask_cors import CORS

b1 = '任意浏览器指纹,红薯提取而来'
api_pool: t.Dict[str, xhs.API] = {}
app = Flask(__name__)
CORS(app, resources={r"/api/*": {
    "methods": ["GET", "POST", "OPTIONS"],  # 允许的方法
    "allow_headers": ["Content-Type", "Authorization", "Cookie"],  # 允许的头
    "supports_credentials": True  # 允许凭证(cookies)
}})

def get_api(uid: str = None):
    if not uid:
        api = xhs.API().set_id(b1)
        if uid:
            api_pool[uid] = api
        return api
    return api_pool.get(uid, None)

@app.route('/api/v1/get_uid', methods=['GET', 'POST', 'OPTIONS'])
def get_uid():
    uids = ['5d56a1060000000001019916', '5e2d08d800000000010001dd', '66599cb600000000030324c0']
    uid = random.choice(uids)
    return jsonify({
        'code': 200,
        'data': {
            'uid': uid
        },
        'msg': '获取成功'
    })

@app.route('/api/v1/create_qrcode', methods=['POST', 'OPTIONS'])
def create_qrcode():
    if request.method == 'OPTIONS':
        return '', 204

    data = request.json
    cookies = data.get('cookies', '')

    api = get_api()
    api.set_cookies(cookies)

    response = api.create_qrcode()
    return jsonify(response)

@app.route('/api/v1/qrcode_status', methods=['POST', 'OPTIONS'])
def qrcode_status():
    if request.method == 'OPTIONS':
        return '', 204

    data = request.json
    cookies = data.get('cookies', '')
    qr_id = data.get('qr_id', '')
    code = data.get('code', '')

    api = get_api()
    api.set_cookies(cookies)

    response = api.qrcode_status(qr_id, code)
    return response

@app.route('/api/v1/user_selfinfo', methods=['POST', 'OPTIONS'])
def user_selfinfo():
    if request.method == 'OPTIONS':
        return '', 204

    data = request.json
    cookies = data.get('cookies', '')

    api = get_api()
    api.set_cookies(cookies)

    response = api.user_selfinfo()
    return response

@app.route('/api/v1/user_me', methods=['POST', 'OPTIONS'])
def user_me():
    if request.method == 'OPTIONS':
        return '', 204

    data = request.json
    cookies = data.get('cookies', '')

    api = get_api()
    api.set_cookies(cookies)

    response = api.user_me()
    return response

@app.route('/api/v1/follow_user', methods=['POST', 'OPTIONS'])
def follow_user():
    if request.method == 'OPTIONS':
        return '', 204

    data = request.json
    cookies = data.get('cookies', '')
    target_user_id = data.get('target_user_id', '')
    protocol = data.get('protocol', '')
    proxy = data.get('proxy', '')
    proxy_username = data.get('proxy_username', '')
    proxy_password = data.get('proxy_password', '')

    api = get_api()
    api.set_cookies(cookies)

    if protocol and proxy:
        if proxy_username and proxy_password:
            proxy_url = f'{protocol}://{proxy_username}:{proxy_password}@{proxy}'
        else:
            proxy_url = f'{protocol}://{proxy}'
        api.set_proxies(http=proxy_url, https=proxy_url)

    response = api.follow_user(target_user_id)
    return response

@app.errorhandler(Exception)
def handle_exception(e):
    app.logger.error(f"An error occurred: {str(e)}")
    return jsonify({
        'msg': 'failure',
        'success': False,
        'data': {},
        'code': -1
    }), 500

if __name__ == '__main__':
    app.run('0.0.0.0', 6567, debug=True)
16892434 commented 1 week ago

@gupingan

问两个问题:

  1. Z档包含源码吗?
  2. Z档那个客户端软件应该是支持mac的吧?
gupingan commented 1 week ago

@gupingan

问两个问题:

  1. Z档包含源码吗?
  2. Z档那个客户端软件应该是支持mac的吧?

Z 档不包含源码 Electron 应用理论上可以支持 MacOS,不过我这边用的人都是 win,推荐还是 Windows 最佳

markmle commented 5 days ago

请问, 我想要Z档,X档的源码,Y档的源码 ,应该怎么donate呢?

gupingan commented 5 days ago

请问, 我想要Z档,X档的源码,Y档的源码 ,应该怎么donate呢?

稍等发你

markmle commented 5 days ago

请问, 我想要Z档,X档的源码,Y档的源码 ,应该怎么donate呢?

稍等发你

okk,我已经donate了一个z档, 先体验一下~

gupingan commented 5 days ago

请问, 我想要Z档,X档的源码,Y档的源码 ,应该怎么donate呢?

稍等发你

okk,我已经donate了一个z档, 先体验一下~

已发送,x-xhs 和 y-xhs 的源码算送你的,Z 档本来不含源码,昆仑红书源码不售卖,抱歉哈,版本云盘链接发你邮箱了的

markmle commented 5 days ago

请问, 我想要Z档,X档的源码,Y档的源码 ,应该怎么donate呢?

稍等发你

okk,我已经donate了一个z档, 先体验一下~

已发送,x-xhs 和 y-xhs 的源码算送你的,Z 档本来不含源码,昆仑红书源码不售卖,抱歉哈,版本云盘链接发你邮箱了的

已收到, 已运行,好强大,力赞!

markmle commented 4 days ago

请问, 我想要Z档,X档的源码,Y档的源码 ,应该怎么donate呢?

稍等发你

okk,我已经donate了一个z档, 先体验一下~

已发送,x-xhs 和 y-xhs 的源码算送你的,Z 档本来不含源码,昆仑红书源码不售卖,抱歉哈,版本云盘链接发你邮箱了的

大佬好, 太赞了, 忍不住又donate了一点点. 求y-xhs 接口包,node及打包配置文件,我自己没编出来... 运行时说找不到sdenv-jsdom

gupingan commented 4 days ago

请问, 我想要Z档,X档的源码,Y档的源码 ,应该怎么donate呢?

稍等发你

okk,我已经donate了一个z档, 先体验一下~

已发送,x-xhs 和 y-xhs 的源码算送你的,Z 档本来不含源码,昆仑红书源码不售卖,抱歉哈,版本云盘链接发你邮箱了的

大佬好, 太赞了, 忍不住又donate了一点点. 求y-xhs 接口包,node及打包配置文件,我自己没编出来... 运行时说找不到sdenv-jsdom

拉你进 y-xhs 仓库了,看一下 README

16892434 commented 1 day ago

请问, 我想要Z档,X档的源码,Y档的源码 ,应该怎么donate呢?

稍等发你

okk,我已经donate了一个z档, 先体验一下~

已发送,x-xhs 和 y-xhs 的源码算送你的,Z 档本来不含源码,昆仑红书源码不售卖,抱歉哈,版本云盘链接发你邮箱了的

大佬,这福利还有吗? 已打赏Z档(备注那里,邮箱少了.com,太长了,写不了)

gupingan commented 1 day ago

16892434

已发送,看一下邮件

16892434 commented 1 day ago

16892434

已发送,看一下邮件

已收到,感谢!