各位好,
我想用Delphi 开发天气预报的小程序。试了很多方法,调用一些WebService ,但还是不成功。请问那位开发过这样的程序,给帮帮。谢谢
我现在想调用:http://www.webxml.com.cn/webservices/weatherwebservice.asmx 这个,但是不懂如何输入参数(城市)
我想用Delphi 开发天气预报的小程序。试了很多方法,调用一些WebService ,但还是不成功。请问那位开发过这样的程序,给帮帮。谢谢
我现在想调用:http://www.webxml.com.cn/webservices/weatherwebservice.asmx 这个,但是不懂如何输入参数(城市)
解决方案 »
- [delphi]用treeview如何返回首个节点的值?
- 谁的电脑上有Fr_Class这个文件?发一个给我,谢谢
- 关于还原数据库出问题了,帮帮忙啊
- List Index out of bounds(3)?
- 有关dataset的问题??
- !!!!为什么我的网页中的ActiveXForm只能在我的机器上正常运行?在别人的机器上不能够下载?
- 紧急求助delphi5和sql server中的关于word2000文件的有关问题(在线等待)
- 你喜欢改板后的csdn吗?欢迎大家进来签名!!!!
- 关于delphi 的socket方面的编程的资料哪里能找到,谢谢
- 菜鸟的烦恼!如何转换real到integer;
- 关于Delphi Indy 控件里IdTcpClient 的疑问
- delphi发送邮件
以下是 HTTP GET 请求和响应示例。所显示的占位符需替换为实际值。GET /webservices/weatherwebservice.asmx/getWeatherbyCityName?theCityName=string HTTP/1.1
Host: www.webxml.com.cnHTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length<?xml version="1.0" encoding="utf-8"?>
<ArrayOfString xmlns="http://WebXml.com.cn/">
<string>string</string>
<string>string</string>
</ArrayOfString>
HTTP POST
以下是 HTTP POST 请求和响应示例。所显示的占位符需替换为实际值。POST /webservices/weatherwebservice.asmx/getWeatherbyCityName HTTP/1.1
Host: www.webxml.com.cn
Content-Type: application/x-www-form-urlencoded
Content-Length: lengththeCityName=string
HTTP/1.1 200 OK
Content-Type: text/xml; charset=utf-8
Content-Length: length<?xml version="1.0" encoding="utf-8"?>
<ArrayOfString xmlns="http://WebXml.com.cn/">
<string>string</string>
<string>string</string>
</ArrayOfString>
var
url: string;
Json: TlkJSONobject;
ChildJson,tmpJson: TlkJSONbase;
begin
HttpReq := CoXMLHTTPRequest.Create;
//url := 'http://m.weather.com.cn/data/'+Combobox1.Values.ValueFromIndex[ComboBox1.ItemIndex]+'.html';
url := 'GET /webservices/weatherwebservice.asmx/getWeatherbyCityName?theCityName=深圳';
HttpReq.open('Get', Url, False, EmptyParam, EmptyParam);
HttpReq.send(EmptyParam);//开始搜索
Url := HttpReq.responseText;
Json := Tlkjson.ParseText(url) as TlkJSONobject;
// ChildJson := TlkJSONbase.Create;
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)+'
先从QQ的接口获取当前IP的地址,再通过中国天气的城市代码对照表获取城市代码,
然后导入天气接口的WebService单元,然后传城市代码过去,返回一个天气信息的字符串,
自己再解析出今明后的天气。。
先从QQ的接口获取当前IP的地址,再通过中国天气的城市代码对照表获取城市代码,
然后导入天气接口的WebService单元,然后传城市代码过去,返回一个天气信息的字符串,
自己再解析出今明后的天气。。
------
太理论了,能否来点实际的呢,谢谢
//url := 'http://m.weather.com.cn/data/'+Combobox1.Values.ValueFromIndex[ComboBox1.ItemIndex]+'.html';
---- 这个是原来网上的代码,如城市是深圳,那么是不是 ... 深圳.html ?? 但是这样打不开网页。
我现在调用 http://www.webxml.com.cn/webservices/weatherwebservice.asmx ,但是不知道怎么处理
1.新建一个App, 放上一个button, listbox, HTTPRIO
2.新建webservices -> wsdlInmporter 导入你这个网站的Wsdl 让程序知道调用规则
不出意外会生成个WeatherWebService.pas ,主窗体引用它
http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl3.设置HTTPRIO的 port, service, wsdlLocation 会下拉出来
4.写点代码吧
//得到支持的地区
procedure TForm1.Button1Click(Sender: TObject);
var
AOS: ArrayOfString;
I: Integer;
begin
AOS := (HTTPRIO1 as WeatherWebServiceSoap).getSupportProvince;
for I := Low(AOS) to High(AOS) do
Listbox1.Items.Add(AOS[I]);
end;
5.剩下的楼主自己写吧,如果写的成熟了,发份给我吧:)
AOS,ss: ArrayOfString;
I: Integer;
begin
AOS := (HTTPRIO1 as WeatherWebServiceSoap).getSupportProvince;
for I := Low(AOS) to High(AOS) do
Listbox1.Items.Add(AOS[I]); -- 可以把所有省份列出来
但是使用下面代码,出现错误:
-- 取省份下的城市
ss := (HTTPRIO1 as WeatherWebServiceSoap).getSupportCity('广西')
-- 取城市的天气
ss := (HTTPRIO1 as WeatherWebServiceSoap).getWeatherbyCityName('深圳');---- 错误信息为:
Project Project1.exe raised exception class ERemotableException with message '服务器无法处理请求。 ---> 未将对象引用设置到对象的实例。'. Process stopped. Use Step or Run to continue.
1. 把 HTTPRIO1-> HTTPWebNode->的UseUTF8InHeader 设为True
2. 打开WeatherWebService.pas在initialization最下面添加上
InvRegistry.RegisterInvokeOptions(TypeInfo(WeatherWebServiceSoap), ioDocument);