Задачка программистам Delphi

(Игрострой и все, что с ним связано)

Модератор: Buxyr

Аватара пользователя
KrisGames

Универсал Коммандо Лидер
Командор
Сообщения: 1171
Рег. Ср апр 28, 2010 10:20 am
Награды: 3
Репутация: 428
Вклад в проект: 75
Откуда: Иваново
Благодарил (а): 129 раз
Поблагодарили: 19 раз

Задачка программистам Delphi

Сообщение KrisGames » Пт мар 02, 2012 5:03 pm

Написать утилитку для вывода списка тем любого раздела нашего форума,
т.е. сверху комбобокс в котором список всех форумов, типа:
_http://areatest.ru/viewforum.php?f=43
_http://areatest.ru/viewforum.php?f=44
и т.д.... подфорумы не надо...

под комбобоксом табличка, типа StringGreed в которой 3 столбца:
1) название темы
2) количество ответов + прирост
3) количество просмотров + прирост

т.е. выбираем в комбобоксе форум... утилитка грузит из ini файла предыдущие данные по этому форуму
сохраненные ей же в прошлый запуск и заново этот форум парсит и выводит все данные в таблицу

типа:
----------------------------------------------------------------------
тема: | ответы/прирост | просмотры/прирост |
----------------------------------------------------------------------
Концепт документ | 5/1 | 3254/10 |
----------------------------------------------------------------------
...

 Скрытый текст
Получить данные с форума можно разными способами...

Можно анализировать код странички, типа:
(пример я набросал за 15 минут так что он сыроват)

Код: Выделить всё

...
WebBrowser1.Navigate('http://areatest.ru/viewforum.php?f=44');
...
procedure TfmMain.Button2Click(Sender: TObject);
const DelSym = 'ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮйцукенгшщзхъфывапролджэячсмитьбю1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm';

var
  Text,Word: string;
  i: integer;

begin
  Text := WebBrowser1.OleObject.Document.documentElement.innerText;
  while Pos(Chr(13),Text) > 0 do Delete(Text,Pos(Chr(13),Text),1);
  while Pos(Chr(10),Text) > 0 do Delete(Text,Pos(Chr(10),Text),1);

  // Если символ не есть буква/цифра русского/английского алфавита, то заменяем ее на запятую:
  for i := 1 to Length(Text) do if Not Pos(Text[i],DelSym) > 0 then Text[i]:=',';
  if Text[1] = ',' then Delete(Text,1,1);
  while Pos(',,',Text) > 0 do Delete(Text,Pos(',,',Text),1);

  repeat
    Word:=Copy(Text,1,Pos(',',Text)-1);
    Delete(Text,1,Length(Word)+1);
    ListBox1.Items.Add(Word);
  until Length(Text) = 0;
end;


Можно парсить через методы OleObject, типа:

Код: Выделить всё

   try
    for F1 := 0 to WebBrowser1.OleObject.Document.Forms.Length - 1 do begin
     Form := WebBrowser1.OleObject.Document.Forms.Item(F1).Elements;
     for i1 := 0 to Form.Length - 1 do
     if (Form.item(i1).Tabindex = '6')  then Form.item(i1).Click;
    end;
   except
   end;


Можно круто на хрath написать, типа:

Код: Выделить всё

(_http://stackoverflow.com/questions/1406138/finding-elements-with-xpath-in-delphi)

procedure TfUpvs.Button1Click(Sender: TObject);
var
i: Integer;
xmlDoc: IXMLDOMDocument2;
objNode: IXMLDOMNode;
objListOfNodes: IXMLDOMNodeList;

begin
xmlDoc:= CoDOMDocument.Create();
xmlDoc.Async:= False;
xmlDoc.validateOnParse:= False;
xmlDoc.Load('c:\test.xml');
xmlDoc.SetProperty('SelectionLanguage', 'XPath');

objNode:= xmlDoc.SelectSingleNode('/CUP/LID');
Memo1.Lines.Add(objNode.text);

objListOfNodes:= xmlDoc.selectNodes('//CONTENTS/SOLID/@qty');
for i:=0 to objListOfNodes.Length-1 do
begin
Memo1.Lines.Add(objListOfNodes.Item.Text);
end;


Можно еще придумать методы....
Ну и конечно тяжелый компонент WebBrowser1, что я привел в примерах лучше заменить на невизуальный класс http...


Т.к. в команде у нас уже сайчас как минимум 2 программера Дельфи, то вот вам возможность заработать "Вклад")

