User: Сделай код на Пайтон 
Красивый интерфейс в терминале 
1) Впн
2) Прокси (https http socket 5)
3) обновить базы (есть ссылки на json файлы с инфой )
4) выход
У меня есть ссылки на сборник впн и прокси

Впн как выглядит

  {
    "country": "Япония",
    "ddns": "public-vpn-232.opengw.net",
    "ip": "219.100.37.219",
    "uptime": "51 день",
    "quality": "235.26 мбит",
    "ping": "8 мс",
    "login": "vpn",
    "password": "vpn"
  },

А вот прокси

  {
    "type": "http",
    "ip": "43.202.154.212",
    "port": "80",
    "loc": "Южная Корея",
    "speed": "350 мс",
    "anonymity": "Элита"
  },
Assistant: Конечно! Ниже приведён пример Python-скрипта, который реализует красивый интерфейс в терминале с использованием библиотеки `rich`. Этот интерфейс предоставляет меню с четырьмя опциями: VPN, Прокси, Обновить базы данных и Выход.

### Шаги для реализации:

1. **Установка зависимостей:**
   
   Убедитесь, что у вас установлены необходимые библиотеки. Вы можете установить их с помощью `pip`:

   ```bash
   pip install rich requests
   ```

2. **Структура проекта:**

   ```
   project/
   ├── main.py
   ├── vpn.json
   └── proxies.json
   ```

   - `main.py`: Основной скрипт.
   - `vpn.json`: Локальный файл с данными VPN.
   - `proxies.json`: Локальный файл с данными прокси.

