Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Нужно написать скрипт который сможет отпарсить 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` на текущую дату

6 лет назад
1113591
Сергей 
39 летБеларусь
8 лет в сервисе
Был
2 года назад