Регистрация Главная Сообщество
Сообщения за день Справка Регистрация
Навигация
Zhyk.org LIVE! Реклама на Zhyk.org Правила Форума Награды и достижения Доска "почета"

Ответ
 
Опции темы
Старый 18.12.2014, 16:13   #1
 Разведчик
Аватар для Dessanndes
 
Dessanndes набедокурил в прошлом
Регистрация: 10.07.2011
Сообщений: 1
Популярность: -8
Сказал(а) спасибо: 0
Поблагодарили 2 раз(а) в 2 сообщениях
Отправить сообщение для Dessanndes с помощью ICQ Отправить сообщение для Dessanndes с помощью Skype™
 
Talking Поиск нужного текста на сайте (на примере поиска пользователей Zhyk.ru)

Приветствую , многие новички может задавились вопросом : "Как найти нужную инфу на сайте ?лол"... Сейчас расскажу самый простой и не затратный по усилиям способ написания простенькой программки , у нас это будет поиск пользователей с любимого сайта Zhyk.Ru
Тема ориентирована на новичков в этом деле , матерые программеры , не закидывайте меня грязюкой =( , я не буду пояснять как работает та или иная строчка кода досконально , напишу лишь об основных положениях в самой программе
Скрин работы программы :
[Ссылки могут видеть только зарегистрированные пользователи. ]
Сразу хочу оговориться по поводу пользователей с спец. символами на примере MecaгА - Страшные цифры сбоку , это код тех символов, лень матушка не позволила доработать
Что тут находится :
  • 1 Edit (для ввода количества пользователей которых нужно найти)
  • 3 Memo (Для вывода пользователей , вывода "битых ID" и хранения кода сайта (из него сделал красоту , где выводятся ники) )
  • 3 Button (Для начала поиска , остановки и сохранения в файл)
  • 1 IdHTTP (Он то и будет главным актером)
  • 1 SaveDialog (Для сохранения пользователей в файлик)
  • 1 ProgressBar (Для красоты )
  • Куча Label (Для отображения информации о поиске и тд)

Что же делает данный "механизм" ?=> Открывает код сайта , для нас это Zhyk.ru ищет нужный кусок кода (который вы прописываете сами) и копирует нужное , остальное удаляет


Что нам потребуется для данного действа (знатоки могут и в других средах работать )
  1. embarcadero rad studio xe7
  2. Любой браузер показывающий исходный код (У меня на примере Chrome)
  3. Хорошее настроение

I Подготовка формы :
Расположите все вышеуказанные объекты на форме, как вам нравится , у меня это получилось так :
[Ссылки могут видеть только зарегистрированные пользователи. ]
Label's для вывода уже найденных пользователей расположите где вам надо , у меня их не видно , так как параметр Caption не имеет значения;

Настройте ReadOnly на Memo для вывода списка пользователей и у Memo c битыми ID , поставьте у Memo для приема кода сайта значение false
[Ссылки могут видеть только зарегистрированные пользователи. ]

Можно приступать к написанию кода ...

II Написание кода

1) Нажатие на кнопку СТАРТА
Код:
procedure TForm1.Button1Click(Sender: TObject);
var k,input:integer;
begin
  Button1.Enabled:=False; // Делаем кнопку неактивной , чтоб еще раз не запустить всё это 
  val(Edit1.Text,Input,k); // Проверяем на корректность ввода , мол если не цифры , то идите лесом 
  if (k<>0) or (input < 0) then
  begin
    ShowMessage('Вы ввели некорректное значение!');
    Button1.Enabled:=True; // Делаем кнопку активной
  end
  else
    begin
      if NumberUser = 0 then
          Memo1.Clear;
      if input > 0 then
          NumberUser:=input; // передаем значение введённых пользователей глобальной переменной 
      MyThread:=TMyThread.Create(False);// Запускаем поток
      MyThread.Priority:=tpHighest; // даем ему приоритет (можно и маленький)
      ButtonSave.Enabled:=false;// Кнопка сохранить вырубается
      Button3.Enabled:=True; // кнопка остановить врубается 
    end;
end;

2) Кнопка СТОП
Она просто меняет флаг условия выполнения потока на false , в моем случае это так ....
Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
  FlagExit:=false;
end;

3) Кнопка СОХРАНЕНИЯ
Код:
procedure TForm1.ButtonSaveClick(Sender: TObject);
var FName:string;
begin
saveDialog1.Filter := 'Text|*.txt|'; // Создаем фильтр-формат, это у нас будет текстовой документ
saveDialog1.Title := 'Сохранение найденных пользователей'; // Заголовок диалога сохранения
with SaveDialog1, Memo1 do
       if SaveDialog1.Execute then
       begin
         FName := SaveDialog1.FileName+'.txt';// Сохраняем с таким именем ... Filename.txt
         Memo1.Lines.SaveToFile(FName); // Сохраняем каждую новую строчку из Memo в файл
         ShowMessage('Файл сохранен успешно : ' + FName);  // Сообщение о сохранении файла
       end;

saveDialog1.Free; // Освобождаем память , занятую на диалог сохранения
end;
4) Создание потока
А теперь самое страшное , но в то же время самое нужное в нашей программе ... Исполнительный поток ))
Рассказывать про создание потоков глупо , я и не буду , всю необходимую информацию найдете [Ссылки могут видеть только зарегистрированные пользователи. ]

Код:
procedure TMyThread.Execute;
 var
    f:TextFile;
    LeftPos,User,Predel:integer;
    FileDir,left,rigth,site,userID:string;
