banner
andrewji8

Being towards death

Heed not to the tree-rustling and leaf-lashing rain, Why not stroll along, whistle and sing under its rein. Lighter and better suited than horses are straw sandals and a bamboo staff, Who's afraid? A palm-leaf plaited cape provides enough to misty weather in life sustain. A thorny spring breeze sobers up the spirit, I feel a slight chill, The setting sun over the mountain offers greetings still. Looking back over the bleak passage survived, The return in time Shall not be affected by windswept rain or shine.
telegram
twitter
github

踏馬向自由(ノードの自由)

github 上で無料ノードを取得し、購読リンクリストを自分で追加できます。理論的には毎日無数のノードがあり、洋物を崇拝せず、騙されないようにし、情報のカンフルを打破し、独立して考えましょう。

import requests
import yaml
import base64

# 定義された購読リンクリスト
SUBSCRIPTION_URLS = ["https://raw.githubusercontent.com/Surfboardv2ray/TGParse/main/splitted/mixed"
    
"https://raw.githubusercontent.com/ripaojiedian/freenode/main/sub"
    "https://raw.githubusercontent.com/roosterkid/openproxylist/main/V2RAY_RAW.txt"
    "https://github.com/andrewji8/V2ray-Configs/blob/main/All_Configs_base64_Sub.txt"
]


def fetch_subscription(url):
    """購読内容を取得する"""
    try:
        response = requests.get(url, timeout=10, verify=False)  # SSL検証を無効にする
        if response.status_code == 200:
            return response.text.strip()  # 不要な空白文字を削除
        else:
            print(f"{url} の内容を取得できませんでした。ステータスコード: {response.status_code}")
            return None
    except Exception as e:
        print(f"{url} のリクエストに失敗しました: {e}")
        return None

def decode_base64(content):
    """Base64エンコードされた内容をデコードする"""
    try:
        decoded_content = base64.b64decode(content).decode("utf-8")
        return decoded_content
    except Exception as e:
        print(f"Base64デコードに失敗しました: {e}")
        return None

def parse_yaml(content):
    """YAML内容を解析する"""
    try:
        data = yaml.safe_load(content)
        if isinstance(data, dict):  # 辞書型の場合、そのまま返す
            return data
        elif isinstance(data, str):  # 文字列型の場合、辞書にラップする
            return {"proxies": [data]}  # 内容がプロキシノードのリストであると仮定
        else:
            print(f"解析結果は辞書または文字列型ではありません: {type(data)}")
            return None
    except Exception as e:
        print(f"YAMLの解析に失敗しました: {e}")
        return None

def merge_subscriptions(subscriptions):
    """複数の購読内容をマージし、重複を除去する"""
    merged_data = {}
    for sub in subscriptions:
        if not sub or not isinstance(sub, dict):  # 購読内容が辞書型であることを確認
            print("無効な購読内容をスキップします")
            continue
        for key, value in sub.items():
            if key not in merged_data:
                merged_data[key] = value
            elif isinstance(value, list) and isinstance(merged_data[key], list):
                # リストをマージし、重複を除去
                merged_data[key] = list(set(merged_data[key] + value))
            elif isinstance(value, dict) and isinstance(merged_data[key], dict):
                # 辞書型の場合、再帰的にマージ
                merged_data[key].update(value)
    return merged_data

def save_to_files(data, group_size=12000, base_filename="subscription_group"):
    """データをグループ化して複数のファイルに保存する"""
    if "proxies" not in data:
        print("グループ化できるプロキシノードがありません")
        return
    
    proxies = data["proxies"]
    total_groups = (len(proxies) + group_size - 1) // group_size  # グループ数を計算
    for i in range(total_groups):
        group_proxies = proxies[i * group_size:(i + 1) * group_size]
        group_data = {**data, "proxies": group_proxies}  # グループデータを作成
        filename = f"{base_filename}_{i + 1}.yaml"
        with open(filename, "w", encoding="utf-8") as f:
            yaml.dump(group_data, f, allow_unicode=True)
        print(f"グループ {i + 1}{filename} に保存されました")

def split_yaml_file(input_filename, output_base_filename="split_subscription", num_splits=3):
    """
    YAMLファイルを複数のファイルに分割する。
    
    :param input_filename: 入力するYAMLファイル名
    :param output_base_filename: 出力ファイルの基本名
    :param num_splits: 分割するファイルの数
    """
    try:
        # 入力のYAMLファイルを読み込む
        with open(input_filename, "r", encoding="utf-8") as f:
            data = yaml.safe_load(f)
        
        if "proxies" not in data:
            print("分割できるプロキシノードがありません")
            return
        
        proxies = data["proxies"]
        total_proxies = len(proxies)
        print(f"総ノード数: {total_proxies}")
        
        # 各グループのサイズを計算
        group_size = (total_proxies + num_splits - 1) // num_splits  # 切り上げ
        
        # 分割して複数のファイルに保存
        for i in range(num_splits):
            start_index = i * group_size
            end_index = min((i + 1) * group_size, total_proxies)
            group_proxies = proxies[start_index:end_index]
            
            if not group_proxies:
                print(f"グループ {i + 1} にノードがないため、保存をスキップします")
                continue
            
            # グループデータを作成
            group_data = {**data, "proxies": group_proxies}
            output_filename = f"{output_base_filename}_{i + 1}.yaml"
            
            # ファイルに保存
            with open(output_filename, "w", encoding="utf-8") as f:
                yaml.dump(group_data, f, allow_unicode=True)
            print(f"グループ {i + 1}{output_filename} に保存されました")
    
    except Exception as e:
        print(f"ファイルの分割に失敗しました: {e}")

def main():
    # すべての購読内容を取得
    subscription_contents = [fetch_subscription(url) for url in SUBSCRIPTION_URLS]

    # Base64をデコードし、YAML形式に解析
    parsed_subscriptions = []
    for content in subscription_contents:
        if content:
            print(f"元の内容: {content[:100]}...")  # 最初の100文字を表示
            decoded_content = decode_base64(content)
            if decoded_content:
                print(f"デコード後の内容: {decoded_content[:100]}...")  # 最初の100文字を表示
                data = parse_yaml(decoded_content)
                print(f"解析後のデータ型: {type(data)}")
                parsed_subscriptions.append(data)

    # 購読内容をマージ
    merged_data = merge_subscriptions(parsed_subscriptions)

    # 複数のファイルにグループ化して保存(各グループ12000ノード)
    if merged_data:
        save_to_files(merged_data, group_size=12000)  # 各グループ12000ノード
    else:
        print("マージできる有効な購読内容がありません")

    # 生成された最初のグループファイルを3つのサブファイルに分割
    input_filename = "subscription_group_1.yaml"
    split_yaml_file(input_filename, output_base_filename="split_subscription", num_splits=3)

if __name__ == "__main__":
    main()

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。