【Typora】基于python3实现CSDN图床

这篇具有很好参考价值的文章主要介绍了【Typora】基于python3实现CSDN图床。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

技术背景

写博客既想在typora这款软件上写,又想将图片传到云上。之前也使用过Github + Picgo + Typora实现

  • 访问传送门:https://github.com/al6nlee/Picture

核心代码

基于python3实现实时上传图片到CSDN上

# -*- coding: UTF-8 -*-
'''
@文件        :csdnUpload.py
@时间        :2023/3/30 23:48:46
@作者        :Alan
@版本        :2.0
@说明        :Typora利用csdn作为图床
'''
from __future__ import print_function
import random
from io import BytesIO
import sys
from PIL import Image
import os
from threading import Thread
import psutil
import re
import requests
import http.cookiejar as cookielib
import time
import requests
from requests_toolbelt import MultipartEncoder
import ctypes

os.chdir(os.path.expanduser('~'))  # 这是打包版本的代码
requests.packages.urllib3.disable_warnings()
session = requests.session()


class show_code(Thread):
    def __init__(self, url):
        Thread.__init__(self)
        self.url = url

    def run(self):
        response = requests.get(self.url)
        img = Image.open(BytesIO(response.content))  # 打开图片,返回PIL image对象
        img.show()


def IsLogin():
    '''
    文件读取cookie,检测cookie是否合法。
    '''
    try:
        session.cookies = cookielib.LWPCookieJar(filename=".cookie/csdn.txt")
        session.cookies.load()

        # 修改地方
        url = "https://imgservice.csdn.net/direct/v1.0/image/upload?type=blog&rtype=markdown&x-image-template=&x-image-app=direct_blog&x-image-dir=direct&x-image-suffix=png"
        response = session.get(url)
        if response.json()['msg'] == "success":
            return True
        else:
            return False
    except Exception as e:
        return False


def Login():
    '''
    csdn自动登录,同时保存cookie
    '''
    response = session.get(
        'https://open.weixin.qq.com/connect/qrconnect?appid=wx0ae11b6a28b4b9fc&scope=snsapi_login&redirect_uri=https%3A%2F%2Fpassport.csdn.net%2Fv1%2Fregister%2FpcAuthCallBack%3FpcAuthType%3Dweixin&state=csdn&login_type=jssdk&self_redirect=default&style=white&href=https://csdnimg.cn/release/passport/history/css/replace-wx-style.css',
        verify=False)
    uuid = re.findall(
        '<img class="qrcode lightBorder" src="(.*?)"', response.text)[0]
    img_url = 'https://open.weixin.qq.com' + uuid
    t = show_code(img_url)
    t.start()
    t.join()

    uuid = uuid.split('/')[-1]
    url = 'https://lp.open.weixin.qq.com/connect/l/qrconnect?uuid=' + uuid
    while True:
        response = session.get(url, verify=False)
        code = re.findall("window.wx_code='(.*?)'", response.text)
        if code != ['']:
            for proc in psutil.process_iter():  # 遍历当前process
                try:
                    if proc.name() == "Microsoft.Photos.exe":
                        proc.kill()  # 关闭该process
                except Exception as e:
                    pass
            break
        time.sleep(0.5)

    url = 'https://passport.csdn.net/v1/register/pcAuthCallBack?pcAuthType=weixin&code=%s&state=csdn' % code[0]
    session.get(url)
    session.cookies.save()
    IsLogin()


def UploadPic(picList: list):
    '''
    图片上传
    '''

    for pic in picList:
        # 获得图片授权
        url = "https://imgservice.csdn.net/direct/v1.0/image/upload?type=blog&rtype=markdown&x-image-template=&x-image-app=direct_blog&x-image-dir=direct&x-image-suffix=png"
        resopnse = session.get(url)
        key = resopnse.json()['data']
        upload_url = key['host']
        fields = {
            'key': key['filePath'],
            'policy': key['policy'],
            "OSSAccessKeyId": key['accessId'],
            "success_action_status": "200",
            "signature": key['signature'],
            "callback": key['callbackUrl'],
            'file': (os.path.basename(pic), open(pic, 'rb'), "image/png"),
        }
        multipart_encoder = MultipartEncoder(
            fields, boundary='-----------------------------' + str(random.randint(1e28, 1e29 - 1)))
        headers = {
            'content-Type': multipart_encoder.content_type,
        }
        res = requests.post(upload_url, headers=headers,
                            data=multipart_encoder, verify=False)
        if (res.status_code == 200):
            print(res.json()['data']['imageUrl'])


if __name__ == "__main__":
    if not os.path.exists(".cookie"):
        os.mkdir(".cookie")
    if not os.path.exists(os.path.join(".cookie", "csdn.txt")):
        tmep_f = open(os.path.join(".cookie", "csdn.txt"), 'w+')
        tmep_f.close()
    if not IsLogin():
        Login()
    UploadPic(sys.argv[1:])

安装依赖包

  • pip3 install Pillow
  • pip3 install requests
  • pip3 install requests_toolbelt
  • pip3 install psutil
    pip3 install Pillow requests requests_toolbelt psutil -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com
    

代码解释

  • UploadPic函数上传图片水印:x-image-template

Typora偏好设置