3. **Код скрипта (`main.py`):**

   ```python
   import requests
   import json
   import sys
   from rich import print
   from rich.console import Console
   from rich.table import Table
   from rich.prompt import Prompt, IntPrompt
   from rich.panel import Panel

   # Инициализация консоли Rich
   console = Console()

   # Ссылки на JSON файлы
   VPN_URL = "https://example.com/vpn.json"       # Замените на вашу ссылку
   PROXY_URL = "https://example.com/proxies.json" # Замените на вашу ссылку

   # Локальные файлы для хранения данных
   VPN_FILE = "vpn.json"
   PROXY_FILE = "proxies.json"

   def fetch_data(url):
       try:
           response = requests.get(url)
           response.raise_for_status()
           return response.json()
       except requests.exceptions.RequestException as e:
           console.print(f"[red]Ошибка при загрузке данных: {e}[/red]")
           return None

   def update_databases():
       console.print("[bold cyan]Обновление баз данных...[/bold cyan]")
       vpn_data = fetch_data(VPN_URL)
       proxy_data = fetch_data(PROXY_URL)

       if vpn_data:
           with open(VPN_FILE, "w", encoding='utf-8') as f:
               json.dump(vpn_data, f, ensure_ascii=False, indent=4)
           console.print("[green]База VPN успешно обновлена![/green]")
       
       if proxy_data:
           with open(PROXY_FILE, "w", encoding='utf-8') as f:
               json.dump(proxy_data, f, ensure_ascii=False, indent=4)
           console.print("[green]База Прокси успешно обновлена![/green]")

   def load_vpn():
       try:
           with open(VPN_FILE, "r", encoding='utf-8') as f:
               return json.load(f)
       except FileNotFoundError:
           console.print(f"[red]Файл {VPN_FILE} не найден. Пожалуйста, обновите базы данных.[/red]")
           return None
       except json.JSONDecodeError:
           console.print(f"[red]Ошибка при чтении {VPN_FILE}. Файл повреждён.[/red]")
           return None

   def load_proxies():
       try:
           with open(PROXY_FILE, "r", encoding='utf-8') as f:
               return json.load(f)
       except FileNotFoundError:
           console.print(f"[red]Файл {PROXY_FILE} не найден. Пожалуйста, обновите базы данных.[/red]")
           return None
       except json.JSONDecodeError:
           console.print(f"[red]Ошибка при чтении {PROXY_FILE}. Файл повреждён.[/red]")
           return None

   def display_vpn():
       vpn_list = load_vpn()
       if not vpn_list:
           return

       table = Table(title="Список VPN", header_style="bold magenta")

       table.add_column("№", style="dim", width=4)
       table.add_column("Страна", style="cyan")
       table.add_column("DDNS", style="green")
       table.add_column("IP", style="yellow")
       table.add_column("Аптайм", style="blue")
       table.add_column("Качество", style="green")
       table.add_column("Пинг", style="magenta")
       table.add_column("Логин", style="cyan")
       table.add_column("Пароль", style="cyan")

       for idx, vpn in enumerate(vpn_list, start=1):
           table.add_row(
               str(idx),
               vpn.get("country", ""),
               vpn.get("ddns", ""),
               vpn.get("ip", ""),
               vpn.get("uptime", ""),
               vpn.get("quality", ""),
               vpn.get("ping", ""),
               vpn.get("login", ""),
               vpn.get("password", "")
           )
       
       console.print(table)

   def display_proxies():
       proxy_list = load_proxies()
       if not proxy_list:
           return

       table = Table(title="Список Прокси", header_style="bold green")

       table.add_column("№", style="dim", width=4)
       table.add_column("Тип", style="cyan")
       table.add_column("IP", style="yellow")
       table.add_column("Порт", style="blue")
       table.add_column("Локация", style="green")
       table.add_column("Скорость", style="magenta")
       table.add_column("Анонимность", style="cyan")

       for idx, proxy in enumerate(proxy_list, start=1):
           table.add_row(
               str(idx),
               proxy.get("type", ""),
               proxy.get("ip", ""),
               proxy.get("port", ""),
               proxy.get("loc", ""),
               proxy.get("speed", ""),
               proxy.get("anonymity", "")
           )
       
       console.print(table)

   def main_menu():
       while True:
           console.print(Panel.fit("[bold yellow]Главное Меню[/bold yellow]", border_style="blue"))
           table = Table(show_header=False, box=None)
           table.add_column()
           table.add_row("1) VPN")
           table.add_row("2) Прокси (HTTP, HTTPS, SOCKS5)")
           table.add_row("3) Обновить базы данных")
           table.add_row("4) Выход")
           console.print(table)

           try:
               choice = IntPrompt.ask("Выберите опцию", choices=["1", "2", "3", "4"])
           except KeyboardInterrupt:
               console.print("\n[red]Выход из программы.[/red]")
               sys.exit()

           if choice == 1:
               display_vpn()
           elif choice == 2:
               display_proxies()
           elif choice == 3:
               update_databases()
           elif choice == 4:
               console.print("[bold red]До свидания![/bold red]")
               sys.exit()
           
           console.print("\n")  # Пустая строка для разделения

   if __name__ == "__main__":
       try:
           main_menu()
       except KeyboardInterrupt:
           console.print("\n[red]Программа прервана пользователем.[/red]")
           sys.exit()
   ```

4. **Описание кода:**

   - **Библиотеки:**
     - `requests`: Для HTTP-запросов к JSON-файлам.
     - `rich`: Для создания красивого интерфейса в терминале.
     - `json`: Для работы с JSON-данными.
     - `sys`: Для выхода из программы.

   - **Функции:**
     - `fetch_data(url)`: Загружает данные с указанного URL и возвращает JSON.
     - `update_databases()`: Обновляет локальные файлы `vpn.json` и `proxies.json` путем загрузки данных с заданных ссылок.
     - `load_vpn()`: Загружает локальные данные VPN из `vpn.json`.
     - `load_proxies()`: Загружает локальные данные прокси из `proxies.json`.
     - `display_vpn()`: Отображает список VPN в таблице.
     - `display_proxies()`: Отображает список прокси в таблице.
     - `main_menu()`: Основное меню программы, позволяющее выбирать опции.

5. **Настройка ссылок:**

   Не забудьте заменить `VPN_URL` и `PROXY_URL` на реальные ссылки на ваши JSON-файлы с VPN и прокси.

   ```python
   VPN_URL = "https://example.com/vpn.json"       # Замените на вашу ссылку
   PROXY_URL = "https://example.com/proxies.json" # Замените на вашу ссылку
   ```

