简讯 发表于 2021-3-17 17:49

记一次图床上传工具开发打包经历

![](https://i.loli.net/2021/03/16/xg8vcTiJKlhkjUV.jpg)



说起图床,常用 markdown 写博客的同学应该不陌生。[🍀点击此处阅读原文](https://lijianxun.top/274.html)



文章中的图片路径肯定不能指向本地文件,那样文章发布以后图片会因为找不到文件而失效。



如果你是第一次听说图床,可以认为图床就是网络相册,会保管你上传的所有图片,并生成一个 URL 地址,可以直接引用或下载。



我第一次听说图床的时候,瞬间脑补了一下,一张床上放了很多图片?什么鬼?



GitHub 地址:(https://github.com/pysmms/pysmms)



如果你想尝试这个工具,可以直接安装使用。



```bash

python3 -m pip install pysmms

```



安装好之后在终端输入 `pysmms 图片路径` 即可上传。上传完成会自动复制到剪贴板。



![使用效果](https://i.loli.net/2020/02/25/jCxeBfKV5dpZ3rg.png)



# 为什么开发



先说明一下,这个图床工具基于 (https://sm.ms/) API 接口开发,(https://doc.sm.ms/)。这个图床非常好用,已经用了很长时间,而且每个免费用户都有 5G 的免费额度,对于我来说是够用了。如果付费的话功能会更高级一些。



回到标题,为什么开发?因为写文章的时候,经常要上传图片,之前偶尔传图都是在 SM.MS 网页,但是越来越觉得这样效率太低,每次写文章的时候都要把网站打开,随时准备上传图片。SM.MS 官方只有安卓和 iOS,并没有 Mac 版,还有一些第三方图床工具需要付费(个人觉得不值)。既然官方提供了 API 接口,何不利用一下。



# n0vad3v/smv2



在 GitHub 上找到了 (https://github.com/n0vad3v/smv2),非常符合我的想法,不仅支持传图,而且还支持历史记录查询,优雅的使用 Authorization。



```bash

➜ smv2 poster36.jpg

Upload without Token.

┌SM.MS Upload Status───────────────────────────────────────────────┐

│ Image URL    │ https://i.loli.net/2019/02/18/Q123f2TWhtnk1FR.jpg │

├──────────────┼───────────────────────────────────────────────────┤

│ Deletion URL │ https://sm.ms/delete/8Ymbq218218XlPIDg4ReE2rcTi   │

└──────────────┴───────────────────────────────────────────────────┘

```



可以看出 pysmms 和 smv2 的界面是非常类似的,因为借鉴了 smv2 库。



但是对我来说,smv2 用起来还是有些不顺手,例如图片上传之后需要手动复制图片 URL,不支持多个 Authorization,不支持基于 IP 的历史记录查询等。所以就萌生了参考 smv2,自己也写个类似的脚本的想法。



顺便学习一下这么优雅的表格是如何生成的,写好的脚本如何打包上传到 pypi。



# 开发



smv2 用到了 `requests` 和 `terminaltables` 这两个第三方库。



第一个用来请求接口,第二个用来生成格式化表格。



## terminaltables



使用 (https://github.com/Robpol86/terminaltables) 让表格在终端中显示变得更加容易。



官方提供了简单的用法示例:



```python

from terminaltables import AsciiTable



table_data = [

    ['Heading1', 'Heading2'],

    ['row1 column1', 'row1 column2'],

    ['row2 column1', 'row2 column2'],

    ['row3 column1', 'row3 column2']

]

table = AsciiTable(table_data)

print table.table



+--------------+--------------+

| Heading1   | Heading2   |

+--------------+--------------+

| row1 column1 | row1 column2 |

| row2 column1 | row2 column2 |

| row3 column1 | row3 column2 |

+--------------+--------------+

```



支持 Windows 10, Windows XP, and MacOS。



![例子](https://i.loli.net/2020/02/25/jGvPHJEa4uAicO8.png)



[完整文档点此链接。](https://robpol86.github.io/terminaltables/)



## Pyperclip



在 pysmms 中,只是在成功获取图片链接的时候会使用 Pyperclip,这样上传完成图片之后可以继续回到写作中,不需要鼠标选定图片链接再拷贝。



Pyperclip 的目的是提供一个跨平台的 Python 模块,用于将文本复制和粘贴到剪贴板。使用非常简单,以至于没有文档。如果你的脚本里用到了复制粘贴,可以试试。



```bash

>>> import pyperclip

>>> pyperclip.copy('Hello world!')

>>> pyperclip.paste()

'Hello world!'

```



# 打包发布



脚本写好之后就是打包发布了。



需要在文件夹建立 setup.py 文件,写入以下内容:



```python

import setuptools



with open("README.md", "r") as f:

    long_description = f.read()



setuptools.setup(

    name="pysmms",

    version="0.0.5",

    author="Jianxun",

    author_email="i@lijianxun.top",

    description="The CLI Tool for SM.MS, based on API v2.",

    long_description=long_description,

    long_description_content_type="text/markdown",

    url="https://github.com/alpha87/pysmms",

    packages=setuptools.find_packages(),

    classifiers=[

      "Programming Language :: Python :: 3",

      "License :: OSI Approved :: GNU General Public License v3 (GPLv3)",

      "Operating System :: OS Independent",

    ],

    install_requires=[

      "requests",

      "pyperclip",

      "terminaltables"

    ],

    entry_points={

      'console_scripts': [

            'pysmms=pysmms.pysmms:app',

      ],

    }

)

```



文件整体还是很好理解的,按照自己脚本的信息填写就可以。



## 注册 pypi



需要在 (https://pypi.org/) 注册账号,然后在用户根目录下创建 `.pypirc` 文件,写入以下内容:



```bash



index-servers=pypi





repository=https://upload.pypi.org/legacy/

username=xxx

password=xxx

```



填入自己的用户名和密码。



## 打包



```bash

python3 setup.py sdist bdist_wheel

```



## 上传



首先需要安装 twine,`pip install twine`,安装完成后执行以下命令上传到 pypi。



```bash

twine upload dist/*

```



上传成功后就可以在 pypi 网站上看到自己上传的工具了,也就可以使用 pip 下载安装了。



## 后记



如果你习惯使用 GitHub 作为图床,pysmms 已经支持使用 GitHub 作为图床。只需要在 `.pysmms` 文件中写入 GitHub 相关配置即可,例如:



```bash



auth=['ptK***********************WFr']





user=用户名

repo=仓库

branch=分支

token=申请的 token

```



然后使用 `pysmms gh 图片路径` 就可使用 GitHub 作为图床。



**需要注意的是,在上传到 GitHub 之前,会把图片的名称随机修改。**

沉心云 发表于 2021-3-17 19:53

很棒哦,最近也在搭建个人的博客、网盘。图床等等玩意,学习到了{:301_1003:}

turuoyang 发表于 2021-3-17 18:16

学习学习学习

zx110 发表于 2021-3-17 18:40

感谢楼主分享

沉心云 发表于 2021-3-18 14:45

你好,在github上的部署能在讲详细一点嘛
页: [1]
查看完整版本: 记一次图床上传工具开发打包经历