Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.10.2014, 09:26   #1
VitProff
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 12
Восклицание Проверка сайтов на наличие слова на странице

Привет!
Есть хорошая программа для проверки списка сайтов на наличие конкретного слова на страницах этих сайтов XLink Checker 2.0

Решил для себя написать аналог этой программы чтоб добавить дополнительный функционал. Всё сделал кажется правильно но моя программа работает медленные XLink Checker 2.0 и делает много пропусков.

Использовал Delphi7 и Synapse.
Вот код моего потока и синхронизации:

Программа проходит по каждой строчке MemoLoad с ссылкой, отправляет Get-запрос и проверяет наличие слова указанного в EditFind.Text в исходном коде страницы полученного в ответ на Get-запрос.
Если слово найдено то строчка с MemoLoad добавляется в MemoSave и увеличивается счётчик найденных ссылок в LabelFind в процедуре синхронизации. Если не найдено то просто увеличивается счётчик не найденных ссылок в LabelNotExist

Код:
procedure TMultiThread.Execute; // процедура потока
begin
  while Work do
    begin
      CS.Enter;
        inc(c);                       // критическая секция в которой увеличивается значение переменной "с",
        if c>Form1.MemoLoad.Lines.Count-1 then Work:= false; // если эта переменная будет больше количества строк в MemoLoad тогда потоки остановятся
      CS.Leave;

      if Work then
      begin
        HTTP:= THTTPSend.Create;                   //создание объекта THTTPSend через который будет отправляться Get-запрос
        HTTP.UserAgent:=UA[Random(18)];        // назначение случайного юзер-агента для объекта THTTPSend

       if HTTP.HTTPMethod('GET', Form1.MemoLoad.Lines.Strings[c]) then  //отправка Get-запроса для получение исходного кода страницы
       begin
          Response:= TStringList.Create;
          Response.LoadFromStream(HTTP.Document);                            //занесение исходного кода странице в переменную типа TStringList

          if Pos(Form1.EditFind.Text, Response.Text)<>0 then                  //проверка наличия слова из EditFind.Text в исходном коде
            begin
              Rez:=1;
              link:= Form1.MemoLoad.Lines.Strings[c];                            //если слово найдено тогда выполняется этот код
            end
          else
            begin
              Rez:=-1;                                            //если слово не найдено тогда выполняется этот код
            end;
            Synchronize(Sync);             //вызов синхронизации
            HTTP.Free;                       //освобождение созданных объектов THTTPSend и TStringList
            Response.Free;
       end;
      end;
    end;
  dec(Thread); // уменьшение числа потоков
  if Thread=0 then // если число потоков = 0 тогда останавливает потоки

  Work:= False;
  Form1.ButtonFindStop.Enabled:=false;
  Form1.ButtonFindStart.Enabled:=true;
end;

procedure TMultiThread.Sync; // процедура синхронизации
begin
case Rez of
  1:begin
      Form1.MemoSave.lines.Add(link);                     //если найдено слово
      Form1.LabelFind.Caption:=IntToStr(StrToInt(Form1.LabelFind.Caption)+1);
    end;
 -1:begin
      Form1.LabelNotExist.Caption:=IntToStr(StrToInt(Form1.LabelNotExist.Caption)+1); //если не найдено слово
    end;
end;
end;
Пожалуйста подскажите что нужно поправить чтоб работало лучше.

Последний раз редактировалось VitProff; 11.10.2014 в 11:28.
VitProff вне форума Ответить с цитированием
Старый 11.10.2014, 09:39   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Пожалуйста подскажите что нужно поправить чтоб работало лучше.
VitProff на форуме Добавить отзыв для VitProff Пожаловаться на это сообщение Ответить с цитированием
Обратись к автору XLink Checker 2.0, за исходником.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.10.2014, 10:09   #3
VitProff
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Обратись к автору XLink Checker 2.0, за исходником.
нет уже оф. сайта этой программы и автора непонятно как найти
VitProff вне форума Ответить с цитированием
Старый 11.10.2014, 10:20   #4
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
нет уже оф. сайта этой программы и автора непонятно как найти
запомни: то, что попало в интернеты, остаётся там НАВСЕГДА. В вебархиве есть копия сайта автора.

Судя по скриншоту, автор - жопорукий школоло.

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 11.10.2014 в 10:38.
min@y™ вне форума Ответить с цитированием
Старый 11.10.2014, 10:56   #5
VitProff
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 12
По умолчанию

В вебархиве нет контактных данных автора.

Изнините если что но я прошу написать что можно улучшить в моем коде а не предлагать искать автора.
VitProff вне форума Ответить с цитированием
Старый 11.10.2014, 11:02   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
я прошу написать что можно улучшить в моем коде
для начала, нашпигуй код комментами, чтобы человеки стали его читать.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.10.2014, 11:28   #7
VitProff
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
для начала, нашпигуй код комментами, чтобы человеки стали его читать.
Сделал коментарии
VitProff вне форума Ответить с цитированием
Старый 11.10.2014, 11:37   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Код:
Pos(Form1.EditFind.Text, Response.Text)
регистрозависимая функция. и кодировка не учитывается.

вот тебе и слабое место.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 11.10.2014, 11:50   #9
VitProff
Пользователь
 
Регистрация: 22.11.2012
Сообщений: 12
По умолчанию

Поменял на
Код:
Pos('slovo', Response.Text)<>0 then
но скорость все равно очень маленькая, как будто работает в один поток хотя ставлю 10 потоков
VitProff вне форума Ответить с цитированием
Старый 11.10.2014, 11:56   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
но скорость все равно очень маленькая
а я про скорость ещё ничего и не говорил.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка на наличие процесса NewBoy Общие вопросы C/C++ 5 16.07.2012 20:56
Проверка на наличие файла Vladya Общие вопросы Delphi 7 10.10.2009 01:26
Проверка на наличие в массиве istoe Microsoft Office Excel 8 26.08.2009 11:55
Проверка на наличие файла Demetrius Помощь студентам 12 28.07.2009 00:27
Проверка на наличие таблицы в БД Ramires БД в Delphi 3 18.12.2008 08:59