6. **Запуск программы:**

   Перейдите в директорию с `main.py` и запустите скрипт:

   ```bash
   python main.py
   ```

7. **Пример данных:**

   Убедитесь, что ваши JSON-файлы (`vpn.json` и `proxies.json`) имеют корректную структуру. Примеры:

   - **vpn.json:**

     ```json
     [
         {
             "country": "Япония",
             "ddns": "public-vpn-232.opengw.net",
             "ip": "219.100.37.219",
             "uptime": "51 день",
             "quality": "235.26 мбит",
             "ping": "8 мс",
             "login": "vpn",
             "password": "vpn"
         },
         {
             "country": "США",
             "ddns": "us-vpn-101.opengw.net",
             "ip": "198.51.100.1",
             "uptime": "30 дней",
             "quality": "150.50 мбит",
             "ping": "15 мс",
             "login": "user",
             "password": "password"
         }
     ]
     ```

   - **proxies.json:**

     ```json
     [
         {
             "type": "http",
             "ip": "43.202.154.212",
             "port": "80",
             "loc": "Южная Корея",
             "speed": "350 мс",
             "anonymity": "Элита"
         },
         {
             "type": "socks5",
             "ip": "192.0.2.1",
             "port": "1080",
             "loc": "Германия",
             "speed": "200 мс",
             "anonymity": "Высокая"
         }
     ]
     ```

8. **Дополнительные улучшения:**

   - **Фильтрация прокси по типу:**
     
     Вы можете добавить возможность фильтровать прокси по типу (HTTP, HTTPS, SOCKS5). Для этого дополните функцию `display_proxies()` с запросом типа прокси от пользователя и отображением только соответствующих записей.

   - **Поиск VPN или прокси:**
     
     Добавьте функциональность поиска по определённым параметрам, например, по стране или скорости.

   - **Обработка ошибок:**
     
     Улучшите обработку ошибок, например, проверку доступности URL при обновлении баз данных.

Это базовый пример, который можно расширять и улучшать в зависимости от ваших потребностей. Библиотека `rich` предоставляет множество возможностей для создания красивых и функциональных интерфейсов в терминале, включая цветные таблицы, панели, прогресс-бары и многое другое.

Если у вас возникнут вопросы или потребуется дополнительная помощь, не стесняйтесь обращаться!
User: Так сделай 
1) чтобы привыводе топ 10 показывалось только страна (то есть откуда) и скорость ответа и последние обновление (uptime)
Assistant: Понял вас! Давайте обновим ранее предоставленный скрипт Python, чтобы при выборе пункта **1) VPN** выводились только **страна**, **скорость ответа** (quality) и **аптайм** (uptime) для верхних 10 записей.

### Обновлённый Код `main.py`

Ниже приведён полный обновлённый скрипт с внесёнными изменениями:

