首页 > 其他分享 >基于CSDN搭建Typora免费图床

基于CSDN搭建Typora免费图床

时间:2023-04-11 12:15:08浏览次数:44  
标签:image Typora 图床 session CSDN csdn import requests

title: 基于CSDN搭建Typora免费图床
date: 2023-04-10 17:11:42
categories: 小技能
tags: 
- Typora
- CSDN
- 免费图床

本地需要有python3环境

按照 requestspsutilrequests-toolbelt 依赖,若已安装可忽略

pip install requests
pip install psutil
pip install requests-toolbelt

image-20230410172811214

复制以下代码到一个.py的文件中,如我本地命名为 upd_pic_to_csdn.py

# -*- coding: UTF-8 -*-
'''
@文件        :csdnUpload.py
@时间        :2022/11/24 12:48:46
@作者        :tx
@版本        :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"
        response = session.get(url)
        key = response.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__":

    # session.proxies = {"http": "http://127.0.0.1:8080",
    #                    "https": "http://127.0.0.1:8080"}
    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:])



打开Typora 文件 =》 偏好设置 =》图像 设置界面,按照下图所示进行配置

image-20230410172945466

注意修改命令中的python文件所在目录位置

python D:\Files\Typora\upd_pic_to_csdn.py

设置好后点击验证图片上传选项进行验证服务是否正常

首次执行命令会弹出微信扫码登录的二维码,扫描登录即可

查看验证结果

image-20230410171816256

注意

图片有违规校验,例如二维码

image-20230410174011489

原文地址

typora使用CSDN图床

标签:image,Typora,图床,session,CSDN,csdn,import,requests
From: https://www.cnblogs.com/an-shiguang/p/17305788.html

相关文章

  • 基于博客园搭建Typora免费图床
    title:基于博客园搭建Typora免费图床date:2023-04-1016:10:59categories:小技能tags:-免费图床-博客园-Typora本地需要有python3环境,复制以下代码到一个.py的文件中,如我本地命名为upd_pic_to_cnblog.pyimportosimportsysimportxmlrpc.clientasclientimp......
  • Typora怎么自动给标题编号
    效果展示使用开源项目:https://github.com/lipengzhou/typora-theme-auto-numbering替换主题文件夹里面的css就行了!......
  • Typora免费激活教程
    介绍Typora是一款基于Markdown的可视化文本编辑器,它可以让您在编辑Markdown文本时立即查看它的实际渲染效果,这样您就可以更轻松、更快速的进行文本编辑。Typora的界面简洁、直观,它拥有众多强大的功能,比如可视化超链接、快捷键支持、全平台支持等,可以让您更有效率地编辑文本,提高文......
  • 从百度搜索结果列表里点击 CSDN 博客时 url 参数的含义
    我在百度里根据某关键字搜索后,在结果列表里找到CSDN某篇博客,点击之后,进入博客页面,注意到地址栏里的url很长:https://blog.csdn.net/i042416/article/details/117606987?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168086484016800182795826%2522%252C%2522scm%......
  • Typora入门笔记-2023-04-08
    Typora入门笔记-2023.4.081-6个#号代表标题的大小,井号越多标题越小字体holleworld!hello,worldHELLO,WORLDHELLO,WORLD引用选择狂神说Java,走向人生巅峰选择狂神说Java,走向人生巅峰选择狂神说Java,走向人生巅峰图片超链接点击跳转到狂神博客列表ABCAB......
  • typora+腾讯云cos+Picgo图床搭建
    typora-copy-images-to:uploadtypora+腾讯云cos+Picgo图床搭建typora上传图片自动转换为网络每次上传博客文章的时候你是不是很苦恼复制的图片都是本地地址,然后咋博客平台上显示不出来图片。为什么不用gitee搭建因为现在gitee官方已经不让图床了解决办法:​ 搭建图床使图......
  • 续:python 新环境的创建并在 spyder 中转换 - 如何解决转换环境时报错:invalid file pat
    原文地址blog.csdn.net目录重点问题描述解决方法各种尝试最终灵感重点不想看全文的直接看这里,不要安装一个和已有python环境一样版本的python(这里的一样指的是完全一样,比如都是python2.7.15),如果已有python2.7.15,可以创建python2.7.18的环境并在spyder中转换。如......
  • CSDN粘贴图片自动上传到服务器(Java版)
    ​ 如何做到ueditor批量上传word图片?1、前端引用代码<!DOCTYPE html PUBLIC "-//W3C//DTDXHTML1.0Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>......
  • Typora配置PicGo时,提示Failed to fetch
    两者配置的端口不一致造成的打开Typora,选择文件-偏好设置-图像-验证图片上传选项,点击验证图片上传选项会提示错误:Failedtofetch,此时可以发现typora中设置的上传端口为366771.先检查监听端口是否一致打开PigGo,选择PicGo设置-设置server,会发现监听端口为36678修改监听接口......
  • Typora软件基本实用语法
    一、代码块```(即键盘上ESC按键的下面那个符号)后面跟上你的程序语言后缀,就能实现代码块的插入(例如:```c```java```php等)实例publicvoidtest(){System.out.println("HelloWorld!");}```java显示灰色代码块之后再输入代码内容二、各级标题#后面空一格,再加上标题......