Delphi 일기예보 조회

26422 단어 Delphi
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,'&nbsp;','',[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.

 
 
 

좋은 웹페이지 즐겨찾기