Получение данных сайта средствами delphi



Часто мы сталкиваемся с ситуациями, когда в программе используются не статические данные, а постоянно изменяющиеся. Откуда взять эту информацию?- спросите вы. Конечно же из сети! Но тут встает вопрос:"Как достать данные с сайта?". Вы открываете вожделенную страничку и видите на ней нужную информацию, но как получить ее для своей программы - не знаете.

Мы рассмотрим этот вопрос на простейшем примере получения данных о температуре г.Москва с "Яндекс погоды".

Для начала нам нужно получить html код страницы(благо Delphi позволяет), и сделаем мы это с помощью компонентов:1.button 2.idHTTP(indyclients) 3.memo
Свойство Handleredirects компонента idHTTP нужно перевести в положение true. Далее, напишем код для кнопки:

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo1.Lines.Add((IdHTTP1.get('http://pogoda.yandex.ru/moscow?ncrnd=7940')));//записываем html в мемо для дальнейшей работы
end;


В memo вы увидите бесконечное число строчек, найти в котором нужную информацию очень сложно, поэтому далее мы идем в браузер.
Открываем наш сайт http://pogoda.yandex.ru/moscow?ncrnd=7940 , тыкаем правой кнопкой мыши на погоду сейчас "0°C"(нужную нам информацию) и выбираем "Просмотр кода элемента".



Далее видим строчку кода, содержащую нужные для нас 0°C:



<div class="b-thermometer__now"> - эту часть копируем в буфер обмена, так как именно ее мы и будем искать в memo для извлечения информации.

"Необходимый кусок кода" найден, возвращаемся к нашей программе.

Кидаем на форму еще одну кнопку и компонент Label(в него выведем температуру). Код новой кнопки:

procedure TForm1.Button2Click(Sender: TObject);
var tag,tnow,Cels:integer;//переменные для поиска
wether:string;//переменная в которой будет содержаться строка с температурой
begin
Tag:=Pos('<div class="b-thermometer__now">', Memo1.Text);//ищем вхождение строки с температурой в нашем memo
  if Tag>0 then wether:=Copy(Memo1.Text,Tag,40);//копируем строку <div class="b-thermometer__now">0 °C</div> в переменную
  tnow:=pos('>',wether);//этими двумя строками мы определяем с какого по какой символ переменной
  cels:=pos('°C',wether);//копировать погоду. От знака '>' до "°C"
 if tnow>0 then label1.caption:=copy(wether,tnow+1,cels-tnow+1);//копируем данные из нашей переменной
end;


Если вы все сделали правильно, то в label будет выведена текущая погода г.Москва. Я разобрал простейший пример, а дальше... А дальше только ваша безграничная фантазия и любовь к программированию направят вас. Удачи!
Теги:
информацию, данные, wether, нужную, вопрос, получить, class, копируем, thermometer__now, Москва, Далее, procedure, idHTTP, нужно, температуре, Яндекс, погоды, TForm1, дальше, pogoda
Добавлено: 24 Февраля 2015 20:25:07 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...