typora复制到CSDN博客失效

51cto/2023/10/1 4:06:03

开始

今天开始尝试使用 Typora 写markdown 然后复制到博客园,不过会有一个问题

那就是 typroa 插入的图片都是本地的,md文档复制到博客园之后,图片都失效了

通过百度,有工具可以直接把 md 文档中的图片上传到博客园,然后替换文档中的链接,我把工具下载下来之后,发现这东西依赖.net ,而这个东西好大,所以萌生了自己写一个工具的想法

注意!!!!!

sm.ms图床有限制

  • 一分钟10张
  • 一小时20张
  • 一星期50张

所以,,, 白嫖不了了。。。

其实是可以的 只是需要改造一下...

加一个代理池

但是 还是默默的 换成自己的把

分析博客园上传图片接口

博客园有三种编辑器,其中markdown 编辑器和tinyMCE 编辑器可以上传图片

  1. 首先分析一下接口,在拖入图片之后会请求一个接口,上传文件,但是我用python 仿照他请求之后一直返回500错误。另一个编辑器使用的接口也是不可用的。
  2. 最后折腾了三四个小时发现它在服务端设置了禁止跨域.... 我早该想到的 !
  3. 所以不能使用这种方式了,但是已有的.net 工具是怎么实现的呢?应该是官方发布的吧。不然登录验证怎么做

寻找图床

既然博客园是不能上传图片了,那就需要找一个图床,需求就是特别稳定,据说新浪图床还炸了。找了之后有三个图床。

  • sm.ms
  • 路过图床
  • 中关村的图片上传接口
  • 找到的其他接口都需要登录才行,所以不好使
  1. 简单分析之后,决定使用sm.ms ,因为这个网址没有对接口做演示,且官方也放出了api,并且也没有什么限制
  2. 上传文件之后它请求了这个接口

image-20200228114035021

  1. 并且返回了一个json 数据是图片的url (这么老实的图床,感觉白嫖的良心痛,但是也不能一直白嫖吧)
  2. 写了python 代码测试了一下接口,确实可用
import requests as rq
import json# 传入图片名 返回图床url
def uploadImg(imgname):url = 'https://sm.ms/api/v2/upload?inajax=1'headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 Edg/80.0.361.62',}files = [('smfile',(imgname,open(imgname, 'rb'),'image/png'))]r = rq.post(url,headers=headers,files=files)dic = json.loads(r.text)print(r.text)try:if 'data' in dic:return dic['data']['url']elif 'code' in dic:if dic['code'] == 'image_repeated':return dic['images']else:print(r.text)exit()except Exception as e:print(str(e))exit()print(uploadImg('2.png'))
  1. 那后面就是,正则匹配图片链接,然后,通过上面的自定义函数得到图片在图床的url,再替换到md文件中即可
  2. 最后效果

image-20200228114705882

  1. 此时文件中的链接被替换成了图床链接,这时候文档复制到哪里都行了,不过为了防止图床炸掉,还是在本地保存了一份 (将typroa 图片设置为复制到文档同目录就好了)
  2. 最后贴出全部代码
import requests as rq
from bs4 import BeautifulSoup
import sys
import re
import jsondef uploadImg(imgname):url = 'https://sm.ms/api/v2/upload?inajax=1'headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.122 Safari/537.36 Edg/80.0.361.62',}files = [('smfile',(imgname,open(imgname, 'rb'),'image/png'))]r = rq.post(url,headers=headers,files=files)dic = json.loads(r.text)try:if 'data' in dic:return dic['data']['url']elif 'code' in dic:if dic['code'] == 'image_repeated':return dic['images']else:print(r.text)exit()except Exception as e:print(str(e))exit()def getImgStr(str_):pattern = re.compile(r'\!\[.*?]\(.*?\)')return pattern.findall(str_)def getImgName(img_str):pattern = re.compile(r'\(.*.\)')return pattern.findall(img_str)[0][1:-1]if __name__ == '__main__':if len(sys.argv) < 2:print('请传递参数进来'+str(len(sys.argv)))exit()md_filename = sys.argv[1]md_str = ''with open(md_filename,'r',encoding='utf-8') as f:md_str = str(f.read())img_strs = getImgStr(md_str)for img_str in img_strs:img_name = getImgName(img_str)img_url = uploadImg(img_name)md_str = md_str.replace(img_name,img_url)print(img_url)with open('修正_'+md_filename,'w',encoding='utf-8') as f:f.write(md_str)
  1. 最后再通过pyingtaller 打包成exe 然后放到系统变量path所指向的目录下就行了。下次编辑文档,在md文档所在处,地址栏输入cmd 然后执行命令 up_img 文档名.md 就可以完成图片上传替换

