Проект веб-скрапера для сбора актуальных данных о коронавирусе с использованием Swoole.
Источник данных: https://3g.dxy.cn/newh5/view/pneumonia_peopleapp
Сбор данных осуществляется для следующих категорий: общие данные, данные по провинциям, данные по городам, а также данные по зарубежным регионам.
Пример доступа: https://test.yurunsoft.com/ncov/
Разработано с использованием фреймворка imi на основе Swoole https://www.imiphp.com/
Полный курс обучения по imi-фреймворку бесплатно доступен здесь: https://www.bilibili.com/video/av78158909
imi-cron — задачи планировщика https://doc.imiphp.com/components/task/cron.html
YurunHttp — пакет HTTP-запросов https://gitee.com/yurunsoft/YurunHttp
Извлечение данных с помощью регулярных выражений
Vue + Vux
Сначала установите среду Swoole: https://wiki.swoole.com/wiki/page/6.html
Перейдите в директорию src
, выполните команду: composer update
Загрузите файл db_ncov.sql
в базу данных MySQL
Отредактируйте конфигурацию базы данных в файле src/config/config.php
:
'resource' => [
'host' => '127.0.0.1',
'port' => 3306,
'username' => 'root',
'password' => 'root',
'database' => 'db_ncov',
'charset' => 'utf8mb4',
'options' => [
\PDO::ATTR_STRINGIFY_FETCHES => false,
\PDO::ATTR_EMULATE_PREPARES => false,
],
],
```### Отображение данных
Директория: `src/web`
Установка: `npm install`
Отредактируйте файлы `.env` и `.env.development` в директории `src/web` для изменения адреса API
Разработка и отладка: `vue-cli-service serve`
Компиляция статических страниц: `vue-cli-service build`
После компиляции статических страниц необходимо добавить прокси Nginx
## Инструкции по использованию
Перейдите в директорию `src`, выполните команду: `vendor/bin/imi server/start`
По умолчанию сбор данных происходит каждые три минуты. Для изменения этого значения обратитесь к файлу: `src/Module/Crawler/Cron/CrawlerTask.php`
## Участие в проекте
1. Fork этот репозиторий
2. Создайте новую ветку Feat_xxx
3. Подтвердите изменения
4. Создайте новый Pull Request
## API интерфейсы
### /api/statistics
Интерфейс статистики
Пример доступа: <https://test.yurunsoft.com/ncov/api/statistics>
### /api/areas
Интерфейс данных по областям
Параметры:| Название | Обязательный | Описание |
| - | - | - |
| city | | Включает ли данные о подгородах, 1 — включает, 0 — не включает. По умолчанию значение равно 1 |
Пример адреса:
<https://test.yurunsoft.com/ncov/api/areas>
<https://test.yurunsoft.com/ncov/api/areas?city=0>
### /api/statisticsDateSpan
Интерфейс запроса статистических данных за указанный период времени
Пример адреса: <https://test.yurunsoft.com/ncov/api/statisticsDateSpan?beginDate=2020-01-28&endDate=2020-02-29>
Параметры:
| Название | Обязательный | Описание |
| - | - | - |
| beginDate | √ | Дата начала |
| endDate | √ | Дата окончания |### /api/areasDateSpan
Интерфейс запроса статистических данных за указанный период времени для конкретной области
Пример адреса: <https://test.yurunsoft.com/ncov/api/areasDateSpan?countryType=1&provinceName=Сычуань%20провинция&beginDate=2020-01-28&endDate=2020-02-29>
Параметры:
| Название | Обязательный | Описание |
| - | - | - |
| countryType | √ | Тип страны; 1 — Китай, 2 — иностранная страна |
| provinceName | √ | Название региона (провинция) |
| beginDate | √ | Дата начала |
| endDate | √ | Дата окончания |
### /api/cityDateSpan
Интерфейс запроса статистических данных за указанный период времени для конкретного города
Пример адреса: <https://test.yurunsoft.com/ncov/api/cityDateSpan?parentId=34&cityName=Уси&beginDate=2020-01-28&endDate=2020-02-29>
Параметры:
| Название | Обязательный | Описание |
| - | - | - |
| parentId | √ | ID родителя (внутренний номер) |
| cityName | √ | Название города |
| beginDate | √ | Дата начала |
| endDate | √ | Дата окончания |
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.