Просмотр отдельного сообщения
Старый 15.08.2002, 00:34   #21
Гость
 
Сообщений: n/a
Цитата:
Originally posted by Vasya Gondorsky
Что там у нас с парсером?
Собирать о постах нужно:
автор
id в базе данных
id треда
дата создания
дата редактирования
есть ли аттач, если да - его id
вроде все.
Так, ну ладно, давайте хотя бы словесный алгоритм набросаем... Итак, берем линк на какую то ветвь (предположим эту, т.е. http://www.imladris.net/forums/showthread.php?s=&threadid=13093&perpage=50000). Теперь находим вот такую строчку "Henneth Annun</a> > " как только ее нашли, снимаем все что за ней находится вплоть до тага "</b>" Это название нашей ветви, закидываем его в базу данных если еще надо закинуть ID пользователя, который создал ветвь, то не закидываем сразу, а ждем пока не разберем первое сообщение на кусочки (см. дальше). Далее, находим начало первого сообщения (каждое сообщение находится в своей таблице, т.е. находим "<table cellpadding="4" cellspacing="1" border="0"width="100%">") выкидываем первую часть сообщения нафиг и берем только то, что находится за этой строчкой включительно. Далее делаем split (в разных языках функция по разному называется, но это та функция которая берет строчку и делает из нее array строчек разбивая их по данной строчке) на "<table cellpadding="4" cellspacing="1" border="0"width="100%">" теперь у нас есть массив, где в каждой ячейке валяется по сообщению (в последней будет висеть еще и все что после последнего сообщения и до конца страницы). После этого ищем строчку "<a name="post814342"></a>" это дает нам номер сообщения (хотя пока я его использовать не буду). Следующая строчка после этой будет выглядеть где то так: <font face="verdana, arial, helvetica" size="2" ><b>Natalie</b></font><br>, откуда мы можем выдрать имя пользователя, который сообщение послал. Далее проверяем есть ли пользователь с таким именем в нашей базе данных. Если есть, то берем его ID и записываем в переменную. Если нету, то подберем его позже. Далее ищем
то место где открывается новая колонка таблицы (т.е. <td bgcolor="#31639c" width="100%" valign="top">) Как только мы это место находим, идем на следующую строчку, которая начинается вот так <font face="verdana,arial,helvetica" size="1" > все что висит между этим тагом и закрывающим </font> тагом, это заголовок сообщения + если есть иконка. идем на следующую строчку. Все что находится между тагами <p> и </p> это текст сообщения (включая цитаты из других сообщений, цитаты засунуты в таги <blockquote>). Присваиваем все это дело очередной переменной. Идем к вот такой строчке "<td bgcolor="#31639c" width="175" height="16" nowrap>" и вырезаем от туда дату и время сообщения. В это время проверяем, есть ли у нас уже ID пользователя который послал это сообщение, если есть, то скидываем все значения переменных в базу и переходим к следующему сообщению, а если пользователь не существует, то переходим вот на эту страницу (http://www.imladris.net/forums/member.php?s=&action=getinfo&userid=5043) и забираем от туда следующую информацию: Date Registered, Status, Homepage, и т.д. а можно ее и не забирать, сами после переезда заполнят:-)) Создаем нового пользователя в базе данных, с именем, которое мы подобрали и случайным паролем, запоминаем ID пользователя и теперь закидываем сообщение которое мы разобрали в базу данных. Переходим к следующему сообщению, и т.д. пока не дойдем до конца страницы. Вроде бы все....