Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите плизз... Вообще задача такая. 
:(
    Опции темы
Alkash
Дата 26.7.2004, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



Есть форум на phpbb, нужно чтобы при вводе первой и последней страницы (Url) топика Прога пробегала по всем промежуточным страницам топика, и отсеивала все сообщения по такому принципу- количество слов, ник, сообщение, время.Ну соответственно ник 1, время отобразить всех сообщений и дату, плюс сами сообщения.


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
Kesh
Дата 26.7.2004, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Эксперт
Сообщений: 2488
Регистрация: 31.7.2002
Где: Германия, Saarbrü cken

Репутация: 4
Всего: 54



А при чем тут Delphi|Kylix|Pascal ?


--------------------
user posted image
PM MAIL WWW ICQ Skype   Вверх
Alkash
Дата 26.7.2004, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



А при том, что это нужно сделать из проги написаной на Delphi.


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
p0s0l
Дата 27.7.2004, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



1. Закачивай страницы из инета, к примеру, через IdHTTP:
Код

var
 Page : string;
 i : integer;
begin
 IdHTTP1.Host := 'www.phpbb.ru';
 IdHTTP1.Connect;
 for i := 1 to 25 do // с 1 по 25 страницу
 begin
   Page := IdHTTP1.Get('http://www.phpbb.ru/index.php?topic=123&page=' + IntToStr(i));
// тут надо парсить страницу
 end;
end;

(параметры у Get взял от балды, ты пиши что там надо)
Если надо подробнее, или другим способом - ищи по форуму, это не раз обсуждалось...

2. Каждую закаченную страницу разбирай по тегам... Это уже конкретно зависит от того, что генерит движок форума...
Например, на данном форуме, всё просто:
Цитата

<!-- Begin Msg Number № сообщения-->
<table ...> и другие теги
<span class='normalname'><a>тут имя юзера</a></span>

<!-- POSTED DATE DIV -->
 
<div ...> и другие теги
<span class='postdetails'>...<a>Дата</a>тут время поста</span>

Ну и т.д., выискивая нужные комбинации тегов и комментариев, можно выделить имя, дату и сам пост...



--------------------
С уважением, г-н Посол.
PM   Вверх
Alkash
Дата 27.7.2004, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



Спасибо Посол, а вопрос ещё вопрос - каким образом парсить.........*im a stupid*sad.gif


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
p0s0l
Дата 27.7.2004, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Alkash, дай линк на тот форум, гляну, на примере покажу как выцепить имена юзеров...

Это сообщение отредактировал(а) p0s0l - 27.7.2004, 19:38


--------------------
С уважением, г-н Посол.
PM   Вверх
Alkash
Дата 28.7.2004, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет





--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
p0s0l
Дата 30.7.2004, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Г-н Посол
****


Профиль
Группа: Экс. модератор
Сообщений: 3668
Регистрация: 13.7.2003
Где: 58°38' с.ш. 4 9°41' в.д.

Репутация: 58
Всего: 112



Вводишь № темы в Edit1, жмешь Button1 - через пару секунд выведутся в RichEdit все посты этой темы (при этом разделяются на имя юзера, дату, и сам текс поста):
Код

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent,
 IdTCPConnection, IdTCPClient, IdHTTP;

type
 TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   Label1: TLabel;
   RichEdit1: TRichEdit;
   IdHTTP1: TIdHTTP;
   procedure Button1Click(Sender: TObject);
 private
 public
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

uses
 StrUtils;

const
 HostName = 'games.yek.ru';
 URL = 'http://' + HostName + '/gud4/viewtopic.php?';

type
 TPost = record User, PostDate, Text : string; end;
 TPosts = array of TPost;

function GetPosts (const HTML : string; var Posts : TPosts) : integer;
var
 p1, p2 : integer;
 _User, _PostDate, _Text : string;

 procedure DeleteTags (var s : string);
 var i1, i2 : integer;
 begin
   repeat
     i1 := Pos('<br />', s);
     if i1 = 0 then Break;
     Delete (s, i1, 5);
     s[i1] := #$0D;
   until False;
   
   repeat
     i1 := Pos('<', s);
     if i1 = 0 then Break;
     i2 := Pos('>', s);
     if i2 = 0 then i2 := Length(s);
     Delete (s, i1, i2-i1+1);
   until False;

   repeat
     i1 := Pos(#$0A, s);
     if i1 = 0 then Break;
     Delete (s, i1, 1);
   until False;

   i1 := 1;
   repeat
     i1 := PosEx(#$0D, s, i1);
     if i1 = 0 then Break;
     Insert (#$0A, s, i1+1);
     Inc(i1, 2);
   until False;
 end;

begin
 Result := 0;
 p1 := 1;
 repeat
   p1 := PosEx('<span class="name">', html, p1);
   p2 := PosEx('</span>', html, p1);
   if (p1 = 0) or (p2 = 0) then Break;
   _User := Copy(html, p1, p2-p1);
   DeleteTags (_User);

   p1 := PosEx('<span class="postdetails">Добавлено:', html, p1);
   p2 := PosEx('<span class="gen">', html, p1);
   if (p1 = 0) or (p2 = 0) then Break;
   _PostDate := Copy(html, p1, p2-p1);
   DeleteTags (_PostDate);

   p1 := PosEx('<span class="postbody">', html, p1);
   p2 := PosEx('</span><span class="gensmall">', html, p1);
   if (p1 = 0) or (p2 = 0) then Break;
   _Text := Copy(html, p1, p2-p1);
   DeleteTags (_Text);

   SetLength (Posts, Length(Posts)+1);
   with Posts[Length(Posts)-1] do
   begin
     User := _User;
     PostDate := _PostDate;
     Text := _Text;
   end;
   Inc(Result);
 until False;
end;

procedure TForm1.Button1Click(Sender : TObject);
var
 Adr, html : string;
 Posts : TPosts;
 PostNo, i : integer;

 procedure AddText (const txt : string; c : TColor; fs : TFontStyles);
 var st : integer;
 begin
   st := RichEdit1.SelStart;
   RichEdit1.Lines.Add(txt);
   RichEdit1.SelStart := st;
   RichEdit1.SelLength := Length(txt);
   RichEdit1.SelAttributes.Color := c;
   RichEdit1.SelAttributes.Style := fs;
   RichEdit1.SelectAll;
   RichEdit1.SelStart := RichEdit1.SelLength;
 end;

begin
 RichEdit1.Lines.Clear;
 SetLength (Posts, 0);

 IdHTTP1.Host := HostName;
 IdHTTP1.Connect;

 PostNo := 0;
 repeat
   AddText ('Get from PostNo: ' + IntToStr(PostNo), clBlue, []);
   RichEdit1.Update;
   Adr := URL + 't=' + Edit1.Text + '&start=' + IntToStr(PostNo);
   html := IdHTTP1.Get(Adr);
   i := GetPosts(html, Posts);
   Inc (PostNo, i);
 until i = 0;

 for i := 0 to Length(Posts)-1 do
 begin
   AddText (Posts[i].User, clBlack, [fsBold]);
   AddText (Posts[i].PostDate, clGreen, [fsItalic]);
   AddText (Posts[i].Text, clBlack, []);
   AddText ('', clBlack, []);
 end;

 IdHTTP1.Disconnect;
end;

end.




--------------------
С уважением, г-н Посол.
PM   Вверх
Alkash
Дата 30.7.2004, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


коллекционер жизни
**


Профиль
Группа: Участник
Сообщений: 516
Регистрация: 5.7.2004
Где: /

Репутация: нет
Всего: нет



Посол, огромаднейшее тебе пасибо!


--------------------
Подпись >> /dev/null
PM MAIL ICQ MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0966 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.