Машинный перевод
Эта страница была автоматически переведена ИИ и может содержать ошибки. Если что-то неясно, обращайтесь к английскому источнику.
Конфигурация¶
pplx-export хранит ваши идентификационные данные — реестр учетных записей (отображаемые имена, адреса электронной почты для входа, идентификаторы пользователей) и пространство BOT — в пользовательском TOML-файле, который находится вне репозитория. Эта страница описывает, где находится этот файл, все поля, которые он принимает, что происходит, когда он отсутствует, и как реестр управляет обработкой cookie для нескольких учетных записей.
a. Почему конфигурация находится вне репозитория¶
Реестр учетных записей и пространство BOT являются личными данными и никогда не фиксируются в репозитории (pplx_export/config.py:7-12). Репозиторий поставляет только шаблон-заполнитель, config.example.toml; ваши реальные значения помещаются в личную копию. Все остальное, что нужно инструменту — домен сайта, URL-адреса API, корневой каталог архива по умолчанию — является константой кода (pplx_export/config.py:50-58), а не пользовательской конфигурацией.
TOML содержит только идентификационные данные. Выбор источника cookie и транспорта осуществляется через флаги CLI при каждом вызове, а не поля конфигурации — см. Флаги CLI, а не поля конфигурации ниже.
b. Расположение и приоритет загрузки¶
configure() (pplx_export/config.py:113) определяет путь к конфигурации со следующим приоритетом (pplx_export/config.py:95-110):
| Приоритет | Источник | Считается явным |
|---|---|---|
| 1 | Флаг CLI --config PATH |
да |
| 2 | Переменная окружения PPLX_EXPORT_CONFIG |
да |
| 3 | ~/.config/pplx-export/config.toml (путь по умолчанию) |
нет |
«Явный» важен для поведения при ошибке, когда файл отсутствует — см. режим пониженной функциональности. Оба варианта CLI перезагружают конфигурацию в строгом режиме после разбора аргументов (pplx_export/cli.py:223, pplx_export/ask_cli.py:278); загрузка во время импорта (pplx_export/config.py:174-179) отказоустойчива, поэтому импорт пакета никогда не завершается ошибкой из-за отсутствующего файла.
c. Создание вашей конфигурации¶
Автоматическая альтернатива
pplx-export init может создать этот файл автоматически — он обнаруживает учетные записи, в которые выполнен вход, из cookie вашего браузера и записывает TOML с правами 0600. См. pplx-export → init.
mkdir -p ~/.config/pplx-export
cp config.example.toml ~/.config/pplx-export/config.toml
chmod 600 ~/.config/pplx-export/config.toml
Затем отредактируйте копию. Шаблон использует чистые заполнители — скопируйте структуру, замените каждое значение:
# Default account used when --account is not given (a key of [accounts.<name>] below)
default_account = "alice"
# Account registry: key = account username (the username in thread URLs / library)
[accounts.alice]
# Full display name: used for archive directory naming (web_archive/<display name>/…)
display_name = "Alice Example"
# Login email: verifies cookie ownership
email = "alice@example.com"
# Account uid (required for thread-viewed telemetry)
user_id = "00000000-0000-4000-8000-0000000000aa"
[accounts.bob]
display_name = "Bob Example"
email = "bob@example.com"
user_id = "00000000-0000-4000-8000-0000000000bb"
# BOT space: where threads created by pplx-ask are collected after completion
[bot_space]
uuid = "00000000-0000-4000-8000-0000000000b0"
slug = "bot-EXAMPLE"
Стиль заполнителей: alice/bob — вымышленные имена пользователей учетных записей, адреса электронной почты используют example.com, а UUID — форму со всеми нулями 00000000-0000-4000-8000-…. В вашем реальном файле ключ таблицы должен быть фактическим именем пользователя учетной записи, как оно отображается в URL-адресах обсуждений и вашей библиотеке.
Храните в тайне
Реальная конфигурация содержит личные данные (адреса электронной почты, идентификаторы пользователей). Рекомендуемые права доступа — 0o600; никогда не фиксируйте ее в каком-либо git-репозитории (config.example.toml:4-6).
d. Справочник полей¶
d.1 Верхний уровень¶
| Поле | Тип | Значение |
|---|---|---|
default_account |
строка | Ключ одной таблицы [accounts.<name>], используемый, когда --account не указан (pplx_export/commands/common.py:84-85). Пусто/отсутствует = режим пониженной функциональности. |
archive_root |
строка | Необязательный. Корневой каталог вывода архива, используемый как запасной вариант для --out, чтобы повседневные команды могли опускать --out. Приоритет: --out > archive_root > ./web_archive (pplx_export/config.py, загружается в ARCHIVE_ROOT; разрешается в cli.py / ask_cli.py). ~ раскрывается. |
[models] (таблица) |
таблица | Автоматически управляемая, не создаваемая вручную. Обновляемый каталог моделей, записываемый pplx-ask models --refresh и заполняемый pplx-export init; он переопределяет фиксированную базовую версию в pplx_export/sites/perplexity/platform.py. Ключи: last_refreshed (UTC), source_version, auto_refresh (логическое), mode_defaults, council_defaults, search_models и полный [models.catalog] (id → {label, provider, mode}). Запросы читают его (с базовой версией platform.py в качестве запасного варианта); TTL в 7 дней выводит напоминание об обновлении или автоматически обновляется, когда auto_refresh = true. Циклическая запись сохраняет ваши другие таблицы и комментарии (через зависимость времени выполнения tomlkit) и остается 0600. |
d.2 [accounts.<name>]¶
Одна таблица на учетную запись; <name> — это имя пользователя учетной записи. Реестр загружается в три словаря, ключом которых является имя пользователя: ACCOUNT_DISPLAY_NAMES, ACCOUNT_EMAIL, ACCOUNT_UID (pplx_export/config.py:65-75).
| Поле | Тип | Обязательное | Значение |
|---|---|---|---|
display_name |
строка | нет | Полное отображаемое имя, используется для именования каталогов архива (web_archive/<display name>/…); при отсутствии используется имя пользователя. См. Структура архива. |
email |
строка | рекомендуется | Адрес электронной почты для входа. Транспорт проверяет принадлежность cookie по нему, предотвращая «экспорт для учетной записи B с сессией учетной записи A» (pplx_export/config.py:69-72). При несовпадении инструмент перечисляет токены сессии для каждой учетной записи в браузере и переключается автоматически — см. Модель cookie для нескольких учетных записей. |
user_id |
строка | для телеметрии pplx-ask |
Идентификатор учетной записи, необходимый для телеметрии просмотров обсуждений (pplx_export/config.py:73-75). Прочитайте его из GET /api/auth/linked-accounts, который возвращает user_id / email / display_name для каждой учетной записи, в которую выполнен вход — см. Аутентификация API. |
d.3 [bot_space]¶
Пространство BOT — это точка сбора для обсуждений, созданных pplx-ask после их завершения (pplx_export/config.py:76-79). Создайте само пространство с помощью pplx-ask space-create (см. pplx-ask), затем зарегистрируйте его здесь.
| Поле | Тип | Значение |
|---|---|---|
uuid |
строка | UUID пространства. pplx-ask перемещает завершенные обсуждения сюда (pplx_export/ask_cli.py:156-158); если пусто, шаг перемещения пропускается. |
slug |
строка | URL-слаг пространства. Загружается в BOT_SPACE_SLUG (pplx_export/config.py:79); CLI времени выполнения не читает его — его использует инструмент обслуживания тестовых данных, создавая из него пару для замены идентификаторов (tests/scrub_fixtures.py:446-447). |
d.4 Флаги CLI, а не поля конфигурации¶
TOML не содержит настроек транспорта или cookie. Они выбираются при каждом вызове:
| Аспект | Где задается |
|---|---|
| Путь к файлу конфигурации | --config PATH, или PPLX_EXPORT_CONFIG |
| Источник cookie | --cookies-from BROWSER / --cookies FILE |
| Транспорт | --transport cookie\|webbridge (только pplx-export; по умолчанию cookie) |
| Пропустить проверку учетной записи при запуске | --skip-auth-check (оба варианта) — см. Модель cookie для нескольких учетных записей |
Полный справочник флагов см. в pplx-export.
e. Отсутствие конфигурации: режим пониженной функциональности¶
Если ничего не загружено, реестры на уровне модуля остаются пустыми, а LOADED_CONFIG_PATH равен None (pplx_export/config.py:83-85). Поведение по сценариям (resolve_cli_account, pplx_export/commands/common.py:51-90):
| Сценарий | Поведение |
|---|---|
Нет конфигурации по пути по умолчанию, --account не указан |
Режим пониженной функциональности: регистрируется предупреждение, и команды выполняются с учетной записью-заполнителем (username='default'); проверка принадлежности электронной почты пропускается. Повседневные автономные команды не затрагиваются (pplx_export/commands/common.py:86-90). |
Нет конфигурации, явный --account |
SystemExit с указанием порядка поиска и ссылкой на config.example.toml (pplx_export/commands/common.py:67-74). |
Конфигурация загружена, --account не зарегистрирован |
SystemExit с указанием загруженного файла и просьбой добавить [accounts.<name>] (pplx_export/commands/common.py:77-82). |
Явный путь (--config / переменная окружения) не существует |
ConfigError в строгом режиме (pplx_export/config.py:140-146). |
| Файл существует, но не может быть разобран | Всегда ConfigError — поврежденная конфигурация не должна незаметно деградировать (pplx_export/config.py:147-150). |
--account опущен, конфигурация загружена |
Используется default_account (pplx_export/commands/common.py:84-85). |
Что подразумевается под «автономными командами» и как работа в режиме пониженной функциональности взаимодействует с архивом, подробно описано в Автономные операции.
f. Модель cookie для нескольких учетных записей¶
Если в один и тот же браузер выполнен вход с несколькими учетными записями, хранилище содержит один сессионный cookie для каждой учетной записи, а поле email конфигурации сообщает инструменту, какая из них нужна:
- Каждая учетная запись, в которую выполнен вход, имеет cookie
__Secure-pplx.session.<uid>(ACCOUNT_SESSION_PREFIX,pplx_export/core/cookies/loaders.py:171); суффикс<uid>— этоuser_idучетной записи. - Активная учетная запись — это та, чей токен в данный момент находится в
__Secure-next-auth.session-token(ACTIVE_SESSION_COOKIE,pplx_export/core/cookies/loaders.py:172). Переключение учетных записей = запись значения cookie целевой учетной записи в этот cookie — без необходимости в интерфейсе браузера (pplx_export/core/cookies/loaders.py:180-187). - При запуске транспорт проверяет
GET https://www.perplexity.ai/api/auth/sessionи сравнивает возвращенный адрес электронной почты сaccounts.<name>.email(pplx_export/commands/common.py:126-130). - При несовпадении
_try_switch_account(pplx_export/commands/common.py:190-215) перечисляет все токены учетных записей в браузере черезlist_account_tokens(pplx_export/core/cookies/loaders.py:175-206, отдавая предпочтение записям на поддоменеwww.), пробует каждый из них в__Secure-next-auth.session-tokenи перестраивает транспорт при первом совпадении. - Если ни один токен не совпадает, команда завершается с указанием обоих адресов электронной почты и просьбой сначала выполнить вход в целевую учетную запись в браузере (
pplx_export/commands/common.py:142-145) — см. Устранение неполадок. - Учетная запись без зарегистрированного
emailобрабатывается без проверки, с предупреждением, предлагающим вам самостоятельно подтвердить вход в браузер (pplx_export/commands/common.py:146-149).
Полный процесс переключения и семантика конечных точек сессии описаны в Ask и учетные записи и Аутентификация API.
Пропуск проверки (--skip-auth-check). Описанный выше зондирующий запрос сессии при запуске
обменивает несколько секунд — иногда минут при плохом сетевом соединении — на защиту от использования «учетной записи B
в качестве учетной записи A». Когда вы знаете, что в браузере выполнен вход в
правильную учетную запись, --skip-auth-check (общий для pplx-export и pplx-ask) пропускает
этот зондирующий запрос полностью и сразу приступает к работе (pplx_export/commands/common.py,
make_transport):
- Нет
GET /api/auth/sessionпри запуске, поэтому нестабильная сеть больше не вызывает долгого молчаливого ожидания (теперь с пульсацией) перед первым реальным запросом. - Инструмент доверяет той учетной записи, которая в данный момент вошла в систему; упреждающая проверка принадлежности электронной почты и автоматическое переключение между несколькими учетными записями, описанные выше, не выполняются.
- Отложенная защита: в
batch, после накопления общих ошибок экспорта (три сбоя), выполняется однократная проверка учетной записи, которая предупреждает вас о том, что было обнаружено — срок действия cookie истек, учетная запись не соответствует целевой или учетная запись в порядке (значит, ошибки связаны с сетью / ограничением скорости, а не с аутентификацией) (pplx_export/commands/common.py,report_account_status;pplx_export/commands/batch_cmd.py). - Компромисс: отложенная проверка обнаруживает cookie с истекшим сроком действия, но она не может
обнаружить неправильную, но действительную учетную запись, которая экспортируется без ошибок — с
--skip-auth-checkвы берете на себя ответственность за то, что вошедшая в систему учетная запись является целевой.
Используйте этот флаг для быстрых, неавтоматизированных запусков с заведомо правильным входом; опускайте его, когда вы полагаетесь на упреждающую защиту принадлежности или автоматическое переключение учетных записей.
g. Кэш cookie¶
После успешной проверки разрешенные cookie кэшируются, чтобы последующие запуски пропускали браузер:
| Свойство | Значение |
|---|---|
| Путь | <archive root>/index/.cookies.json — следует за --out (pplx_export/commands/common.py:111) |
| Свежесть | 12 часов (CACHE_MAX_AGE_S = 12 * 3600, pplx_export/core/cookies/cache.py:22); устаревший или поврежденный кэш считается отсутствующим |
| Содержимое | fetched_at, source, account_email, cookies (pplx_export/core/cookies/cache.py:62-66) |
| Запись | Атомарно: временный файл создается с режимом 0o600, затем os.replace (pplx_export/core/cookies/cache.py:49-67) |
| Git | Охватывается .gitignore (**/index/.cookies.json) |
Порядок разрешения cookie (cookies.resolve, pplx_export/core/cookies/loaders.py:270-302): явный --cookies-from → явный файл --cookies → свежий кэш → автоматическое обнаружение браузеров (edge → chrome → firefox → safari). Кэш обновляется после каждой успешной проверки учетной записи (pplx_export/commands/common.py:150).
h. Защита ваших файлов¶
chmod 600вашconfig.toml— он содержит личные данные (адреса электронной почты, идентификаторы пользователей).- Кэш cookie уже записывается с режимом
0o600инструментом; сессионные cookie являются учетными данными, эквивалентными входу в систему. - Если вы вручную создаете файл cookie для
--cookies, примените к немуchmod 600.
i. Когда аутентификация не удается¶
Просроченные cookie, учетная запись, которую не может найти автоматическое переключение, ошибки разрешений связки ключей браузера и другие сбои аутентификации описаны в Устранение неполадок.