```python
import requests
import json
import sys
from rich import print
from rich.console import Console
from rich.table import Table
from rich.prompt import Prompt, IntPrompt
from rich.panel import Panel

# Инициализация консоли Rich
console = Console()

# Ссылки на JSON файлы
VPN_URL = "https://example.com/vpn.json"         # Замените на вашу ссылку
PROXY_URL = "https://example.com/proxies.json"   # Замените на вашу ссылку

# Локальные файлы для хранения данных
VPN_FILE = "vpn.json"
PROXY_FILE = "proxies.json"

def fetch_data(url):
    try:
        response = requests.get(url)
        response.raise_for_status()
        return response.json()
    except requests.exceptions.RequestException as e:
        console.print(f"[red]Ошибка при загрузке данных: {e}[/red]")
        return None

def update_databases():
    console.print("[bold cyan]Обновление баз данных...[/bold cyan]")
    vpn_data = fetch_data(VPN_URL)
    proxy_data = fetch_data(PROXY_URL)

    if vpn_data:
        with open(VPN_FILE, "w", encoding='utf-8') as f:
            json.dump(vpn_data, f, ensure_ascii=False, indent=4)
        console.print("[green]База VPN успешно обновлена![/green]")
    
    if proxy_data:
        with open(PROXY_FILE, "w", encoding='utf-8') as f:
            json.dump(proxy_data, f, ensure_ascii=False, indent=4)
        console.print("[green]База Прокси успешно обновлена![/green]")

def load_vpn():
    try:
        with open(VPN_FILE, "r", encoding='utf-8') as f:
            return json.load(f)
    except FileNotFoundError:
        console.print(f"[red]Файл {VPN_FILE} не найден. Пожалуйста, обновите базы данных.[/red]")
        return None
    except json.JSONDecodeError:
        console.print(f"[red]Ошибка при чтении {VPN_FILE}. Файл повреждён.[/red]")
        return None

def load_proxies():
    try:
        with open(PROXY_FILE, "r", encoding='utf-8') as f:
            return json.load(f)
    except FileNotFoundError:
        console.print(f"[red]Файл {PROXY_FILE} не найден. Пожалуйста, обновите базы данных.[/red]")
        return None
    except json.JSONDecodeError:
        console.print(f"[red]Ошибка при чтении {PROXY_FILE}. Файл повреждён.[/red]")
        return None

def display_vpn():
    vpn_list = load_vpn()
    if not vpn_list:
        return

    # Ограничиваем вывод до топ 10
    top_vpn = vpn_list[:10]

    table = Table(title="Топ 10 VPN", header_style="bold magenta")

    table.add_column("№", style="dim", width=4)
    table.add_column("Страна", style="cyan")
    table.add_column("Скорость ответа", style="green")
    table.add_column("Аптайм", style="blue")

    for idx, vpn in enumerate(top_vpn, start=1):
        table.add_row(
            str(idx),
            vpn.get("country", "—"),
            vpn.get("quality", "—"),
            vpn.get("uptime", "—")
        )
    
    console.print(table)

def display_proxies():
    proxy_list = load_proxies()
    if not proxy_list:
        return

    table = Table(title="Список Прокси", header_style="bold green")

    table.add_column("№", style="dim", width=4)
    table.add_column("Тип", style="cyan")
    table.add_column("IP", style="yellow")
    table.add_column("Порт", style="blue")
    table.add_column("Локация", style="green")
    table.add_column("Скорость", style="magenta")
    table.add_column("Анонимность", style="cyan")

    for idx, proxy in enumerate(proxy_list, start=1):
        table.add_row(
            str(idx),
            proxy.get("type", "—"),
            proxy.get("ip", "—"),
            proxy.get("port", "—"),
            proxy.get("loc", "—"),
            proxy.get("speed", "—"),
            proxy.get("anonymity", "—")
        )
    
    console.print(table)

def main_menu():
    while True:
        console.print(Panel.fit("[bold yellow]Главное Меню[/bold yellow]", border_style="blue"))
        table = Table(show_header=False, box=None)
        table.add_column()
        table.add_row("1) VPN")
        table.add_row("2) Прокси (HTTP, HTTPS, SOCKS5)")
        table.add_row("3) Обновить базы данных")
        table.add_row("4) Выход")
        console.print(table)

        try:
            choice = IntPrompt.ask("Выберите опцию", choices=["1", "2", "3", "4"])
        except KeyboardInterrupt:
            console.print("\n[red]Выход из программы.[/red]")
            sys.exit()

        if choice == 1:
            display_vpn()
        elif choice == 2:
            display_proxies()
        elif choice == 3:
            update_databases()
        elif choice == 4:
            console.print("[bold red]До свидания![/bold red]")
            sys.exit()
        
        console.print("\n")  # Пустая строка для разделения

if __name__ == "__main__":
    try:
        main_menu()
    except KeyboardInterrupt:
        console.print("\n[red]Программа прервана пользователем.[/red]")
        sys.exit()
```

### Внесённые Изменения