额外的

​ 虽然图片不能上传到博客园,但是解析接口的时候发现了些比较诡异的事情。

​ TinyMCE编辑器所使用的图片接口,上传之后没有返回任何东西,但是图片却加载进来了,我死活不相信这么玄学的事情,分析了js代码之后,确实看到了对接收结果的处理,但是浏览器调试工具就是不显示返回结果。

​ 最后使用fiddler 抓包,终于发现了数据

image-20200228115610372

​ 显然是加密的,但是如何做到 dev-tool不显示,还真的不知道的骚操作

​ 虽然图床可用,但是终究放心不下,最终准备使用七牛云,毕竟免费送10G空间流量的不是...

写在最后:只用一步的方法!

直接利用typora另存为word,然后再复制即可!!


http://www.ngui.cc/51cto/show-1379.html

相关文章

CSDN博客文章内容使用超链接

之前一直不知道如何在csdn博客发布文章如何添加超链接&#xff0c;刚才研究了一下终于明白了&#xff0c;如下图所示&#xff0c;通过工具栏超链接按钮就可以添加超链接了。 现在来测试一下 维科瑞家具板材

如何转载csdn博客

在参考“如何快速转载CSDN中的博客”后&#xff0c;由于自己不懂html以及markdown相关知识&#xff0c;所以花了一些时间来弄明白怎么转载博客&#xff0c;以下为转载CSDN博客步骤和一些知识小笔记。 参考博客原址&#xff1a;http://blog.csdn.net/bolu1234/article/details/…

体验一下CSDN博客的投票功能,附体验地址

CSDN博客&#xff0c;应该是所有博客社区里&#xff0c;相对活跃&#xff08;博主们活跃&#xff0c;运营们也活跃&#xff09;并且功能更齐全的一家博客平台&#xff0c;这也是为什么我更喜欢在CSDN博客上发文章的原因&#xff0c;各种活动各种内测功能应有尽有&#xff0c;问…

【11】CSDN博客添加微信公众号二维码

文章目录简介目标阅读基础环境说明从微信公众号下载二维码图片进入个人微信公众号下载二维码上传二维码图片到CSDN最近更新简介 在使用CSDN的过程中&#xff0c;可以看到有些博主的主页有个人微信二维码&#xff0c;微信公众号二维码等一些个人栏目信息。这对作者而言&#xf…

如何在CSDN博客中插入代码块并【显示行号】

最近在学习java语言&#xff0c;想要通过写博客来记录自己的学习过程以便以后查阅&#xff0c;由于本人博客小白&#xff0c;总是在写作过程中需要插入代码片段时而无从下手&#xff0c;排版不忍直视&#xff0c;通过借鉴其他同学的博客&#xff0c;整理如下和大家分享。 例如在…

csdn 如何查看自己博客的积分

一、将鼠标悬停到头像&#xff0c;点击下方出现的内容管理 二、点击左侧菜单栏的数据观星 三、然后就能查看积分啦 同理&#xff0c;还能再创作权益中查看&#xff1a; https://mp.csdn.net/console/UserLevel

CSDN如何快速升级-博客积分规则

CSDN博客是依靠积分来提升等级的&#xff0c;博客积分是CSDN对用户努力的认可和奖励&#xff0c;也是衡量博客水平的重要标准。博客等级也将由博客积分唯一决定。 想要快速提升等级&#xff0c;就需要按照CSDN的积分规则来获取积分&#xff0c;积分规则具体如下&#xff1a; …

CSDN写博客问题 - 文章跳转锚点

文章目录锚点建立自动建立手动建立锚点跳转锚点建立 自动建立 用[toc]建立目录后&#xff0c;CSDN会自动给标题样式建立锚点 鼠标放在目录上可以看到跳转链接#后面的就是系统建立的锚点 手动建立 step1&#xff1a;链接处 [跳转到某锚点链接&#xff0c;点击即会跳转](#a…

写CSDN博客时表格内如何换行

使用<br>标签 例如&#xff1a; 效果图

2020年个人总结和分享(华为云-云享专家、CSDN博客专家 成长记录)

前言 2020年经历了许多&#xff0c;疫情.......、一个实习生的转正历程、CSDN博主的成长经历、与华为云的道义之交&#xff0c;这一年不平凡&#xff0c;这里简单写了一点总结&#xff0c;分享职场、成长、感悟。发现了一些效率工具&#xff0c;和大家分享使用该工具提升效率。…