Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.08.2015, 17:11
Аватар для savage911
savage911 savage911 вне форума
Прохожий
 
Регистрация: 11.08.2015
Адрес: Санкт-Петербург
Сообщения: 11
Версия Delphi: XE2 - XE5
Репутация: 10
По умолчанию Как получить HTML-код постоянно обновляющейся страницы?

Уважаемые форумчане!
Есть такая задачка - есть сайт, на котором раз в несколько секунд обновляются числа внутри табличек или появляются новые таблички/исчезают старые.
Нужно с интервалом, скажем, в 5 секунд получать html-слепок информации и парсить его. С парсингом я как-нибудь и сам управлюсь, пусть через ж... извините, давно не учился программированию, но всё же это решаемо. А вот каким путём лучше идти именно для получения HTML-кода? Я ничего лучше TwebBrowser на форме, и получения его Body не придумал, но как минимум на моем железе (а это старенький Атом с Win XP) интернет эксплорер отказался обновляться выше 8-й версии, а в ней сайт просто не открывается. Вернее открывается, но обновление занимает где-то минут 5, а числа меняются раз в 5-20 секунд. При этом обычный браузер Хром всё показывает в реальном времени. То есть железо не особо "тупит".
Пробовал почитать про то, как пользоваться Хромиум эмбеддед (TChromium), но мозг взорвался, а информации очень мало, и я не совсем понимаю, как адаптировать для своего случая.

Может кто подсказать кусочек кода, который сначала один раз откроет нужный адрес www.site1.ru (это не реальный адрес, так, для примера), а потом будет 1 раз в 5 секунд извлекать его содержимое в переменную S типа string (подозреваю, что это будет внутри тела Timer1.OnTimer)?
Ответить с цитированием
  #2  
Старый 11.08.2015, 17:52
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

что-нибудь из TIdHTTP, WinHTTP, WinINet вполне достаточно будет.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #3  
Старый 11.08.2015, 18:04
Аватар для savage911
savage911 savage911 вне форума
Прохожий
 
Регистрация: 11.08.2015
Адрес: Санкт-Петербург
Сообщения: 11
Версия Delphi: XE2 - XE5
Репутация: 10
По умолчанию

Num Lock,
если я правильно уловил, что с помощью Инди мне надо постоянно слать запрос (GET)? Именно так работает браузер со страницами (сайтами), которые сами постоянно инициируют обновление странички?
Просто хотелось использовать именно компонент браузера, чтобы не лезть глубже в дебри структуры отправки запросов, инди и т.д.
Ответить с цитированием
  #4  
Старый 11.08.2015, 18:09
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

да, периодически делать GET запрос веб-серверу. обычно веб-браузер используют для просмотра веб-страниц (сайтов), использовать его только для получения html-странички (без ее визуализации) излишне.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 11.08.2015, 18:20
Аватар для savage911
savage911 savage911 вне форума
Прохожий
 
Регистрация: 11.08.2015
Адрес: Санкт-Петербург
Сообщения: 11
Версия Delphi: XE2 - XE5
Репутация: 10
По умолчанию

Дружище, прошу прощения, но я правда настолько слаб конкретно в веб-технологиях (последние 15 лет после универа занимаюсь совсем иными задачами из области прикладной электроники). Отниму ещё пару минут твоего времени.
Собственно, сайт: https://www.betmarathon.com/su/live/popular

На нём постоянно что-то обновляется. Подскажи, пожалуйста, как получать обновлённый текст с интервалом в 5 секунд?
Я не понимаю.
Когда я ещё хоть как-то плотно занимался Pascal, он назывался Turbo Pascal 6.0 и Borland Pascal 7.0 b и работал под DOS. Тогда интернет-технологии были в зачатках. Распарсить и обработать данные я соображу как, ибо тот же паскаль, только в профиль, но вот как это получить со странички? Подозреваю, что всего кода будет строчек 10, но я не знаю, каких...
Ответить с цитированием
  #6  
Старый 11.08.2015, 18:48
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
var
  WinHttp: TWinHttp;
  ResponseContent: TFileStream;
begin
  WinHttp:=TWinHttp.Create(Self);
  ResponseContent:=TFileStream.Create('Project1.html', fmCreate);
  try
    WinHttp.Get('https://www.betmarathon.com/su/live/popular', ResponseContent);
    ShowMessage('Ok');
  finally
    ResponseContent.Free;
    WinHttp.Free;
  end;
end;

TWinHttp обертка над WinHTTP, собственный компонент, реализует эту схему:



для https вполне подходит, без всяких дополнительных dll.

https://yadi.sk/d/dvkP34zriPk8m
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
savage911 (16.08.2015)
  #7  
Старый 11.08.2015, 19:17
Аватар для savage911
savage911 savage911 вне форума
Прохожий
 
Регистрация: 11.08.2015
Адрес: Санкт-Петербург
Сообщения: 11
Версия Delphi: XE2 - XE5
Репутация: 10
По умолчанию

