Delphi天气预报查询

简介:

   现在的很多软件中都内置了天气查看这个功能!其实呢,这个功能的实现并不麻烦!会上网的人,都会查天气情况!其实那些内置天气预报功能的软件的天气预报功能也都是来源于网上!因为也没有哪个软件公司会自己去架一个气象站了哈哈,现在我就来说说如何通过互联网上的信息来获取天气情况!

  目前能查询天气的网站有不少,比较有名的有中国天气网与Google天气,大部分站点与大部分软件的天气预报数据也都是来源于中国天气网!因为中国天气网是中国气象局相关的,所以他的数据会更准确一些!查阅本文信息时,假设读者熟悉http协议与如何模拟网页提交等知识!

  中国天气网有一个连接http://m.weather.com.cn/data/+‘城市编码.html',这个连接可以获取对应的城市的天气情况!返回Json数据,解析Json就能获得该城市的天气!这个问题就在那个城市编码的获取方式上,这个获取方式,网上有代码的!我就不写了,我是直接将城市编码都包到资源文件中去了使用的时候,直接从资源加载就行了!获得天气的Json数据,用的事Http协议,这里只要用可以提交http的数据的控件或者类都可以(比如,indy的idhttp,ics的http控件都行,也可以使用MSxml的IXMLHttpRequest,也可以使用HttpRequest5.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 .
复制代码


相关文章
|
C语言
Qt天气预报
Qt天气预报
143 0
|
5月前
|
开发工具
查询天气预报案例
这是一个关于如何查询天气预报的步骤指南,包括五个步骤:找到阿里云的天气服务、购买服务、获取AppCode和秘钥、参考SDK调用接口以及使用Hutool工具进行接口调用。提供了详细的操作截图和接口返回的示例数据。完整文档链接可在文中找到。
248 4
|
5月前
|
小程序
微信小程序实现一个电影信息查询的应用程序
微信小程序实现一个电影信息查询的应用程序
|
存储 JSON 搜索推荐
ABAP 报表中如何给报表的输入参数增添 F4 Value Help 试读版
ABAP 报表中如何给报表的输入参数增添 F4 Value Help 试读版
|
JSON 前端开发 JavaScript
授人以渔 - 如何查找 SAP UI5 官网上没有提到的控件属性的使用明细试读版
授人以渔 - 如何查找 SAP UI5 官网上没有提到的控件属性的使用明细试读版
|
缓存 BI
SAP ABAP 报表屏幕输入字段如何实现联动效果试读版
SAP ABAP 报表屏幕输入字段如何实现联动效果试读版
|
JSON 监控 API
php对接小鹅通API开发高级实战案例解析:获取指定资源学习记录信息(单人单学习记录、单人多学习记录累计、返回数据格式确认)
php对接小鹅通API开发高级实战案例解析:获取指定资源学习记录信息(单人单学习记录、单人多学习记录累计、返回数据格式确认)
293 0
|
机器学习/深度学习 小程序 定位技术
「教程」微信小程序获取地理位置信息自动查询天气预报信息(附详细代码)
「教程」微信小程序获取地理位置信息自动查询天气预报信息(附详细代码)
242 0
|
JSON 搜索推荐 数据挖掘
天气预报查询 API 提供个性化的天气服务的设计思路
假设你是一个开发人员或公司,正在考虑开发一款天气应用程序,但你意识到市场上已经有很多竞争者在使用天气预报查询 API 来提供类似的服务,本文将一起探寻一些创新的方法来提高应用程序的竞争力。
284 0
用免费的webservice查询天气
用免费的webservice查询天气
201 0
用免费的webservice查询天气