查看: 529|回复: 1

[其他发布] typora使用CSDN图床一款好用的 markdown 文档编辑器,而且开源

[复制链接]
发表于 2021-11-3 11:15 | 显示全部楼层 |阅读模式
Rizh 2021-11-3 11:15 529 1 显示全部楼层
前言
软件下载地址:https://wshuo.lanzoui.com/i7yWVw2w7jc
typora 是一款好用的 markdown 文档编辑器,而且开源。
我之前研究过CSDN上传图片的接口,前几天发现了Typora 这个好用的软件,可以自定义图床,因为我很多文章图片资源用的都是CSDN,那么我就可以采用CSDN作为图床,直接就实现拖拽图片上传的CSDN。  
需要的环境
python3
requests
requests-toolbelt
代码
  1. import os
  2. import sys

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

  4. import requests
  5. import re
  6. from threading import Thread
  7. import time
  8. import requests
  9. import http.cookiejar as cookielib
  10. import psutil
  11. import os
  12. from requests_toolbelt import MultipartEncoder

  13. requests.packages.urllib3.disable_warnings()

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

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

  27. def login():
  28.     session = requests.session()
  29.     session.cookies = cookielib.LWPCookieJar(filename='.cookie/csdn.txt')
  30.     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)
  31.     uuid = re.findall('<img class="qrcode lightBorder" src="(.*?)" />',response.text)[0]
  32.     img_url = 'https://open.weixin.qq.com' + uuid
  33.     imgData = session.get(img_url).content
  34.     with open("qrcode.jpg","wb") as f:
  35.         f.write(imgData)
  36.     os.popen("qrcode.jpg")

  37.     uuid = uuid.split('/')[-1]
  38.     url = 'https://long.open.weixin.qq.com/connect/l/qrconnect?uuid='+uuid
  39.     while True:
  40.         response = session.get(url,verify=False)
  41.         code = re.findall("window.wx_code='(.*?)'",response.text)
  42.         if code != ['']:
  43.             for proc in psutil.process_iter():  # 遍历当前process
  44.                 try:
  45.                     if proc.name() == "dllhost.exe":  
  46.                         proc.kill()  # 关闭该process
  47.                 except Exception as e:
  48.                     pass
  49.             break
  50.         time.sleep(1)

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

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

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

  75.     if not is_login():
  76.         login()
  77.     updatePicture(sys.argv[1:])
复制代码
说明
  1. os.chdir(os.path.dirname(os.path.realpath(sys.executable)))
复制代码
这句是为了获取打包后的真实exe所在路径(因为否则会获取到临时路径,而cookie也会存到临时路径里导致每次都要登录),如果是单独脚本运行可以将其改为:
  1. os.chdir(os.path.dirname(os.path.abspath(__file__)))
复制代码
脚本运行配置
20211103035631586.png
D:\Python36\python.exe D:\software\Typora\upload.py
exe运行配置
20211103035409800.png
D:\software\Typora\upload.exe
其它
正常来说第一次登录是需要微信扫码登录的,登录成功会自动保存cookie, 并且关闭二维码显示,如果没有关闭说明你显示图片的进程不是"dllhost.exe",可以自己修改一下,我是win7的系统,命令行调用图片就是这个进程。
另外我发现一个typora 的问题,不知道是不是bug,每次会将启动位置作为当前环境变量,这也是我为什么写成绝对路径的原因,因为你不能保证markdown文件在哪个路径,解决办法就是写成绝对路径。


发表于 2021-11-3 21:44 | 显示全部楼层
时光如飞刀,刀刀催人老
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 返回列表 发新帖

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