Каталог авто из Кореи и Китая: фильтры, карточки и заявки на заказ
Translation pending
AI summary · website and README
CommerceJavaScript · CSSGitHub @valexer3OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
valexer3/vibecoder
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
AJ Import — сайт с каталогом Encar + Che168 Полный каркас: backend (парсинг + API) и frontend (каталог с фильтрами, карточки авто, заявки).Read the full README ↗
Полный каркас: backend (парсинг + API) и frontend (каталог с фильтрами, карточки авто, заявки).
backend/ Node.js/Express API + парсеры Encar/Che168 + PostgreSQL
frontend/ React + Vite каталог
createdb ajimport
psql ajimport -f backend/src/schema.sql
cd backend
cp .env.example .env # заполнить DATABASE_URL
npm install
npm run sync -- --once # разовая синхронизация (для проверки, что парсер работает)
npm run dev # API на :4000
Важно: npm run dev в backend поднимает только API-сервер (порт :4000) и
сам по себе НИЧЕГО не парсит и не обновляет в БД. sync.js (npm run sync,
без --once) — это отдельный постоянно работающий процесс/воркер: он
планирует задачи по CRON_SCHEDULE из .env (по умолчанию раз в 3 часа) и
обновляет каталог в фоне. В проде это два независимых процесса (например,
два отдельных сервиса/воркера на Railway) — не путай их и не рассчитывай,
что каталог обновится сам по себе, если запущен только npm run dev.
cd frontend
npm install
npm run dev # http://localhost:5173
Encar (Корея) — рабочий вариант "из коробки": используется полуоткрытый
JSON API, которым пользуется сам сайт encar.com. Требует аккуратного
троттлинга запросов и, при больших объёмах, IP из Кореи (см. PROXY_URL_KR).
Che168 (Китай) — работает, но только по СПИСКУ объявлений (без похода
на detail-страницу конкретной машины). Причина - detail-страницы Che168
эскалируют в интерактивную капчу (数美/ShuMei "安全验证") уже после ~4 быстрых
запросов подряд с одного IP (проверено вручную), тогда как список это делает
заметно реже и достаточно устойчив для регулярного sync. Из-за этого у
объявлений Che168 в каталоге НЕТ VIN, истории ДТП/техосмотра, полной
галереи фото и полной комплектации - только то, что реально отдаётся в
HTML списка (марка/модель через chineseDict.js, год, пробег, цена, город,
дилер, дата публикации, одно превью-фото). Список сам по себе за антибот-
защитой Tencent EdgeOne, поэтому парсинг идёт через headless Chromium
(Playwright), а не axios/cheerio - см. parsers/che168.js и chineseDict.js
(марка/модель по числовым brandid/seriesid резолвятся через общую базу
Autohome - car.autohome.com.cn, она НЕ защищена антиботом, в отличие от
самого che168.com).
PROXY_URL_CN (резидентский прокси из материкового Китая) в текущей
реализации не обязателен и не задан по умолчанию - защита Che168 привязана
к репутации/интенсивности запросов с IP, а не к гео-блокировке как таковой
(с одного и того же не-китайского IP доступ то давался, то нет). Если после
деплоя на Railway блокировка окажется стабильной - задай PROXY_URL_CN,
chromium.launch() в che168.js уже поддерживает эту переменную, менять
код не потребуется.
Деплой Che168-воркера на Railway требует отдельного шага - см. раздел "Деплой" ниже, обычный Nixpacks-билд Playwright/Chromium не поставит.
server.js) + PostgreSQL → Railway, обычный Nixpacks-билд
(npm install + npm start) - Chromium ему не нужен, менять ничего не надо.VITE-прокси/rewrite на backend API либо через
переменную окружения с полным URL backend, если понадобится вынести api.js
на абсолютный адрес.sync.js) - ОТДЕЛЬНЫЙ Railway-сервис (worker, не API), и
ему нужен другой билдер:
backend/Dockerfile.sync (не обычный Nixpacks -
он не поставит Chromium, нужный parsers/che168.js).Dockerfile.sync использует официальный образ
mcr.microsoft.com/playwright:v1.63.0-jammy - там уже есть Chromium
ровно нужной версии со всеми системными библиотеками, отдельно
playwright install вызывать не нужно. Версия тега образа должна
совпадать с версией пакета playwright в package.json - при
обновлении playwright не забудь поднять и тег в Dockerfile.sync.CMD уже задан в самом образе
(node src/sync.js), либо явно переопредели в настройках сервиса.docker build -f backend/Dockerfile.sync backend) и
свериться с лимитами текущего тарифа Railway (Settings → Usage в
дашборде Railway - я не имею доступа к твоему аккаунту, чтобы
проверить это самостоятельно).CRON_SCHEDULE в .env этого сервиса управляет частотой (по умолчанию
раз в 3 часа) - см. sync.js.CHE168_LIST_URLS в sync.js конкретными ссылкамиsync.js.che168.jschineseDict.js (~400 брендов из общей базы Autohome,
лениво догружаемые модельные ряды).price_rub — заглушка, считается только
курс валют; логику пошлины/акциза можно добавить отдельным модулем
backend/src/customs.js и дергать его при апсерте машины).