Delphi 일기예보 조회
26422 단어 Delphi
현재의 많은 소프트웨어에 날씨 보기 기능이 내장되어 있다!사실은, 이 기능의 실현은 결코 번거롭지 않다!인터넷에 접속할 줄 아는 사람들은 모두 날씨 상황을 조사할 것이다.사실 일기예보 기능을 내장한 소프트웨어의 일기예보 기능도 모두 인터넷에서 유래한 것이다!왜냐하면 어느 소프트웨어 회사도 스스로 기상 관측소를 설치할 수 없기 때문이다. 하하, 지금 나는 어떻게 인터넷상의 정보를 통해 날씨 상황을 얻을 수 있는지 말해 보겠다!
현재 날씨를 조회할 수 있는 사이트가 적지 않다. 비교적 유명한 사이트는 중국 날씨망과 구글 날씨이다. 대부분의 사이트와 대부분의 소프트웨어의 일기예보 데이터도 중국 날씨망에서 나온 것이다!중국 기상망은 중국 기상국과 관련된 것이기 때문에 그의 데이터는 더욱 정확할 것이다!본고의 정보를 조회할 때 독자가 http 프로토콜과 웹 제출을 어떻게 모의하는지 등 지식을 숙지한다고 가정합니다!
중국 날씨망에 연결이 있어요.http://m.weather.com.cn/data/+'도시 코드.html', 이 연결은 대응하는 도시의 날씨 상황을 얻을 수 있습니다!제이슨 데이터를 되돌려주고 제이슨을 분석하면 이 도시의 날씨를 얻을 수 있습니다!이 문제는 바로 그 도시의 인코딩 획득 방식에 있다. 이 획득 방식은 인터넷에 코드가 있다!저는 쓰지 않겠습니다. 저는 도시 인코딩을 자원 파일에 직접 싸서 사용할 때 자원에서 불러오면 됩니다!날씨의 Json 데이터를 얻을 수 있는 일은 Http 프로토콜입니다. http 데이터를 제출할 수 있는 컨트롤이나 클래스만 사용할 수 있습니다. (예를 들어 indy의 idhttp,ics의 http 컨트롤도 괜찮고 MSxml의 IXMLHttp Request도 사용할 수 있으며 Http Request5.1 또는 WinHttp 컨트롤도 사용할 수 있습니다) 여기서 제가 사용하는 일은 가장 간단한 방법입니다. Delphi가 직접 가지고 있는 indy의 idhttp로 얻을 수 있습니다자세하다 코드:
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,msxml,uLkJSON, ExtCtrls, IdBaseComponent, IdComponent,
IdTCPConnection, IdTCPClient, IdHTTP;
type
TComboBox = class(StdCtrls.TComboBox)
private
Values: TStringList;
public
constructor Create(AOwner: TComponent);override;
destructor Destroy;override;
procedure LoadFromFile(Filename: string);
procedure LoadFromRes(ResName: string);
end;
TForm4 = class(TForm)
Memo1: TMemo;
Panel1: TPanel;
ComboBox1: TComboBox;
Button1: TButton;
IdHTTP1: TIdHTTP;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
function pro_result(str:string):string ;
public
{ Public declarations }
List: TStringList;
HttpReq: IXMLHttpRequest;
end;
var
Form4: TForm4;
implementation
uses DateUtils;
{$R *.dfm}
{$R mm.RES}
procedure TForm4.Button1Click(Sender: TObject);
var
url: string;
Json: TlkJSONobject;
ChildJson,tmpJson: TlkJSONbase;
begin
url := 'http://m.weather.com.cn/data/'+Combobox1.Values.ValueFromIndex[ComboBox1.ItemIndex]+'.html';
HttpReq.open('Get', Url, False, EmptyParam, EmptyParam);
HttpReq.send(EmptyParam);//
Url := HttpReq.responseText;
Json := Tlkjson.ParseText(url) as TlkJSONobject;
ChildJson := Json.Field['weatherinfo'];
Memo1.Lines.Clear;
if ChildJson.SelfType = jsObject then
begin
//Showmessage(ChildJson.Field['city'].Value);
Memo1.Lines.Add(' ('+Vartostr(ChildJson.Field['date_y'].Value)+' '+Vartostr(ChildJson.Field['week'].Value)+'):');
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['temp1'].Value));
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['weather1'].Value));
//Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['fx1'].Value)+ ' '+Vartostr(ChildJson.Field['wind1'].Value));
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['wind1'].Value));
Memo1.Lines.Add(' ('+FormatDateTime('YYYY MM DD ',DateUtils.IncDay(now))+'):');
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['temp2'].Value));
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['weather2'].Value));
//Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['fx2'].Value)+ ' '+Vartostr(ChildJson.Field['wind2'].Value));
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['wind2'].Value));
Memo1.Lines.Add(FormatDateTime('YYYY MM DD ',DateUtils.IncDay(now,2))+':');
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['temp3'].Value));
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['weather3'].Value));
//if True then
//Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['fx3'].Value)+ ' '+Vartostr(ChildJson.Field['wind3'].Value));
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['wind3'].Value));
Memo1.Lines.Add(FormatDateTime('YYYY MM DD ',DateUtils.IncDay(now,3))+':');
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['temp4'].Value));
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['weather4'].Value));
//Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['fx4'].Value)+ ' '+Vartostr(ChildJson.Field['wind4'].Value));
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['wind4'].Value));
Memo1.Lines.Add(FormatDateTime('YYYY MM DD ',DateUtils.IncDay(now,4))+':');
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['temp5'].Value));
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['weather5'].Value));
//Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['fx5'].Value)+ ' '+Vartostr(ChildJson.Field['wind5'].Value));
Memo1.Lines.Add(' :'+Vartostr(ChildJson.Field['wind5'].Value));
end;
end;
procedure TForm4.FormCreate(Sender: TObject);
var
temp,str_1,str_2:string;
http1:tidhttp;
i:Integer;
begin
http1:=tidhttp.create(self);
temp:=HTTP1.Get('http://www.ipseeker.cn');
http1.free;
//temp:=Mmo1.Text;
i:=Pos(' ',temp);
str_1:=Copy(temp,i,254);
str_2:=pro_result(str_1);
//Mmo2.Text:=str_2;
Caption := Trim(str_2);
ComboBox1.LoadFromRes('CityCode.Data');
i := Pos(' ',Caption);
if i <> 0 then
temp := copy(Caption,i+1,MaxInt)
else temp := Caption;
i := Pos(' ',temp);
if i <> 0 then
temp := copy(temp,0,i-1);
ComboBox1.ItemIndex := ComboBox1.Items.IndexOf(temp);
HttpReq := CoXMLHTTPRequest.Create;
Button1.Click;
end;
function TForm4.pro_result(str: string): string;
var
i_0,i_1:Integer;
temp_result:string;
begin
temp_result:='';
while Pos(' ',str)<>0 do
begin
i_1:=Pos('</span>',str);
i_0:=Pos(' ',str);
temp_result:=temp_result+Copy(str,i_0,i_1-i_0)+#13#10;
Delete(str,1,Pos('</span>',str));
end;
result:=StringReplace(temp_result,' ','',[rfReplaceAll]);
i_1 := Pos('-',Result);
Result := copy(Result,i_1+1,MaxInt);
end;
{ TComboBox }
constructor TComboBox.Create(AOwner: TComponent);
begin
inherited;
Values := TStringList.Create;
end;
destructor TComboBox.Destroy;
begin
Values.Free;
inherited;
end;
procedure TComboBox.LoadFromFile(Filename: string);
var
i: Integer;
begin
Items.Clear;
Values.LoadFromFile(Filename);
for i := 0 to Values.Count - 1 do
begin
Items.Add(Values.Names[i]);
end;
ItemIndex := 0;
end;
procedure TComboBox.LoadFromRes(ResName: string);
var
stream: TResourceStream;
i: Integer;
begin
stream := TResourceStream.Create(HInstance,'CityCode','TxtData');
Items.Clear;
Values.LoadFromStream(stream);
for i := 0 to Values.Count - 1 do
begin
Items.Add(Values.Names[i]);
end;
ItemIndex := 0;
stream.Free;
end;
end.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Delphi] TStringBuilder그리고 꼭 사용해야만 할까? 그림처럼 Heap 영역에 "Hello" 공간을 생성하고 포인팅을 한다. "Hello World" 공간을 새로 생성한 후 포인팅을 하게 된다. 결국 "Hello" 라는 String 객체가 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.