首先我们要下载网页数据,选用Python最常用抓网页库 Requests
我们使用 github的events 举例
requests
库简单的使用,实际使用订阅URLimport requests url = 'https://api.github.com/events' r = requests.get(url)
- 如图,开启
Python Shell
命令行,输入上面三行代码,网页数据就下载到本地内存中了 - 输入
r.txet
就能显示网页的文本信息,本例获取的是 json数据
实际订阅数据是 base64
编码的加密数据,我们需要解码才能看到信息
import base64
s = base64.b64decode(r.text).decode('ascii')
print(s)
vms = s.split('\n')
base64
解码也很简单,使用前先导入库import base64
,然后使用base64.b64decode
解码- 变量
s
就是解码订阅后的文本,print(s)
,就能把节点配置分行打印出来了 - 如图
s[:100]
只显示前100个字节文本,再使用s.split('\n')
把节点分离保存的vms
数组里 - 命令
vms[0]
是第一个节点的数据,检查比较得知,我们获得正确
转传成二维码其实也是很简单,需要 QRCode
库
import qrcode
i=7
img = qrcode.make(vms[i])
img.save('vms_007.png')
- 如图,接着输入上面代码,使用
qrcode.make
函数把文本转换成图像,save
保存成 png 格式 - 变量
i=7
,用来选择节点序号
最后完成的Python脚本: QRCode把订阅转换成二维码
- 实际脚本在增加了在图片添加文本信息,用来区别协议节点
添加的函数代码中都有注释
import requests, base64, re , qrcode, io from PIL import Image, ImageDraw, ImageFont """ # 图片转RGB # 创建一个可以在给定图像上绘图的对象 # 字体的格式,中文要中文字体 # 绘制文本 """ def image_add_text(img, text, left, top, text_color=(255, 0, 0), text_size=13): img = img.convert("RGB") draw = ImageDraw.Draw(img) fontStyle = ImageFont.truetype("FreeMono.ttf", text_size, encoding="utf-8") draw.text((left, top), text, text_color, font=fontStyle) return img def print_md(text, file): print("![%s](./png/%s)\n" % (text , file)) # 获取订阅表,Base64解码,节点分离 url = 'https://github.公益项目/USA' r = requests.get(url) s = base64.b64decode(r.text).decode('ascii') vms = s.split('\n') # 节点配置转换 Qrcode 二维码 def make_qrc(vms , i): img = qrcode.make(vms[i]) new_size = (int(img.size[0]/2), int(img.size[1]/2)) img = img.resize(new_size) text = vms[i][:32] img = image_add_text(img, text , 2, 2 , text_color=(0,0,0), text_size=18) img = img.convert("L") return img # 遍历节点全转 Qrcode for i in range(len(vms)-1): img = make_qrc(vms, i) text = vms[i][:10].replace("://", "_") file = str(i) + '_'+ text +'.png' img.save('./png/' + file) print_md(vms[i][:32] , file)
除了转换二维码,我还可以二次解码节点配置信息
import re, json
for vmess in vms :
res = re.match(r"vmess://(.*)", vmess)
try :
json_str = base64.b64decode(res[1]).decode('utf-8')
data = json.loads(json_str)
print("UUID: %s\tAdd: %s:%s\n" % (data['id'], data['add'], data['port']) )
except:
pass
- 使用
regex
正则表达式库 和json
轻量级数据交换格式库