大多数人都是用浏览器自带的书签管理工具存储url, 虽然这个也挺方便,不过当url多了,即使是分类存放,也不是很好找。于是,我就在琢磨着,能不能自制一个基于命令行的书签管理工具。我只要在命令行敲几个关键词就能直接进入网站,毕竟,对于程序猿而言,命令行是最高效的方式。
有了想法,就动手做吧...
思路分析
- 最终要的效果是:命令行输入关键词,如果这个关键词所包含的url只有一个,就直接打开网址;如果有多个,就罗列并显示序号,通过序号选择;如果没有找到url,就提示查看现有的url列表
最终效果图
- 书签存放在文件中,每一行一个书签,便于管理 如:
编程入门指南 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子系统
export chrome="/mnt/c/Program\ Files\ \(x86\)/Google/Chrome/Application/chrome.exe"
- 将书签存储在
bookmark.md
文件中 - 操作书签的python代码
bookmark.py
#_*_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 urlurl = ''
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()
- 设置程序调用的别名
alias b='python3 /home/wwwroot/script/bookmark/bookmark.py'
如此,一个简便的书签管理器就制作完成了