Skip to content
This repository has been archived by the owner on Sep 20, 2023. It is now read-only.

Commit

Permalink
Remote links can add the enn parameter to filter node names contain…
Browse files Browse the repository at this point in the history
…ing keywords, and use "," to separate multiple keywords
  • Loading branch information
Toperlock committed Mar 27, 2024
1 parent 5491242 commit 2ec1a67
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 7 deletions.
19 changes: 15 additions & 4 deletions api/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ def config(url):
content_type='application/json; charset=utf-8', status=403)
# temp_json_data_str = os.environ['TEMP_JSON_DATA']
# temp_json_data = json.loads(temp_json_data_str)
temp_json_data = json.loads('{"subscribes":[{"url":"URL","tag":"tag_1","enabled":true,"emoji":1,"subgroup":"","prefix":"","User-Agent":"v2rayng"},{"url":"URL","tag":"tag_2","enabled":false,"emoji":0,"subgroup":"命名/named","prefix":"❤️","User-Agent":"clashmeta"},{"url":"URL","tag":"tag_3","enabled":false,"emoji":1,"subgroup":"","prefix":"","User-Agent":"v2rayng"}],"auto_set_outbounds_dns":{"proxy":"","direct":""},"save_config_path":"./config.json","auto_backup":false,"exclude_protocol":"ssr","config_template":"","Only-nodes":false}')
temp_json_data = json.loads('{"subscribes":[{"url":"URL","tag":"tag_1","enabled":true,"emoji":1,"subgroup":"","prefix":"","ex-node-name": "","User-Agent":"v2rayng"},{"url":"URL","tag":"tag_2","enabled":false,"emoji":1,"subgroup":"","prefix":"","ex-node-name": "","User-Agent":"v2rayng"},{"url":"URL","tag":"tag_3","enabled":false,"emoji":1,"subgroup":"","prefix":"","ex-node-name": "","User-Agent":"v2rayng"}],"auto_set_outbounds_dns":{"proxy":"","direct":""},"save_config_path":"./config.json","auto_backup":false,"exclude_protocol":"ssr","config_template":"","Only-nodes":false}')
subscribe = temp_json_data['subscribes'][0]
subscribe2 = temp_json_data['subscribes'][1]
subscribe3 = temp_json_data['subscribes'][2]
Expand All @@ -134,7 +134,7 @@ def config(url):
index_of_colon = encoded_url.find(":")

if not query_string:
if any(substring in encoded_url for substring in ['&emoji=', '&file=', '&eps=']):
if any(substring in encoded_url for substring in ['&emoji=', '&file=', '&eps=', '&enn=']):
if '|' in encoded_url:
param = urlparse(encoded_url.rsplit('&', 1)[-1])
else:
Expand All @@ -144,20 +144,24 @@ def config(url):
request.args['prefix'] = unquote(request.args['prefix'])
if request.args.get('eps'):
request.args['eps'] = unquote(request.args['eps'])
if request.args.get('enn'):
request.args['enn'] = unquote(request.args['enn'])
if request.args.get('file'):
index = request.args.get('file').find(":")
next_index = index + 2
if index != -1:
if next_index < len(request.args['file']) and request.args['file'][next_index] != "/":
request.args['file'] = request.args['file'][:next_index-1] + "/" + request.args['file'][next_index-1:]
else:
if any(substring in query_string for substring in ['&emoji=', '&file=', '&eps=']):
if any(substring in query_string for substring in ['&emoji=', '&file=', '&eps=', '&enn=']):
param = urlparse(query_string.split('&', 1)[-1])
request.args = dict(item.split('=') for item in param.path.split('&'))
if request.args.get('prefix'):
request.args['prefix'] = unquote(request.args['prefix'])
if request.args.get('eps'):
request.args['eps'] = unquote(request.args['eps'])
if request.args.get('enn'):
request.args['enn'] = unquote(request.args['enn'])
if request.args.get('file'):
index = request.args.get('file').find(":")
next_index = index + 2
Expand Down Expand Up @@ -191,6 +195,7 @@ def config(url):
UA_param = request.args.get('UA', '')
pre_param = request.args.get('prefix', '')
eps_param = request.args.get('eps', '')
enn_param = request.args.get('enn', '')

