利用简书图片上传功能搭建快速免费的图床

关键代码:

cookie:简书登录之后的 cookie
filepath:要上传图片的绝对路径,同目录下可直接使用名字
filename:要上传图片的名字(随意取)

def uploadImage(cookie, filepath, filename):
    upload_url = 'https://upload.qiniup.com/'
    token_url = 'https://www.jianshu.com/upload_images/token.json?filename={}'.format(filename)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36',
        'Cookie': cookie,
    }

    response = requests.get(token_url, headers=headers)
    response.encoding = response.apparent_encoding
    token_and_key = json.loads(response.text)

    with open(filepath, 'rb') as file:
        files = {
            'file': (filename, file),
            'token': (None, token_and_key['token']),
            'key': (None, token_and_key['key']),
        }
        response = requests.post(upload_url, headers=headers, files=files)
        response.encoding = response.apparent_encoding
        return json.loads(response.text)['url']

PyQt4封装后的代码:

与脚本同目录下创建一个名为 config的文件(没有后缀名),用文本编辑器打开(别用记事本,如果用记事本打开并保存过请删除重建),将简书登录后的 cookie直接粘贴进去(不需要多余的字符,只要 cookie就行)
代码附上:

#-*- coding: utf-8 -*
__author__ = 'geebos'
from PyQt4.QtCore import *
from PyQt4.QtGui import *
import requests
import json
import sys


class UploadBox(QDialog):
    def __init__(self):
        QDialog.__init__(self)

        layout = QVBoxLayout()

        self.data = {}
        self.cookie  = self.getCookie().strip()

        self.location_lable = QLabel("图片位置:")
        self.url_lable = QLabel("图片链接:")
        self.show_path = QLineEdit()
        self.show_result = QTextBrowser()
        self.select_button = QPushButton("选择图片")
        self.comfir_button = QPushButton("确认上传")

        layout.addWidget(self.location_lable)
        layout.addWidget(self.show_path)
        layout.addWidget(self.url_lable)
        layout.addWidget(self.show_result)
        layout.addWidget(self.select_button)
        layout.addWidget(self.comfir_button)

        self.setWindowTitle("图片上传")
        self.setLayout(layout)

        self.select_button.clicked.connect(self.selectFile)
        self.comfir_button.clicked.connect(self.uploadImage)

    def getCookie(self):
        try:
            with open('config', 'r') as f:
                return f.readline()
        except Exception:
            QMessageBox.warning(self, "提示", "配置文件 config出错")

    def selectFile(self):
        filepath = QFileDialog.getOpenFileName(self, caption="选择图片", directory='.', filter="ALL FILES (*.*)")
        self.show_path.setText(filepath)
        self.data['filepath'] = filepath

    def uploadImage(self):
        if 'filepath' in self.data:
            filepath = self.data['filepath']
            filename = filepath.split('/')[-1]
            print(filename)
        else:
            return

        upload_url = 'https://upload.qiniup.com/'
        token_url = 'https://www.jianshu.com/upload_images/token.json?filename={}'.format(filename)
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Safari/537.36',
            'Cookie': self.cookie,
        }

        response = requests.get(token_url, headers=headers)
        response.encoding = response.apparent_encoding
        token_and_key = json.loads(response.text)

        if 'token' not in token_and_key:
            self.show_result.clear()
            QMessageBox.warning(self, "提示", "格式错误,请选择图片")
            return

        with open(filepath, 'rb') as file:
            files = {
                'file': (filename, file), 'token': (None, token_and_key['token']), 'key': (None, token_and_key['key']),
            }
            response = requests.post(upload_url, headers=headers, files=files)
            response.encoding = response.apparent_encoding
            result = json.loads(response.text)

            if 'url' in result:
                self.show_result.clear()
                self.show_result.append(result['url'])
            else:
                self.show_result.clear()
                QMessageBox.Information(self, "提示", "上传失败,请检查 cookie是否有效")


app = QApplication(sys.argv)
dialog = UploadBox()
dialog.show()
app.exec_()

pyinstaller生成的可执行文件:

使用方法同脚本:
https://pan.baidu.com/s/1qFdVcttwZdRS97jFgXpKTA
更多干货请关注简书账号:python爬虫猫
关注并私信我,送100gb python学习资源哦

Spring Cloud是一个基于Spring Boot的微服务框架,该框架主要用于快速搭建和管理分布式系统中的微服务架构。下面我将以简书为例,简要介绍Spring Cloud微服务框架的搭建过程。 1. 创建Spring Boot项目:首先,我们需要创建一个Spring Boot项目作为微服务的基础。可以通过Spring Initializr来快速创建一个Spring Boot项目,选择相应的依赖,如Spring Web、Eureka Discovery等。 2. 配置服务注册中心:在Spring Cloud中,Eureka被广泛用作服务注册和发现的中心。在项目的配置文件中,添加Eureka的配置,指定注册中心的地址。 3. 创建微服务:在项目中,创建需要的微服务模块,例如用户服务、文章服务、评论服务等。每个微服务都是一个独立的Spring Boot应用,可以独立运行和部署。 4. 配置服务间的通信:微服务之间需要进行通信,可以使用Spring Cloud提供的Feign或RestTemplate来实现。在服务之间的API接口中,通过注解的方式定义接口,使得服务之间的调用更加简洁。 5. 配置服务网关:为了统一管理微服务接口的访问和安全,可以使用Spring Cloud Gateway作为服务网关。通过配置路由规则和过滤器,对外暴露统一的API接口。 6. 配置服务熔断与降级:在分布式系统中,不可避免地会遇到服务不可用或故障的情况。可以使用Spring Cloud提供的Hystrix进行熔断和降级处理,保证系统的稳定性。 7. 配置服务监控与追踪:为了对微服务进行监控和追踪,可以使用Spring Cloud提供的Actuator和Sleuth。Actuator可以暴露微服务的运行指标,Sleuth可以追踪微服务之间的调用链路。 8. 部署与管理:最后,将各个微服务打包成独立的Docker镜像,并通过Docker容器技术进行部署。使用Kubernetes、Docker Swarm或者Mesos等容器管理工具,可以更好地管理和扩展微服务集群。 以上是简要的Spring Cloud微服务框架搭建过程,通过这个框架,可以实现高可用、弹性、可伸缩的分布式系统架构,帮助开发者更快速地构建和管理微服务应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值