PHP скрипт - парсер google maps places
Нужно написать скрипт который сможет отпарсить google maps places и собрать интересующую нас информацию и 6000 офисов принадлежащих 35 компаниям
У нас есть mysql дам с компаниями и их офисами.
Дамп можно скачать тут -> https://www.dropbox.com/s/5grkyqjpvi0u6ca/ustates_companies.sql.zip?dl=0
В дампе 3 таблицы
1 - Компании
`wp_ustates_companies` (
`id` int(11) NOT NULL,
`pid` int(11) NOT NULL,
`slug` varchar(64) NOT NULL,
`name` varchar(64) NOT NULL
);
таблица содержит сведения о компаниях - 35 записей
у одной компании могут быть несколько дочерних
например строка VALUES (1, 0, 'speedy-cash', 'Speedy Cash'),
2 - Офисы
`wp_ustates_company_offices` (
`id` int(11) NOT NULL,
`company_id` int(11) NOT NULL,
`company_name` varchar(64) NOT NULL,
`state` varchar(32) NOT NULL,
`state_code` varchar(2) NOT NULL,
`city` varchar(255) NOT NULL,
`zip` varchar(16) NOT NULL,
`address` varchar(255) NOT NULL,
`tel` varchar(16) NOT NULL,
`tel2` varchar(16) NOT NULL,
`provider_google_maps_places_profile_url` varchar(512) NOT NULL,
`provider_google_maps_places_lr` datetime NOT NULL,
)
связь с первой таблицей через ID `wp_ustates_companies`.`id`=`wp_ustates_company_offices`.`company_id`
также дублируется название компаний `wp_ustates_companies`.`name` = `wp_ustates_company_offices`.`company_name`
таблица содержит сведения о адресах офисов компаний - около 6к записей
например строка VALUES (2, 1, 'Speedy Cash', 'Missouri', 'MO', 'Independence', '64052', '11221 E 23rd St', '(816) 833-1200', ''),
3 - Отзывы
`wp_ustates_company_office_reviews` (
`id` int(11) NOT NULL,
`office_id` int(11) NOT NULL,
`company_id` int(11) NOT NULL,
`provider` varchar(64) NOT NULL,
`provider_fr` datetime NOT NULL,
`provider_lr` datetime NOT NULL,
`date` datetime NOT NULL,
`date_str` varchar(64) NOT NULL,
`stars` float NOT NULL,
`user_id` int(11) DEFAULT NULL,
`name` varchar(64) NOT NULL,
`review` varchar(512) NOT NULL
)
связь с первой таблицей через ID
`wp_ustates_companies`.`id`=`wp_ustates_company_office_reviews`.`company_id`
связь со второй таблицей через ID
`wp_ustates_company_offices`.`id`=`wp_ustates_company_office_reviews`.`office_id`
таблица пустая - ЕЁ НУЖНО ЗАПОЛНИТЬ
В базу можно добавлять необходимые поля для работы скрипта, если понадобится (например чтобы ошибки отлавливать или дата/время последней попытки скана), и менять дефолтные значения для столбцов если нужно
Логика работы скрипта:
ПРЕДПОЧТИТЕЛЬНО РАБОТАТЬ ЧЕРЕЗ GOOGLE API ГДЕ ЭТО ВОЗМОЖНО
Проходим по всем записям таблице №2 с офисами компаний - опираясь на название, адрес и тел и находим профиль компании в google maps places
например по
Cashback Loans California CA Orange 92868 314 S Main St. (714) 203-6274
должны получить этот профиль https://www.google.com/maps/place/Cashback+Loans/@33.7838074,-117.8702047,17z/data=!4m5!3m4!1s0x80dcd9d08e47d047:0xebf27356e9a3af70!8m2!3d33.783803!4d-117.868016?hl=en
и сохранить его в поле `provider_google_maps_places_profile_url` из таблицы N2
на этом профиле видим Reviews https://www.dropbox.com/s/7wsjch4ebnkmul5/Screenshot%202017-12-16%2000.06.31.png?dl=0
внутри 5 отзывов https://www.dropbox.com/s/hyxm1605fdc4zte/Screenshot%202017-12-16%2000.07.40.png?dl=0
их нужно отпарсить и положить в таблицу №3
Пример заполнения для первого отзыва
`id`- авто инкремент
`office_id` - id офиса
`company_id` - id компании
`provider` - всегда = google_maps_places
`provider_fr` - дата первичного парсинга отзыва скриптом
`provider_lr` - дата последнего обновления отзыва скриптом при условии изменений в отзыве(касаемо даты - читайте ниже)
`date` - дата когда был оставлен отзыв если дата в читабельном числовом формате типа 2017-12-17 но для гугла она не подходит - ее пустую оставляем
`date_str` - дата нашем случае ‘a year ago’
`stars` - 1
`user_id` - в ссылке под именем есть урл https://www.google.com/maps/contrib/115142597581803593844/reviews?hl=en-EN нас интересует цифровая часть 115142597581803593844
`name` - sungyoon82
`review` - Rude service bad attitude never get a loan over there again. I hope they go outta business. Terrible customer service avoid at all costs
скрипт должен по мере работы формировать отчет чтобы можно было видеть
- сколько офисов отсканировано и сколько стоит на очереди
- сколько отзывов всего было добавлено
- список компаний у которых не оказалось ни одного отзыва (урл на профиль компании обязательно)
- сколько ошибок во время сканирования было
скрипт должен уметь перечитывать профиль компании для обновления инфы
- добавлять новые отзывы которых раньше не было но НЕ УДАЛЯТЬ старые которых уже нет
- учитывать что один пользователь может оставить несколько отзывов
- изменять `date_str` по необходимости и менять при этом `provider_lr` на текущую дату