logo.png

首先我们要下载网页数据,选用Python最常用抓网页库 Requests

  • 我们使用 github的events 举例 requests 库简单的使用,实际使用订阅URL

    import requests
    url = 'https://api.github.com/events'
    r = requests.get(url)

    requests.png

  • 如图,开启 Python Shell 命令行,输入上面三行代码,网页数据就下载到本地内存中了
  • 输入 r.txet 就能显示网页的文本信息,本例获取的是 json数据

实际订阅数据是 base64 编码的加密数据,我们需要解码才能看到信息

import base64
s = base64.b64decode(r.text).decode('ascii')
print(s)
vms = s.split('
')

base64.png

  • base64 解码也很简单,使用前先导入库 import base64,然后使用 base64.b64decode 解码
  • 变量 s 就是解码订阅后的文本, print(s),就能把节点配置分行打印出来了
  • 如图 s[:100] 只显示前100个字节文本,再使用 "s.split('
    ') 把节点分离保存的 vms" 数组里
  • 命令 vms[0] 是第一个节点的数据,检查比较得知,我们获得正确

转传成二维码其实也是很简单,需要 QRCode

import qrcode
i=7
img = qrcode.make(vms[i])
img.save('vms_007.png')

007.png

  • 如图,接着输入上面代码,使用 qrcode.make 函数把文本转换成图像, save 保存成 png 格式
  • 变量 i=7 ,用来选择节点序号

最后完成的Python脚本: QRCode把订阅转换成二维码

  • 实际脚本在增加了在图片添加文本信息,用来区别协议节点
  • 添加的函数代码中都有注释

    import requests, base64, re , qrcode, io
    from PIL import Image, ImageDraw, ImageFont
    

    # 字体的格式,中文要中文字体 # 绘制文本 "
    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)

" % (text , file))

获取订阅表,Base64解码,节点分离

url = 'https://github.公益项目/USA'
r = requests.get(url)
s = base64.b64decode(r.text).decode('ascii')
vms = s.split('
')

节点配置转换 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    Add: %s:%s

" % (data['id'], data['add'], data['port']) )

except:
    pass
![uuid.png][5]
- 使用 "regex" 正则表达式库 和 "json" 轻量级数据交换格式库


  [1]: https://lyvba.com/wp-content/uploads/2021/08/3012741700.png
  [2]: https://lyvba.com/wp-content/uploads/2021/08/4079940853.png
  [3]: https://lyvba.com/wp-content/uploads/2021/08/1140335855.png
  [4]: https://lyvba.com/wp-content/uploads/2021/08/1698722995.png
分类: 学习编程

0 条评论

发表回复

Avatar placeholder

您的邮箱地址不会被公开。 必填项已用 * 标注