吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2203|回复: 19
上一主题 下一主题
收起左侧

[Python] typora使用CSDN图床

  [复制链接]
跳转到指定楼层
楼主
wshuo 发表于 2021-11-3 04:12 回帖奖励

前言

软件下载地址

typora 是一款好用的 markdown 文档编辑器。

我之前研究过CSDN上传图片的接口,前几天发现了Typora 这个好用的软件,可以自定义图床,因为我很多文章图片资源用的都是CSDN,那么我就可以采用CSDN作为图床,直接就实现拖拽图片上传的CSDN。  

需要的环境

python3

requests

requests-toolbelt

代码

import os
import sys

os.chdir(os.path.dirname(os.path.realpath(sys.executable))) #这是打包版本的代码

import requests
import re
from threading import Thread
import time
import requests
import http.cookiejar as cookielib
import psutil
import os
from requests_toolbelt import MultipartEncoder

requests.packages.urllib3.disable_warnings()

def is_login():
    session = requests.session()
    try:
        session.cookies = cookielib.LWPCookieJar(filename='.cookie/csdn.txt')
        session.cookies.load()

        url = 'https://me.csdn.net/api/user/show'
        response = session.post(url)
        if response.json()['message'] == "成功":
            return True
        else:
            return False
    except Exception as e:
        return False

def login():
    session = requests.session()
    session.cookies = cookielib.LWPCookieJar(filename='.cookie/csdn.txt')
    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
    imgData = session.get(img_url).content
    with open("qrcode.jpg","wb") as f:
        f.write(imgData)
    os.popen("qrcode.jpg")

    uuid = uuid.split('/')[-1]
    url = 'https://long.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() == "dllhost.exe":  
                        proc.kill()  # 关闭该process
                except Exception as e:
                    pass
            break
        time.sleep(1)

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

def updatePicture(picList):
    for pic in picList:
        session = requests.session()
        session.cookies = cookielib.LWPCookieJar(filename='.cookie/csdn.txt')
        session.cookies.load()
        fields = {
        'file':(os.path.basename(pic),open(pic,'rb'),"image/jpeg"),
        }
        m = MultipartEncoder(fields, boundary='------WebKitFormBoundarynTBa3OWoSMrcVf0F')
        headers = {
            'content-Type': m.content_type,
        }
        url = 'https://blog-console-api.csdn.net/v1/upload/img?shuiyin=2'
        res = session.post(url, headers=headers, data=m,verify=False)
        print(res.json()["data"]["url"])

if __name__ == '__main__':
    if not os.path.exists(".cookie"):
        os.mkdir(".cookie")
    if not os.path.exists(os.path.join(".cookie","csdn.txt")):
        with open(os.path.join(".cookie","csdn.txt"),"w") as f:
            f.write("")

    if not is_login():
        login()
    updatePicture(sys.argv[1:])

说明

os.chdir(os.path.dirname(os.path.realpath(sys.executable)))

这句是为了获取打包后的真实exe所在路径(因为否则会获取到临时路径,而cookie也会存到临时路径里导致每次都要登录),如果是单独脚本运行可以将其改为:

os.chdir(os.path.dirname(os.path.abspath(__file__)))

脚本运行配置

image-20211103035605073

D:\Python36\python.exe D:\software\Typora\upload.py

exe运行配置

image-20211103035406067

D:\software\Typora\upload.exe

其它

正常来说第一次登录是需要微信扫码登录的,登录成功会自动保存cookie, 并且关闭二维码显示,如果没有关闭说明你显示图片的进程不是"dllhost.exe",可以自己修改一下,我是win7的系统,命令行调用图片就是这个进程。

另外我发现一个typora 的问题,不知道是不是bug,每次会将启动位置作为当前环境变量,这也是我为什么写成绝对路径的原因,因为你不能保证markdown文件在哪个路径,解决办法就是写成绝对路径。

免费评分

参与人数 9吾爱币 +10 热心值 +9 收起 理由
Smiling_Mask + 1 + 1 谢谢@Thanks!
vethenc + 2 + 1 谢谢@Thanks!有其他图床更好!
lyl610abc + 1 + 1 CSDN 这玩意儿... 还是算了吧
dgy + 1 我很赞同!
leqaq + 2 + 1 我很赞同!
caidesi520 + 1 + 1 用心讨论,共获提升!
yjn866y + 1 + 1 我很赞同!
柒呀柒 + 1 + 1 谢谢@Thanks!
lingyinGR + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

推荐
美柚明治 发表于 2022-1-18 22:35
楼主你好,你这个想法很棒,但是貌似程序执行不了。我自己查看了一下,貌似接口都发生了改变。时间21年1月18日
推荐
jetranger 发表于 2021-11-3 10:25
typro开源了吗?这个思路不错,还可以利用别的图床,但是一般MD文件宁愿保存在本地。
沙发
lingyinGR 发表于 2021-11-3 05:58
3#
柒呀柒 发表于 2021-11-3 08:16
先mark了! 谢谢楼主
4#
WoShiXXX 发表于 2021-11-3 08:17
requests貌似import了两次?
5#
52896009 发表于 2021-11-3 08:51



太顶了,完全看不懂
6#
songxp03 发表于 2021-11-3 08:55
CSDN那个尿性,迟早限流
7#
smilencetion 发表于 2021-11-3 09:11
typora并没有开源
8#
chentest 发表于 2021-11-3 09:20
学习一下
9#
知心 发表于 2021-11-3 09:22

不开源不影响使用啊
10#
你是我的人 发表于 2021-11-3 09:26
好东西啊,感谢感谢
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2022-9-25 19:13

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表