Спасибо! Попробую этим воспользоваться в ближайшее время (как получится на часик-другой от семьи избавиться).
Ответить с цитированием
  #8  
Старый 13.08.2015, 08:23
Аватар для savage911
savage911 savage911 вне форума
Прохожий
 
Регистрация: 11.08.2015
Адрес: Санкт-Петербург
Сообщения: 11
Версия Delphi: XE2 - XE5
Репутация: 10
По умолчанию Diablo кроется в деталях

Уважаемый NumLock,
я скопировал данный текст в свою программу, и, ожидаемо, оно сказало, что twinhttp неведомый идентификатор.
Простое добавление в Uses через запятую winhttp не спасло отца русской демократии. Или эту "обёртку" тоже надо как-то "сексуально" ставить?
Кстати, Indy у меня не получилось к этой задачке припилить. Нашёл где-то исходник, который через инди по простому парсил http сайт. Поменял адрес на свой марафоновский https - и ни фига. Хелп дельфи как-то ненавязчиво просит прикрутить правильный IOHandle, чтобы SSL обрабатывался... На этой фразе без примеров (а ведь в старых дельфи 5-7 такой шикарный хелп был, с примерами) я и скис...
И кстати, в приложении просто экзешник. Может быть проще залить весь код архивом? Ещё раз авансом спасибо!
Ответить с цитированием
  #9  
Старый 13.08.2015, 11:45
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

так в 6-ом сообщении написано все про TWinHttp и выложен тестовый пример с исходным кодом. естественно исходника самого TWinHttp в интернете и быть не может. пример служит лишь для проверки работоспособности данного подхода (через WinHTTP). если у тебя этот пример работает, то можно идти по этому направлению. как уже сказано выше, в отличии от Инди, данному методу не нужны никакие дополнительные dll.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #10  
Старый 13.08.2015, 12:20
Аватар для savage911
savage911 savage911 вне форума
Прохожий
 
Регистрация: 11.08.2015
Адрес: Санкт-Петербург
Сообщения: 11
Версия Delphi: XE2 - XE5
Репутация: 10
По умолчанию

Так как мне всё-таки подключить в Uses что-то так, чтобы TwinHTTP работал, а не выдавал полное непонимание методов, которыми ты воспользовался в приведённом фрагменте кода? А то мне он радостно говорит, что такие методы не наличествуют, если я просто пишу в заголовке Uses winhttp или Uses twinhttp
Ответить с цитированием
  #11  
Старый 13.08.2015, 12:43
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

я не могу сказать и никто не может сказать как называется у тебя unit, в котором реализован WinHttp. можно вообще не подключать ничего (кроме Windows естественно) и делать все чисто на вызовах функций.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #12  
Старый 13.08.2015, 12:51
Аватар для savage911
savage911 savage911 вне форума
Прохожий
 
Регистрация: 11.08.2015
Адрес: Санкт-Петербург
Сообщения: 11
Версия Delphi: XE2 - XE5
Репутация: 10
По умолчанию

Ммм... не понимаю.
Давай так попробуем:
В выложенном тобой куске кода есть всё, что необходимо, кроме поля uses.
Присланный тобой exe файл тоже работает (я видел результат). Ты можешь выложить весь текст модуля unit1 того проекта, кусок кода которого ты выложил? Потому что мне дельфа при компиляции говорит, что она не знает класса twinhttp. И я не понимаю, как мне сделать так, чтобы она узнала, что есть такой класс, и у него есть использованные тобой методы.
Ответить с цитированием
  #13  
Старый 13.08.2015, 13:50
Аватар для savage911
savage911 savage911 вне форума
Прохожий
 
Регистрация: 11.08.2015
Адрес: Санкт-Петербург
Сообщения: 11
Версия Delphi: XE2 - XE5
Репутация: 10
По умолчанию

Может так быть, что всё дело в Delphi XE5?
Если да, то придётся возвращаться к Дельфи 7, по видимому?
Ответить с цитированием
  #14  
Старый 13.08.2015, 17:41
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

uses WinHTTPComponents;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  WinHttp: TWinHttp;
  ResponseContent: TFileStream;
begin
  WinHttp:=TWinHttp.Create(Self);
  ResponseContent:=TFileStream.Create('Project1.html', fmCreate);
  try
    WinHttp.Get('https://www.betmarathon.com/su/live/popular', ResponseContent);
    ShowMessage('Ok');
  finally
    ResponseContent.Free;
    WinHttp.Free;
  end;
end;

end.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
savage911 (16.08.2015)
  #15  
Старый 14.08.2015, 09:15
Аватар для savage911
savage911 savage911 вне форума
Прохожий
 
Регистрация: 11.08.2015
Адрес: Санкт-Петербург
Сообщения: 11
Версия Delphi: XE2 - XE5
Репутация: 10
По умолчанию

Большое спасибо, буду пробовать!
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:08.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter