Saleor Store
우리 컬렉션을 쇼핑하세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기valexer3/vibecoder
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
AJ Import — сайт с каталогом Encar + Che168 Полный каркас: backend (парсинг + API) и frontend (каталог с фильтрами, карточки авто, заявки).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 и дергать его при апсерте машины).