【Typora】基于python3实现CSDN图床

效果演示

【Typora】基于python3实现CSDN图床






















文章的段落全是代码块包裹的, 留言0是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言1是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言2是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言3是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言4是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言5是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言6是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言7是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言8是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言9是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言10是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言11是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言12是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言13是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言14是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言15是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言16是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言17是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言18是为了避免文章提示质量低.
文章的段落全是代码块包裹的, 留言19是为了避免文章提示质量低.文章来源地址https://www.toymoban.com/news/detail-415474.html

到了这里,关于【Typora】基于python3实现CSDN图床的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Typora 图床教程(阿里云版)

    由于码云现在需要登录才能看到相关图片文件后,导致我们已经不能愉快的使用它作为图床了,所以我们需要使用其他工具来作为图床使用了,本文使用阿里云OSS作为Typora的图床。 阿里云OSS相较于其他几个方法来说最大的优点就是稳定了,唯一的缺点就是需要我们花费点启动

    2024年02月16日
    浏览(39)
  • Typora + PicGo + GitHub搭建图床

    这一步自行百度 PicGo is Here | PicGo 自行下载安即可 gitHub注册略过,如果不能访问请科学上网 创建仓库 生成访问token 点击右上角头像 - setting - 点击左边最下面Developer settings - Personal access tokens - Tokens(classic) -Generate new token(classic) 点击最下面生成token **设置仓库名:**用户名 + 刚

    2024年01月22日
    浏览(44)
  • picGo+gitee+typora设置图床

    当我了解picGo+gitee可以设置图床的时候,我决定试一试。 考虑github国外网站比较慢,我使用的是gitee进行部署。 如果是个人博客需要考虑设备外链,有可能图片显示不成功。 PicGo官方网址 以上有配置说明 百度网盘链接:https://pan.baidu.com/s/1MHxXIOVRiAZqiPJv6jydxw?pwd=8888 提取码:8

    2024年02月11日
    浏览(52)
  • GitHub图床&Typora&PicGo相关配置

    本文作者: slience_me 关于Typora旧版的百度网盘下载路径 链接:https://pan.baidu.com/s/12mq-dMqWnRRoreGo4MTbKg?pwd=oq22 提取码:oq22 如果有不妥,请及时联系我,电子邮件:slienceme520@gmail.com 我将下载链接删除 创建一个图片仓库 进入设置 点击开发者设置 点击Token 用新出的这个 设置部分内

    2024年01月24日
    浏览(42)
  • gitee+picgo+typora图床搭建

    gitee+picgo+typora图床搭建 1.安装typora 官网下载直接安装:https://www.typora.io/#download 2.编辑typora图像设置 打开 文件 - 偏好设置 - 图像 设置 插入图片时 选择 上传图片 设置 上传服务 为 PicGo-Core(command line) 3.为typora安装PicGo-Core 点击按钮 下载或更新 , PicGo-Core 会自动安装到 Typora 安

    2024年02月03日
    浏览(43)
  • Typora设置Gitee图床,自动上传图片

    之前写了一篇同类型文章:如何将Typora中图片上传到csdn 实现了Typora本地编辑的内容中的图片,可以直接复制到csdn上进行发布。但是在使用过程中发现 sm.ms 这个图床站不是很稳定,即使用了翻墙也不稳定。 这篇文章推荐使用Gitee作为图床,上传速度实测挺给力。 下载地址:

    2024年02月16日
    浏览(48)
  • 【开源图床】使用Typora+PicGo+Github+CDN搭建个人博客图床

    准备工作: 首先电脑得提前完成安装如下: 1. nodejs环境(node ,npm):【安装指南】nodejs下载、安装与配置详细教程 2. Picgo:【安装指南】图床神器之Picgo下载、安装与配置详细教程 3. Typora:【安装指南】markdown神器之Typora下载、安装与无限使用详细教程 工具介绍: typora: Markdown工

    2024年02月20日
    浏览(50)
  • 使用Typora+PicGo+阿里云搭建图床

    不知道大家有没有遇到过这样的问题? 在使用Typora的时候,我们传到typora上面的图片,在转到其他地方时,总是加载不出来,造成图片丢失现象或者是在将markdown笔记上传到博客时,总是需要一张一张上传图片,这难免太浪费时间,如果可以将图片转成url链接就可以在随处访

    2024年02月08日
    浏览(64)
  • 腾讯云+PicGo+Typora图床,生成专属图片链接

    原创声明,转载请注明文章链接来源、作者信息 Typora+PicGo+gitHub搭建自己的图床,写作效率大大提升 索奇问答 问:图床是什么? 答:用户可以将图片上传到图床,然后将生成的图片链接贴到论坛或网站中,这样其他人就可以通过链接查看图片,对做笔记、写文章等都方便快

    2024年02月10日
    浏览(50)
  • 阿里云OSS+PicGo+Typora配置图床

    阿里云OSS + PicGo + Typora搭建图床 1.为什么要搭建图床? 首先要明确:在本地的markdown文件.md中,图片是以 ‘外链’ 的形式存在的 在office word中,图片是直接插入docx文件里面 Markdown中,图片只是一个本地/联网的地址 会出现的问题有: 也就是说,如果我们使用 本地markdown编译

    2024年04月16日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包