Что эта утилитка даст?
Она даст администратору форума например, быть в курсе потоков юзеров, какие темы более интреесны, т.е. какие темы надо развивать и т.д. А значит улучшит качество работы и эффективность форума и даст дополнительный приток народу к нам,- вам в помощь)

Кстати:
За рабочую версию этой утилитки: + 5 к "Вкладу"
За доведенную до моих требований версию : еще + 3 к "Вкладу"

Налетай!


ICQ : 470-451-451
Mail: KrisGames@yandex.ru

Аватара пользователя
Buxyr

Коммандо Активист Друг форума Кот Леопольд
Рейнджер
Сообщения: 451
Рег. Вс май 02, 2010 10:07 am
Награды: 4
Репутация: 429
Вклад в проект: 27
Откуда: --
Поблагодарили: 6 раз

Re: Задачка программистам Delphi

Сообщение Buxyr » Пн мар 05, 2012 12:51 pm

Может проще кого то найти кто будет сидеть и раз в сутки скажем скрины форумов делать и сравнивать их)
Искусство это жизнь

Аватара пользователя
KrisGames

Универсал Коммандо Лидер
Командор
Сообщения: 1171
Рег. Ср апр 28, 2010 10:20 am
Награды: 3
Репутация: 428
Вклад в проект: 75
Откуда: Иваново
Благодарил (а): 129 раз
Поблагодарили: 19 раз

Re: Задачка программистам Delphi

Сообщение KrisGames » Ср мар 07, 2012 1:20 pm

Ты будешь? Приступай)
ICQ : 470-451-451
Mail: KrisGames@yandex.ru

Аватара пользователя
Tormoz

Моделер
Странник
Сообщения: 233
Рег. Вт май 11, 2010 7:14 am
Награды: 1
Репутация: 36
Вклад в проект: 11
Откуда: Москва
Благодарил (а): 2 раза
Поблагодарили: 2 раза

Re: Задачка программистам Delphi

Сообщение Tormoz » Вт мар 20, 2012 8:08 am

Сбросил вариант тебе на почту - тести)

Аватара пользователя
KrisGames

Универсал Коммандо Лидер
Командор
Сообщения: 1171
Рег. Ср апр 28, 2010 10:20 am
Награды: 3
Репутация: 428
Вклад в проект: 75
Откуда: Иваново
Благодарил (а): 129 раз
Поблагодарили: 19 раз

Re: Задачка программистам Delphi

Сообщение KrisGames » Вс мар 25, 2012 5:32 pm

Нет нет и нет, три раза уже нет - делай как я говорю иначе лажа выходит....
ICQ : 470-451-451
Mail: KrisGames@yandex.ru

Аватара пользователя
KrisGames

Универсал Коммандо Лидер
Командор
Сообщения: 1171
Рег. Ср апр 28, 2010 10:20 am
Награды: 3
Репутация: 428
Вклад в проект: 75
Откуда: Иваново
Благодарил (а): 129 раз
Поблагодарили: 19 раз

Re: Задачка программистам Delphi

Сообщение KrisGames » Пн апр 23, 2012 12:43 pm

Не надо, у нас дельфи рабочий язык, пусть останется им...
ICQ : 470-451-451
Mail: KrisGames@yandex.ru


Вернуться в «Игрострой»

 

 

cron