自己打造基于命令行的书签管理工具

大多数人都是用浏览器自带的书签管理工具存储url, 虽然这个也挺方便,不过当url多了,即使是分类存放,也不是很好找。于是,我就在琢磨着,能不能自制一个基于命令行的书签管理工具。我只要在命令行敲几个关键词就能直接进入网站,毕竟,对于程序猿而言,命令行是最高效的方式。

有了想法,就动手做吧...

思路分析

  • 最终要的效果是:命令行输入关键词,如果这个关键词所包含的url只有一个,就直接打开网址;如果有多个,就罗列并显示序号,通过序号选择;如果没有找到url,就提示查看现有的url列表

最终效果图

  • 书签存放在文件中,每一行一个书签,便于管理 如:
代码语言:javascript
复制
编程入门指南 v1.5 https://zhuanlan.zhihu.com/p/19959253?columnSlug=xiao-jing-mo
Laravel 教程 - Web 开发实战入门 https://fsdhub.com/books/laravel-essential-training-5.1/
Linux命令大全 http://man.linuxde.net/
  • 原理:用python将书签文件读取,存为列表。获取命令行参数,判断参数是否存在于列表中,如果存在,调用chrome浏览器打开url

代码实现

  • chrome安装路径设置为环境变量,便于调用浏览器

我用的是win10自带的ubuntu子系统

代码语言:javascript
复制
export chrome="/mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe"
  • 将书签存储在bookmark.md文件中
  • 操作书签的python代码bookmark.py
代码语言:javascript
复制
#_*_coding:utf8_*_
import sys,os,re
chrome = os.getenv('chrome') # 获取环境变量chrome
keyword = sys.argv[1].lower() # 不区分大小写
url_data = []
file_path = sys.path[0] + '/bookmark.md'

需要指定文件编码

with open(file_path, 'rb') as file_object:
for line in file_object:
url_data.append(line.decode("UTF-8").strip())

url_arr = []

for url_str in url_data:
url_str = url_str.lower()
if keyword in url_str:
url_arr.append(url_str)

url_len = len(url_arr)

获取书签

def getBookbarks(data):
i = 0
for x in data:
print(str(i) + '. ' + x)
i = i + 1

正则匹配url

def matchUrl(url_content):
url_match = re.search(r"http[^\s]*", url_content)
url = url_match.group(0).rstrip()
return url

url = ''
if url_len > 1:
getBookbarks(url_arr)
choice = input('选择要进入的url序号\n')
url = matchUrl(url_arr[int(choice)])
elif url_len == 1:
url = matchUrl(url_arr[0])
else:
choice = input('无此书签,是否需要显示所有的书签?y:是 n:否\n')
if choice == 'y':
getBookbarks(url_data)

if url:
print(url)
os.system(chrome + ' ' + '"' + url + '"')
exit()

  • 设置程序调用的别名
代码语言:javascript
复制
alias b='python3 /home/wwwroot/script/bookmark/bookmark.py'

如此,一个简便的书签管理器就制作完成了