Модуль состоит из двух частей
- Парсер и сохранение информации в БД
- Админка ассоциации данных
Для упрощения развёртывания используется vagrant. Система контроля версий Git.
- Консольные команды сущностей разделены, если это возможно. Категории, страницы продукта, список файлов - это три разные консольные команды
- Повторный запуск команды не приводит к удалению информации, а лишь обновляет её. Особенно это важно по хранению сущностей основного проекта
- Все данные получаемые от производителя кэшируется "как есть", это позволяет перенастраивать парсер без необходимости повторной закачки данных
- Чтобы парсинг данных можно было легко перенастраивать для разбора используется DOM модель документа
./yii parser-amd/parse/tree
./yii parser-amd/parse/files
./yii parser-amd/parse/operation-system
- Реализовать ассоциации сущностей: типы оборудования, операционные системы, типы файлов, серии продукта, продукты
- Типы оборудования и серии на выводе сводить к дереву
- Связка с основным основного проекта сохраняется внутри сущности парсера
- Все таблицы должны иметь поле createdAt
- У всех таблиц должен быть первичный ключ
- Если данные уникальные, соответствующий индекс должен быть создан
- Извлекать нужно всю доступную информацию по серии, продукту и файлу
- Если описание предоставлено в html его нужно сохранить с оригинальным форматированием
- Ошибки приложения явные и ориентированные на человека
- Нужно следовать примеру кода данным в скелетоне. camelCase, отступ четыре пробела, единственное число для сущностей и т.д.
- Семантическое разделение данных и переменных производителя и основного проекта производится префиксами
source
,real
.
- php >= 7.2
- mariadb >= 10.2
- Yii > 2.15.0
- Тестовый рабочий код на примере парсера AMD
- Организация и подключение модуля Yii2
- Обертка для работы с DOM делающая работу с DOM удобнее. https://github.com/bezdelnique/parser-toolbox
- Все взаимодействие с источником данных вынесено в отдельный класс:
helpers/Downloader.php
- Реализация массовых вставок в БД с сохранением данных при помощи класса
EntitiyBulk
- В админке реализован ассоциатор для дерева категорий и остальных сущностей
mkdir parser-skeleton
cd parser-skeleton
git archive --remote=git@bitbucket.org:bezdelnique/parser-skeleton.git master --format=tar | tar -xv
vagrant up
vagrant ssh
mysql -uroot -Dparser -f < /app/vagrant/mysql/parser_skeleton.sql
Создание проекта на базе скелетона
mkdir parser-amd
cd parser-amd
git archive --remote=git@bitbucket.org:bezdelnique/parser-skeleton.git master --format=tar | tar -xv
mv parser/modules/skeleton parser/modules/amd
find parser/modules/amd -type f -print0 | xargs -0 sed -i 's/skeleton/amd/g'
find parser/modules/amd -type f -print0 | xargs -0 sed -i 's/Skeleton/Amd/g'
find common/config/main.php -type f -print0 | xargs -0 sed -i 's/skeleton/amd/g'
find common/config/main.php -type f -print0 | xargs -0 sed -i 's/Skeleton/Amd/g'
find vagrant -type f -print0 | xargs -0 sed -i 's/skeleton/amd/g'
find appbackend/views/layouts/left.php -type f -print0 | xargs -0 sed -i 's/skeleton/amd/g'
git init
git add --all
git commit
git remote add origin git@bitbucket.org:bezdelnique/parser-amd.git
git push -u origin master
vagrant up
В этой точки документации проект доступен для работы.
SSH
vagrant ssh
ssh vagrant@192.168.83.137
Веб
База данных
192.168.83.137:3306
user: root
pass: 12345
db: parser
Консольные команды парсера
./yii parser-skeleton/parse/tree
./yii parser-skeleton/parse/file-list
./yii parser-skeleton/parse/operation-system
Внимание! Внутри VM, в том числе и в конфигурации приложения, используется root без пароля.
Директория проекта на сервере /app
Модуль подключается в файле common/config/main.php
в секциях bootstrap и modules.
tree -d parser
├── components
│ └── AssocResourceReal
├── entities
│ └── FakeHardware
│ └── Series
├── helpers
│ └── Sys
└── modules
├── _common
│ └── views
│ ├── assoc
│ └── components
├── migrations
└── amd
├── commands
├── controllers
│ └── AssocActions
├── __docs
├── entities
│ ├── HardwareFile
│ ├── HardwareRelFile
│ ├── HardwareTree
│ └── OperationSystem
├── helpers
└── views
├── assoc
├── default
└── testing
- Проверить конфигурацию модуля
parser/modules/amd/config.php
- Сделать дамп итоговой БД:
parser/modules/amd/__docs/database-prod.sql
- Написать список доступных команд
parser/modules/amd/__docs/commands.md
- Закоммитить изменения в Git
- Команды отрабатывают без сбоев при первичном запуске (БД пустая)
- Команды отрабатывают без сбоев при вторичном запуске
- Команды сохраняют данные о связях с основным проектом
- Новые связи создаются, а старые сохраняются
- Новые сущности серий и продуктов создаются и связка сохраняется
- Удаление ассоциации работает
- Указать какие хелперы вне модуля были модифицированы