1. **Функция `display_vpn()`**:
    - **Ограничение до топ 10**: Используем срез `vpn_list[:10]`, чтобы взять только первые 10 записей из списка VPN.
    - **Вывод только необходимых полей**: В таблице отображаются только **№**, **Страна**, **Скорость ответа** (`quality`) и **Аптайм** (`uptime`).
    - **Название таблицы**: Изменено на "Топ 10 VPN" для большей ясности.

    ```python
    def display_vpn():
        vpn_list = load_vpn()
        if not vpn_list:
            return

        # Ограничиваем вывод до топ 10
        top_vpn = vpn_list[:10]

        table = Table(title="Топ 10 VPN", header_style="bold magenta")

        table.add_column("№", style="dim", width=4)
        table.add_column("Страна", style="cyan")
        table.add_column("Скорость ответа", style="green")
        table.add_column("Аптайм", style="blue")

        for idx, vpn in enumerate(top_vpn, start=1):
            table.add_row(
                str(idx),
                vpn.get("country", "—"),
                vpn.get("quality", "—"),
                vpn.get("uptime", "—")
            )
        
        console.print(table)
    ```

2. **Обработка Отсутствующих Данных**:
    - В случаях, если какое-либо поле отсутствует или недоступно в данных, вместо пустой строки отображается "—" для лучшей читаемости.

    ```python
    vpn.get("country", "—"),
    vpn.get("quality", "—"),
    vpn.get("uptime", "—")
    ```

3. **Обновление Заголовков и Названий Таблиц**:
    - Заголовок таблицы VPN изменён на "Топ 10 VPN" для соответствия текущей функциональности.
    - Остальные части интерфейса остаются без изменений.

### Дополнительные Рекомендации

1. **Сортировка VPN по Критериям**:
    - Если вы хотите отображать VPN с наилучшей скоростью или наименьшим пингом, можно отсортировать список перед выборкой топ 10. Например, сортировка по `quality` (скорость):

    ```python
    top_vpn = sorted(vpn_list, key=lambda x: float(x.get("quality", 0)), reverse=True)[:10]
    ```

    Или сортировка по `ping` (наименьший пинг):

    ```python
    top_vpn = sorted(vpn_list, key=lambda x: int(x.get("ping", 0)))[:10]
    ```

    Выберите критерий, который наиболее важен для ваших нужд.

2. **Фильтрация или Поиск**:
    - Добавьте возможность фильтрации VPN по странам или другим параметрам.
    - Реализуйте поиск по определённым критериям для более гибкого управления VPN.

3. **Улучшение Пользовательского Интерфейса**:
    - Используйте дополнительные возможности библиотеки `rich` для улучшения визуального представления, такие как цветовые схемы, иконки и т.д.
    - Добавьте навигацию назад в меню после просмотра VPN или прокси, чтобы пользователи могли легко переключаться между опциями.

### Пример Обновлённого JSON (`vpn.json`)

Убедитесь, что ваш `vpn.json` структурирован правильно. Вот пример с несколькими записями:

```json
[
    {
        "country": "Япония",
        "ddns": "public-vpn-232.opengw.net",
        "ip": "219.100.37.219",
        "uptime": "51 день",
        "quality": "235.26 мбит",
        "ping": "8 мс",
        "login": "vpn",
        "password": "vpn"
    },
    {
        "country": "США",
        "ddns": "us-vpn-101.opengw.net",
        "ip": "198.51.100.1",
        "uptime": "30 дней",
        "quality": "150.50 мбит",
        "ping": "15 мс",
        "login": "user",
        "password": "password"
    },
    // Добавьте дополнительные записи по необходимости
]
```

### Запуск Программы

После внесения изменений сохраните файл `main.py` и запустите скрипт:

```bash
python main.py
```

Выберите пункт **1) VPN** из главного меню, и вы увидите таблицу с топ 10 VPN, отображающую только **Страну**, **Скорость ответа** и **Аптайм**.

### Заключение

Теперь при выборе опции **1) VPN** ваш скрипт будет отображать только необходимые поля для топ 10 VPN, что делает вывод более компактным и информативным. Если у вас возникнут дополнительные пожелания или вопросы, пожалуйста, дайте знать!
User: Вот ссылки 
впн
https://levpro.ru/uploads/vpn.json?v3
прокси
blob:https://gologin.com/aff19fc2-8919-4efc-9898-92ea45ea3b7a