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;
}




自己制作悬浮窗——WindowManager的使用

悬浮窗,就像QQ安全卫士的小火箭,总的来说是用了一个Service从后台管理着WindowManager,这个WindowManager管理着小窗口,管理着悬浮窗。(提问,如果把这个管理悬浮窗的服务k...

数据绑定以及Container.DataItem几种方式与用法分析 .

灵活的运用数据绑定操作         绑定到简单属性:         绑定到集合:' runat="server">         绑定到表达式:         绑定到方法返回值: ...

C++开源矩阵计算工具——Eigen 在VS2005中的下载、配置与使用

1、  下载Eigen Eigen的官网下载地址:http://eigen.tuxfamily.org/index.php?title=Main_Page#Download 下载后的文件名为:ei...
  • hjx_1000
  • hjx_1000
  • 2013年01月07日 16:22
  • 18533

一个VS2005无法调试C++的问题

现象:在vs2005中,建立一个空项目,添加一个c++文件main.cc #include using namespace std; int main() { cout } 此时按f5...

如何在C++项目中引用Lib文件(VS2005)

1. 在解决方案资源管理器右击项目查看项目属性,选择配置属性-->C/C++-->常规选项卡,然后在“附加包含目录”一项中添加引用lib文件的头文件所在目录,如下图所示 2. 在文件st...
  • hfdwdjl
  • hfdwdjl
  • 2012年11月04日 14:55
  • 419

Eigen: C++开源矩阵计算工具——Eigen 在VS2005中的下载、配置与使用

1、  下载Eigen Eigen的官网下载地址:http://eigen.tuxfamily.org/index.php?title=Main_Page#Download 下载后的文件名为:eige...
  • Augusdi
  • Augusdi
  • 2013年10月21日 11:48
  • 6889

vs2005 C++ 空工程设置断点无效的问题

新建空白工程时,突然发现程序设置断点不能使用。 解决方法如下: 工程属性-->Configuration Properties-->Linker-->Debugging-->Generate De...

C++开源矩阵计算工具——Eigen 在VS2005中的下载、配置与使用

1、  下载Eigen Eigen的官网下载地址:http://eigen.tuxfamily.org/index.php?title=Main_Page#Download 下载后的文件名...
  • tywwwww
  • tywwwww
  • 2015年10月29日 13:14
  • 268

VS2005环境下C#调用C++ DLL 联调(win32及wince)

这篇文章让我看到了希望,忍不住转来: 原地址:http://space.itpub.net/12639172/viewspace-679365 再次表示谢意~ ---------...

为什么用vs2005平台运行C++的时候会显示 系统找不到指定路径?

原文链接:http://zhidao.baidu.com/question/218427182.htmlVS 2005在生成可执行文件时使用了一种新的技术,该技术生成的可执行文件会伴随生成一个清单文件...
  • xuwqcug
  • xuwqcug
  • 2011年07月20日 09:12
  • 675
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++查询本地天气 VS2005
举报原因:
原因补充:

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