begin
   Inc(iFind);
   Form1.Label2.Caption:= 'Идет поиск'; // Информируем о том где идет поиск
   FlagExit:=True;
   Form1.Memo1.Enabled:=True;  // Включаем Memo 
   rigth:='"Ответ от сервера не получен. Пожалуйста, попробуйте снова."';
   LeftPos:=9661; // Позиция с которой идет копирование (Непосредственно для сайта Zhyk)
   site:='http://zhyk.ru/forum/member.php?u=';  //Шаблон сайта .... после "=" идет ID пользователя , что по сути для нас будет представлять обычный счетчик , который будет увеличиваться с каждой итерацией цикла  
   User   := 1;
   Predel := 0;
   While((User <=NumberUser)and (FlagExit) and (Predel < 10)) do  //Пока мы не нашли нужное кол-во юзеров и не пора выходить и не больше 10 битых то можно крутануть цикл 
   begin
        userID:=IntToStr(iFind);  // переводим счетчик пользователей в тип str чтобы вставить его в адрес с которого будет браться код 
        Form1.Memo2.Text :=Form1.idHTTP1.Get(site+userID);  // Закидываем в memo код сайта 
        Form1.memo2.Text := copy(Form1.memo2.Text,Leftpos,pos(rigth,Form1.memo2.Text)-leftpos-99 );  //Копируем нужный кусок кода, выверял вручную * Ниже покажу как  
        if Length(Form1.Memo2.Text) > 0 then
        begin
           Form1.Memo1.Lines.Add(Form1.Memo2.Text);
           Inc(User);
           Predel:=0;
           Inc(UF);
        end
        else
        begin
           Inc(Predel);
           Inc(PR);
           Form1.Memo3.Enabled:=True;
           Form1.Memo3.Lines.Add(inttostr(iFind));  // ID битого
        end;
        Inc(iFind);
        Form1.Progressbar1.Position:=Round(100*User/NumberUser);  //Увеличиваем наш прогресс бар 
        Form1.Label1.Caption:= IntToStr(UF);  //Информируем о том что и как нашли  
        Form1.Label3.Caption:= IntToStr(PR);
        Form1.Label2.Caption:= IntToStr(User-1) + ' из ' + IntToStr(NumberUser);
   end;
   Form1.Label2.Caption:= 'Готово';  // заканчиваем работу , включаем/выключаем нужные кнопки
   Form1.Button1.Enabled:=True;
   Form1.ButtonSave.Enabled:=True;
   Form1.Button3.Enabled:=False;
   Form1.Progressbar1.Position:=0; // зануляем прогресс бар 
   Form1.Memo2.Clear;  // Чистим Memo 
end;
Глобальные переменные :
Код:
var
  Form1       : TForm1;
  FlagExit    : boolean;
  MyThread    : TMyThread;
  NumberUser,iFind,UF,PR  : integer;
  saveDialog1 : TSaveDialog;

P.S Поиск необходимого куска кода , работа ручками ...
1) Открываем страницу любого пользователя и смотрим на адрес ...

[Ссылки могут видеть только зарегистрированные пользователи. ]

Далее открываем код страницы и ищем наш ник пользователя

[Ссылки могут видеть только зарегистрированные пользователи. ]

С левой стороны мы знаем что позиция под номером 9661 и пишем ее в код
Цитата:
LeftPos:=9661; // Позиция с которой идет копирование (Непосредственно для сайта Zhyk)

С правой же стороны мы не знаем позицию и нам надо ее найти по куску кода , который мы можем единственно правильно отыскать ...
Цитата:
rigth:='"Ответ от сервера не получен. Пожалуйста, попробуйте снова."';

Но если так оставить то в ники попадут и еще куски кода , так что нам надо уменьшить позицию на количество символов в этих строках ... опять же считаем вручную ... что у нас получается при копировании ....
Цитата:
Form1.memo2.Text := copy(Form1.memo2.Text,Leftpos,pos(rigth,Form1.memo 2.Text)-leftpos-99 );

Что мы тут делаем ... Копируем текст из кода с левой позиции , длинной равной позиции нашей строки "Ответ от сервера ...." минус левая позиция, минус количество лишних символов кода , там их 99

Все , мы получили нужный Ник пользователя =)
Способ очень ламерский , но он работает , без взлома и тд ) , я не претендую на идею , но данный код был написан мной , если в нем есть ошибки или какие то недочеты или же вы можете предложить модификацию ... пишите ниже , всем интересно узнать .

Задавайте свои вопросы ниже , постараюсь ответить , может чего сам нового узнаю , критика приветствуется ))
Спасибо за внимание , надеюсь я вам помог. Всем добра! ^^
ИСХОДНИКИ ПО ДАННОЙ ТЕМЕ : [Ссылки могут видеть только зарегистрированные пользователи. ]
[Ссылки могут видеть только зарегистрированные пользователи. ]

Последний раз редактировалось Dessanndes; 19.12.2014 в 08:00. Причина: Добавлял ссыль на ВТ
  Ответить с цитированием
Пользователь сказал cпасибо:
NebesaBag (20.12.2014)
Ответ

Метки
информации, парсер, поиск, пользователей, сайт


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программка для поиска забаненых пользователей fokuuus Общение и обсуждение 2 24.09.2012 20:31
[Прочее] [Host ping] - инфа о сайте для пользователей Zhyk.Ru! object Халява для Читера 5 02.02.2011 13:57
[Скрипт] Онлайн-поддержки пользователей на сайте Novichok Web-программирование и технологии 0 10.05.2010 12:02

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 18:04.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net