森哥瞧世界

您现在的位置是:首页>文档内容页

文档详情

利用Python实现自定义PAC规则的定期更新

jeson 2020-03-11 09:56:47 Python6703
森哥在使用v2ray的过程中,遇到一个问题,就是线上提示的GFWList提供的规则,我们只能提意见,但无法修改。而我们自己想要的东西,往往不在那里面。

森哥在使用v2ray的过程中,遇到一个问题,就是线上提示的GFWList提供的规则,我们只能提意见,但无法修改。而我们自己想要的东西,往往不在那里面。

那么有没有什么办法可以解决的呢?

现在Google浏览器、Firefox浏览器、Edge浏览器都支持插件,可以直接实现。

下一篇中,我们再谈谈使用插件实现的办法

但今天森哥要给的是利用Python实现一个自定义规则与线上的GFWList结合后产生新的PAC规则,供自己使用。

代码不多,连空行加一起,也就只要56行。

下面就开始进入正题了。

环境:

Python 3.X版本以上的,不限Windows、MAC OSX、Linux等。

准备:

建立一个文本文件,森哥这边命名为:oneself.txt

内容为(可以自己添加,一行一个域名):

!############## Custom URL content Start ##################
.ip.cn
.paypal.com
!############## Custom URL content End ##################

现在,开始进入正题。

创建一个.py格式的文件,森哥使用的文件名为:gfwlist.py,使用VSCode程序编辑器

内容如下:

# -*- coding: utf-8 -*-

import os,base64,sys
import urllib
import requests
import string

url = 'https://raw.githubusercontent.com/gfwlist/gfwlist/master/gfwlist.txt'
print = "downloading with GFWList"
urllib.request.urlretrieve (url,"gfw_list.txt")

gfw_list = "gfw_list.txt"
oneself=r"oneself.txt"
gfwlist=r"gfwlist.txt"

def Tofile(txt,file):
   with open(txt,'r') as fileObj:
       base64_data = fileObj.read()
       gfw_list_txt = base64.b64decode(base64_data)
       gfw_name = open(file,'wb')
       gfw_name.write(gfw_list_txt)
       gfw_name.close()

Tofile("./gfw_list.txt",'gfw_list.txt')

fpa=open(gfw_list)
fpb=open(oneself)
fpc=open(gfwlist,"w")

arrB=[]
for lineb in fpb.readlines():
   arrB.append(lineb)

index=0
for linea in fpa.readlines():
   index=index+1
   fpc.write(linea)
   for i in range((index-1)*10,(index)*10):
       try:
          fpc.write(arrB[i])
       except:
           pass

fpa.close()
fpb.close()
fpc.close()

def ToBase64(file, txt):
   with open(file, 'rb') as fileObj:
       gfwlist_name = fileObj.read()
       base64_data = base64.b64encode(gfwlist_name)
       fout = open(txt, 'w')
       fout.write(base64_data.decode())
       fout.close()

ToBase64("./gfwlist.txt",'gfwlist.txt')

保存后,与oneself.txt放在同一个文件夹下面。

在该文件夹下,执行:python gfwlist.py

生成gfw_list.txtgfwlist.txt

gfwlist.txt是我们想要的东西。如下图:

再把gfwlist.txt上传到Github或Gitee上。再通过远程调用,填入您的规则应用的那里面,大功造成。



文章评论

Cancel the reply
Login Participate In Comments

Review(