C++查询本地天气 VS2005

原创 2013年12月04日 16:38:26

之前看到一篇文章写得很有意思,自己用VS2005尝试着做,发现很多问题尴尬


1、中央气象台API返回的JSON数据(http://m.weather.com.cn/data/101010100.html

2、外网获取IP(http://ip.dnsexit.com/index.php

//3、Sqlite(1中的城市代号利用sqlite3实现查询)

4、C++中GB2312字符串和UTF-8之间的转换(见这篇文章http://blog.csdn.net/lgh1992314/article/details/8579206

5、Jsoncpp(主要是处理1中的数据==见这篇文章http://blog.csdn.net/lgh1992314/article/details/8582179

以上转至http://blog.csdn.net/x_iya/article/details/16834343


http://sourceforge.net/projects/jsoncpp上下载JSon源码,编译得到静态库。

进入jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\makefiles\vs71 打开jsoncpp.sln,右键lib_Json-生成静态库,文件在jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\build\vs71\debug\lib_json文件夹中;

注:右键lib_Json-属性-配置属性-C/C++-代码生成-运行时库-“多线程调试(/MTD)”


接下来建立一个项目来查询天气,暂时只查询本地(深圳天气)未用到Sqlite;

VS2005配置如下:

属性-配置属性-常规-MFC的使用-在静态库中使用MFC
属性-配置属性-常规-字符集-使用多字节字符集
属性-配置属性-C/C++-代码生成-运行时库-多线程调试(/MTD)
属性-配置属性-连接器-输入-附加依赖项-json_vc71_libmtd.lib nafxcwd.lib libcmtd.lib


将json_vc71_libmtd.lib库和jsoncpp-src-0.5.0\jsoncpp-src-0.5.0\include\下的json文件夹导入当前工程目录,

在头文件中写入#include "json/json.h"

// testJson.cpp : 定义控制台应用程序的入口点。
#include "stdafx.h"
#include "json/json.h"
#include <string>
#include <iostream>
#include <afxinet.h>

std::string GetWeb(const char* _pUrl)
{
CInternetSession session("Httpclient");


CHttpFile* pFile = (CHttpFile*)session.OpenURL(_pUrl);


CString csData;
CString csContent;
DWORD dwStatusCode;
pFile->QueryInfoStatusCode(dwStatusCode);
if (dwStatusCode == 200)
{
while (pFile->ReadString(csData))
{
csContent += csData;
}
}
return std::string(csContent);
}


char* UTF8ToGB2312(const char* _p8Data)
{
int nLen = MultiByteToWideChar(CP_UTF8, 0, _p8Data, -1, NULL, 0);//获取UTF-8编码下多字节数据的长度
wchar_t* pw8Dada = new wchar_t[nLen+1];//+1 给‘\0’
MultiByteToWideChar(CP_UTF8, 0, _p8Data, -1, pw8Dada, nLen);//将UTF-8编码下多字节数据转换成UTF-8编码的宽字节数据


nLen = WideCharToMultiByte(CP_ACP, 0, pw8Dada, -1, NULL, 0, NULL, NULL);//获取ANSI编码下宽字节数据的长度
char* pGB2312Data = new char[nLen+1];//此处还有一个释放问题未解决
WideCharToMultiByte(CP_ACP, 0, pw8Dada, -1, pGB2312Data, nLen, NULL, NULL);//将ANSI编码下宽字节数据转换成ANSI编码的多字节数据


if (pw8Dada)
{
delete []pw8Dada;
}
return pGB2312Data;
}


void JsonWeather()
{
std::string str8Dada = GetWeb("http://m.weather.com.cn/data/101280601.html");
    std::string strGB2312Dada(UTF8ToGB2312(str8Dada.c_str()));
Json::Value Weather;
Json::Reader reader;
reader.parse(strGB2312Dada, Weather);


std::cout<<Weather["weatherinfo"]["city"]<<std::endl;
    std::cout<<Weather["weatherinfo"]["date_y"]<<std::endl;
std::cout<<Weather["weatherinfo"]["week"]<<std::endl;
std::cout<<Weather["weatherinfo"]["cityid"]<<std::endl;
std::cout<<Weather["weatherinfo"]["temp1"]<<std::endl;




}


int _tmain(int argc, _TCHAR* argv[])
{

JsonWeather();
getchar();
return 0;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

c++实现查询天气预报

用到的函数、API等 1、中央气象台API返回的JSON数据(http://m.weather.com.cn/data/101010100.html) 2、外网获取IP(http://ip.dnsex...

C++获取天气信息

C/C++获取天气,用套接字对HTML进行处理

好玩的API调用之---天气预报的API调用与爬虫

好玩的API调用之—天气预报的API调用与爬虫 更多技术文章请访问我的个人博客http://www.rainweb.site平时写程序经常需要用到一些服务,像翻译,天气预报,星座什么的,我一般都是用...

c++实现查询天气预报

原地址:http://blog.csdn.net/x_iya/article/details/8583015 用到的函数、API等 1、中央气象台API返回的JSON数据(http...

开源免费天气预报接口API以及全国所有地区代码!!(国家气象局提供)

国家气象局提供的天气预报接口 接口地址: http://www.weather.com.cn/data/sk/101010100.html http://www.weather.co...
  • yybj
  • yybj
  • 2014-10-26 15:07
  • 2954

利用C++调用天气webservice-gSOAP方法

首先需要下载一个gSOAP工具包 下载路径为:https://sourceforge.net/projects/gsoap2/ 至于有关于gSOAP的一些用法和包含的文件的说明可从官网查看:http...

内存映射文件详解-----C++实现(即一块内存和一个文件相映射对应)

内存映射文件详解-----C++实现 分类: C++ 先不说内存映射文件(即一块内存和一个文件相映射对应)是什么。贴个代码先,。 [cpp] view ...

C++采用内存映射方式高效率读写大数据

在有时候,项目的数据量特别大,而且源源不断的到来,这个时候,利用传统的IO文件流写文件势必效率很低跟不上节奏。不妨采用内存映射方式来写文件,达到高效。 我们这里采用mmap这种内存映射方法: 一、mm...

C++ 使用文件映射

针对大文件来说一般是以内存映射文件的方式来进行的。具体的各种原理什么的可以参考windows核心编程。这里主要说下怎么用的。   一般情况下使用CreateFileA,CreateFileMappin...

调用天气api实现查询各城市天气

调用的api数据为haoservice.com网站提供的天气数据。 如下图,我们需要向其传递的参数有两个,一个为我们自己申请的key,一个为城市名字。 首先定义两个变量,一个存储key,一个存储接...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)