# 构建要删除的字符串列表
params_to_remove = [
Expand All @@ -201,9 +206,11 @@ def config(url):
f'file={file_param}',
f'&emoji={emoji_param}',
f'&tag={tag_param}',
f'&eps={quote(eps_param)}'
f'&eps={quote(eps_param)}',
f'&enn={quote(enn_param)}'
]
# 从url中删除这些字符串
full_url = full_url.replace(',', '%2C')
for param in params_to_remove:
if param in full_url:
full_url = full_url.replace(param, '')
Expand All @@ -218,20 +225,24 @@ def config(url):
url_parts = full_url.split('|')
if len(url_parts) > 1:
subscribe['url'] = full_url.split('url=', 1)[-1].split('|')[0] if full_url.startswith('url') else full_url.split('|')[0]
subscribe['ex-node-name'] = enn_param
subscribe2['url'] = full_url.split('url=', 1)[-1].split('|')[1] if full_url.startswith('url') else full_url.split('|')[1]
subscribe2['emoji'] = 1
subscribe2['enabled'] = True
subscribe2['subgroup'] = ''
subscribe2['prefix'] = ''
subscribe2['ex-node-name'] = enn_param
subscribe2['User-Agent'] = 'v2rayng'
if len(url_parts) == 3:
subscribe3['url'] = full_url.split('url=', 1)[-1].split('|')[2] if full_url.startswith('url') else full_url.split('|')[2]
subscribe3['enabled'] = True
subscribe3['ex-node-name'] = enn_param
if len(url_parts) == 1:
subscribe['url'] = full_url.split('url=', 1)[-1] if full_url.startswith('url') else full_url
subscribe['emoji'] = int(emoji_param) if emoji_param.isdigit() else subscribe.get('emoji', '')
subscribe['tag'] = tag_param if tag_param else subscribe.get('tag', '')
subscribe['prefix'] = pre_param if pre_param else subscribe.get('prefix', '')
subscribe['ex-node-name'] = enn_param
subscribe['User-Agent'] = ua_param if ua_param else 'v2rayng'
temp_json_data['exclude_protocol'] = eps_param if eps_param else temp_json_data.get('exclude_protocol', '')
temp_json_data['config_template'] = unquote(file_param) if file_param else temp_json_data.get('config_template', '')
Expand Down
4 changes: 2 additions & 2 deletions instructions/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,9 @@ For example, the website I built [https://sing-box-subscribe.vercel.app](https:/
https://xxxxxxx.vercel.app/config/https://xxxxxxsubscribe?token=123456&file=https://github.com/Toperlock/sing-box-subscribe/raw/main/config_template/config_template_groups_rule_set_tun.json
```

### 2024.2.16 Update: Support adding `emoji`, `tag`, `prefix`, `ua`, `file`, `eps` parameters after the link. Use `&` to connect multiple parameters. The usage is the same as the parameters in `providers.json`
### 2024.2.16 Update: Support adding `emoji`, `tag`, `prefix`, `ua`, `file`, `eps` , `enn` parameters after the link. Use `&` to connect multiple parameters. The usage is the same as the parameters in `providers.json`

`/config/URL_LINK&emoji=1&prefix=♥&ua=v2rayng&eps=vmess,hy2&file=https://xxxxxxxxx.json`
`/config/URL_LINK&emoji=1&prefix=♥&ua=v2rayng&eps=vmess,hy2&enn=网站,剩余流量&file=https://xxxxxxxxx.json`

The above example shows: enable emoji, add ♥ before the node name, use v2rayng user agent, and use `https://xxxxxxxxx.json` as the generated sing-box configuration template

Expand Down
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ def add_emoji(nodes, subscribe):

def nodefilter(nodes, subscribe):
if subscribe.get('ex-node-name'):
ex_nodename = subscribe['ex-node-name'].split('|')
ex_nodename = re.split(r'[,\|]', subscribe['ex-node-name'])
for exns in ex_nodename:
for node in nodes[:]: # 遍历 nodes 的副本,以便安全地删除元素
if exns in node['tag']:
Expand Down

0 comments on commit 2ec1a67

Please sign in to comment.