一个在conky中实现获取本地天气的c源代码。
源文件:w01.c,配置文件:weather.rc
makefile文件。
/*这是一个可以在conky下使用的获取天气预报的小程序,一下文档为一完整的
c源文件,名称为:w01.c
与此程序相关的文件还有:wearher.rc,makefile。
其中:wearther.rc为配置文件。
作者:linux吧-邻家捣蛋精灵 tybitsfox
*/
#include "/workarea/cprogram/include/clsscr.h"
#include
#include
#ifndef BYTE
#define BYTEunsigned char
#endif
#define bufsize65536
//分析、显示数据的数量,如需更多显示可更改此处,并添加weather.rc中查询关键字和位置。
#define dnum3
/*本程序将集成所有conky气象数据的获取操作,不带参数的调用将用于获取网页数据
* 资料并保存为临时文件。/tmp/wthxx0316.dat
* 带一个参数的调用将分别析取不同的显示数据并显示。目前为析取3个数据
* 如需添加,可在weather.rc中添加相应的搜索关键字及查询位置,并且增大
* dnum的大小。
* 默认的资源文件为~/.conky/weather.rc
* 为节约conky资源,还是使用临时文件将已经获取的数据保存其中,该文件默认为:/tmp/wthdata.dat
*/
/*
* 2009年6月6日修改版,使用中文显示天气预报。
* http://203.81.29.121/tq1.php?f=o&city=%cc%A9%B0%B2
*/
FILE *fp;
size_t write_data(void *p,size_t size,size_t number,void *stream);//curl要求的回调函数,用于保存为文件
int geturl();//获取气象web网页资料
int analy();//分析,获取数据
int fnd(BYTE* pd,BYTE* ps,int len,int dlen,int fd);//由analy调用,实现分析、保存数据
int main(int argc,char** argv)
{
int i,j;
char ch[512];
if(argc==1)
{//获取网页并分析获得需要的数据,保存至临时文件wthdata.dat
if(geturl()!=0)
{
//printf("geturl error\n");所有的显示在函数中实现
return 0;
}
pid_t pid;
pid=fork();
if(pid==0)
{
system("iconv -f GB2312 -t UTF-8 /tmp/wthxx0316.da > /tmp/wthxx0316.dat");
return 0;
}
if(pid>0)
{
sleep(3);
if(analy()!=0)
{
//printf("analysis error\n");在函数中实现
return 0;
}
}
goto normal_1;
}
else
{
if(argc==2)
{//带有一个参数的调用,将实现不同数据的显示。
i=atoi(argv[1]);
if(i<1 || i>dnum)//保证参数的设置与资源文件中一致
{
goto perr_1;
}
FILE *fl;char *p1;
fl=fopen("/tmp/wthdata.dat","r");
if(fl==NULL)
{
printf("open file error\n");
goto normal_1;
}
for(j=0;j
{//通过循环获得不同行的数据。
memset(ch,0,sizeof(ch));
p1=fgets(ch,sizeof(ch),fl);
if(p1==NULL)
{
printf("get data error\n");
fclose(fl);
goto normal_1;
}
}
printf("%s",ch);
fclose(fl);
goto normal_1;
}
else
{
goto perr_1;
}
}
perr_1:
printf("get and save date usage:\n %s\ndisplay usage: %s num\n",argv[0],argv[0]);
normal_1:
return 0;
}
//与服务器通讯,获取web数据,并保存于/tmp/wt