Написание парсеров, php
Необходимо написать парсеры для автомобильных клубов (авто форумы).
Всего нужно 53 штуки (Украинские), позже будут еще – Русские, за отедльную оплату.
Парсер должен выполнять следующие действия с автоклубом:
1. Логинится на форум
2. Получать айдишку залогиненого пользователя.
3. Читать свои приватные сообщение
4. Отсылать приватные сообщение
5. Удалять свои приватные сообщения
6. Получать количество сообщений, которые написал указанный пользователь
7. Получать список друзей указанного пользователя
8. Получать список всех зарегистрированных пользователей на форуме
На данный момент есть парсеры для 11 клубов как пример и сформированная структура классов:
Curl->ForumParser->ForumEngine->ForumDeviation
Curl – Класс обертка над curl для извлечения страниц и автоматического сохранения куков, что бы оставаться залогиненым и серфить как обычный броузер.
ForumParser – базовый абстрактный класс, создающий интерфейс и содержащий базовые методы.
ForumEngine – разделение форумов по движкам – IPB, phpBB, MyBB и прочее. На каждый движек свой класс. На данный момент есть парсеры для IPB 3ех версий, phpBB 2ух версий, MyBB
ForumDeviation – самый нижний уровень, что бы покрыть специфические нужды/отличия конкретного форума.
Так же написаны самопальные тест кейсы для автоматического тестирования. Самопальные значит без использования известных фреймворков. Их дописывать не нужно. Для каждого форума нужно просто создать дочерний тест класс, в котором будут указанны логин/пароль к конкретному форуму.
На каждом форуме нужно зарегистрироваться 2 раза. На некоторых придется написать несколько сообщений, что бы новому пользователю открылась возможность отсылать приватные сообщения.
Т.к. регулярные выражения очень важны, рассмотрю только тех кандидатов, которые напишут следующую регулярку (у меня заняло около 3 минут):
Исходные данные:
Ай&pod!
Ай&pod!
username
Ай&pod!
Получить такой же массив регуляркой и что самое главное как можно универсальнее и проще:
Array
(
[0] => Array
(
…
)
[1] => Array
(
[0] => 12345
[1] => 2
[2] => 3
[3] => 4
)
[2] => Array
(
[0] => Ай&pod!
[1] => Ай&pod!
[2] => username
[3] => Ай&pod!
)
)