![]() |
|
|
#1
|
||||
|
||||
|
Исходник для трасляции погоды но он почему то не робит
http://informer.gismeteo.ru/rss/34743.xml - ссылка откуда брать НО ВОТ не показывает ничего Код:
procedure TForm1.Button1Click(Sender: TObject);
var
S: TStringList;
P,I: integer;
USD,EUR,AFS,pM,pP: string;
begin
HTTP:=TIdHTTP.Create(nil);
HTTP.HandleRedirects:=True;
HTTP.ProtocolVersion:=pv1_0;
HTTP.ProtocolVersion:=pv1_0;
//
S:=TStringList.Create;
S.Text:=HTTP.Get('http://informer.gismeteo.ru/rss/34743.xml');
// Ïîãîäà
P:=S.IndexOf('#---- Погода----');
//
if not (P=-1)
then
begin
for i:=0 to 5 do
begin
inc(P);
if Pos('Температура' ,S.Strings[p])>0
then pM:=S.Strings[p];
if Pos('температура',S.Strings[p])>0
then pP:=S.Strings[p];
end;
end;
HTTP.Free;
Delete(pM,1,pos('/',pM));
Delete(pM,1,pos(',',pM));
Delete(pM,pos(',',pM),20);
Delete(pP,1,pos('/',pP));
Delete(pP,1,pos(',',pP));
Delete(pP,pos(',',pP),20);
Edit1.text:=Pm;
end; |
|
#2
|
|||
|
|||
|
видимо не работает, потому что XML файл в юникоде, после получения файла, преобразуйте его в нормальный формат.
|
|
#3
|
||||
|
||||
|
рекомендовал бы брать данные с xml информера http://informer.gismeteo.ru/xml/22546_1.xml и для разбора использовать msxml.IXMLDOMDocument
|
|
#4
|
|||
|
|||
|
ага, я на PHP писал скрипт, который по крону присылает СМС с погодой, и брал именно этот XML
![]() |
|
#5
|
|||
|
|||
|
|
|
#6
|
|||
|
|||
|
Цитата:
|
|
#7
|
||||
|
||||
|
есть модуль InformerGismeteo:
Код:
unit Unit1;
interface
uses
InformerGismeteo,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
FInformerGismeteo: TInformerGismeteo;
i: Integer;
begin
FInformerGismeteo:=TInformerGismeteo.Create;
FInformerGismeteo.URL:='http://informer.gismeteo.ru/xml/22546_1.xml';
try
if FInformerGismeteo.Refresh then
begin
Memo1.Lines.Add('Погода в '+URLDecode(FInformerGismeteo.Forecasts.TownName));
Memo1.Lines.Add('');
for i:=0 to FInformerGismeteo.Forecasts.Count-1 do
begin
Memo1.Lines.Add('Прогноз на '+FInformerGismeteo.Forecasts[i].GetDate+'. '+FInformerGismeteo.Forecasts[i].GetWeekday+'. '+FInformerGismeteo.Forecasts[i].GetTod+'. '+FInformerGismeteo.Forecasts[i].GetTime+' ч.');
Memo1.Lines.Add('Температура '+FInformerGismeteo.Forecasts[i].GetTemperature+' C');
Memo1.Lines.Add('Давление '+FInformerGismeteo.Forecasts[i].GetPressure+' мм рт.ст.');
Memo1.Lines.Add('Ветер '+FInformerGismeteo.Forecasts[i].GetWindDirection+' м/с');
Memo1.Lines.Add(FInformerGismeteo.Forecasts[i].GetCloudiness+'. '+FInformerGismeteo.Forecasts[i].GetPrecipitation+'.');
Memo1.Lines.Add('');
end;
end;
finally
FInformerGismeteo.Free;
end;
end;
end. |
|
#8
|
||||
|
||||
|
Я парсил так:
Код:
var
i:integer;
XMLDocument1: TXMLDocument;
ytro,den,vecher,noch:string;
tm:TSystemTime;
begin
SetTitleRus('GisMeteo Самара');
GetLocalTime(tm);
CoInitialize(nil);
XMLDocument1:=TXMLDocument.Create(nil);
XMLDocument1.LoadFromFile('http://informer.gismeteo.ru/rss/28900.xml');
XMLDocument1.Active := true;
XMLDocument1.XML.Text:=UTF8toAnsi(XMLDocument1.XML.Text);
for i:=1 to 14 do
XMLDocument1.XML.Delete(0);
XMLDocument1.XML.Delete(1);
for i:=1 to 6 do
XMLDocument1.XML.Delete(2);
XMLDocument1.XML.Delete(3);
for i:=1 to 6 do
XMLDocument1.XML.Delete(4);
XMLDocument1.XML.Delete(5);
for i:=1 to 6 do
XMLDocument1.XML.Delete(6);
XMLDocument1.XML.Delete(7);
for i:=1 to 7 do
XMLDocument1.XML.Delete(8);
XMLDocument1.XML.Text:=StringReplace(XMLDocument1.XML.Text, '<title>', '', [rfReplaceAll, rfIgnoreCase]);
XMLDocument1.XML.Text:=StringReplace(XMLDocument1.XML.Text, '</title>', '', [rfReplaceAll, rfIgnoreCase]);
XMLDocument1.XML.Text:=StringReplace(XMLDocument1.XML.Text, '<description>', '', [rfReplaceAll, rfIgnoreCase]);
XMLDocument1.XML.Text:=StringReplace(XMLDocument1.XML.Text, '</description>', '', [rfReplaceAll, rfIgnoreCase]);
XMLDocument1.XML.Text:=StringReplace(XMLDocument1.XML.Text, ' ', '', [rfReplaceAll, rfIgnoreCase]);
for i:=0 to XMLDocument1.XML.Count-1 do begin
if Pos('температура ',XMLDocument1.XML.Strings[i])>0 then XMLDocument1.XML.Strings[i]:=copy(XMLDocument1.XML.Strings[i],12+Pos('температура ',XMLDocument1.XML.Strings[i]),length(XMLDocument1.XML.Strings[i])-Pos('температура ',XMLDocument1.XML.Strings[i])-12);
if Pos(', давление',XMLDocument1.XML.Strings[i])>0 then XMLDocument1.XML.Strings[i]:=copy(XMLDocument1.XML.Strings[i],1,Pos(', давление',XMLDocument1.XML.Strings[i])-1);
if Pos('Утро',XMLDocument1.XML.Strings[i])>0 then XMLDocument1.XML.Strings[i]:='Утро';
if Pos('День',XMLDocument1.XML.Strings[i])>0 then XMLDocument1.XML.Strings[i]:='День';
if Pos('Вечер',XMLDocument1.XML.Strings[i])>0 then XMLDocument1.XML.Strings[i]:='Вечер';
if Pos('Ночь',XMLDocument1.XML.Strings[i])>0 then XMLDocument1.XML.Strings[i]:='Ночь';
end;
for i:=0 to XMLDocument1.XML.Count-1 do begin
if Pos('Утро',XMLDocument1.XML.Strings[i])>0 then ytro:=XMLDocument1.XML.Strings[i+1];
if Pos('День',XMLDocument1.XML.Strings[i])>0 then den:=XMLDocument1.XML.Strings[i+1];
if Pos('Вечер',XMLDocument1.XML.Strings[i])>0 then vecher:=XMLDocument1.XML.Strings[i+1];
if Pos('Ночь',XMLDocument1.XML.Strings[i])>0 then noch:=XMLDocument1.XML.Strings[i+1];
end;
XMLDocument1.Free;
if (tm.wHour>=6) and (tm.wHour<=11) then begin
//Writeln('Сейчас утро') ;
Writeln('Утро: '+ytro);
Writeln('День: '+den);
Writeln('Вечер: '+vecher);
Writeln('Ночь: '+noch);
end;
if (tm.wHour>=12) and (tm.wHour<=17) then begin
//Writeln('Сейчас день');
Writeln('День: '+den);
Writeln('Вечер: '+vecher);
Writeln('Ночь: '+noch);
end;
if (tm.wHour>=18) and (tm.wHour<=23) then begin
//Writeln('Сейчас вечер');
Writeln('Вечер: '+vecher);
Writeln('Ночь: '+noch);
end;
if (tm.wHour>=0) and (tm.wHour<=5) then begin
//Writeln('Сейчас ночь');
Writeln('Ночь: '+noch);
end;
Readln; |