09-10
22

QQ城市达人接口编程及经验分享

到QQ,估计中国大半的人都知道,也用过,QQ交友也迅速成为一种时尚,一种生活,乃至一种社会现象。扯远了,呵呵。

说到城市达人,估计很多QQ的用户都会知道,这是腾讯交友平台的一个举措,很多用户的信息都可以查询到,城市达人的网址如下:http://city.qzone.qq.com/ ,里面搜索QQ用户资料估计是一大亮点。因为在不仅在其网站上提供搜索用户信息的功能,更难难可贵的是提供了给外部访问的接口,因此,应运而生出很多QQ交友的软件,交友辅助软件,都是靠城市达人提供的数据接口。

笔者也在这个基础上做了一个QQ资料查询和导出的工具:QQ号码采集及邮件发送系统,QQ号码采集就是利用了城市达人的数据进行整理的。

本文主要介绍如何利用城市达人的外部访问接口,实现QQ数据的获取和解析,分享相关的开发经验,帮助大家了解相关的问题,希望大家创造出更好的QQ应用软件。

下面先看看这个软件的界面。



撇开邮件发送部分,大家可以看到,QQ的数据可以分页查看,也可以全部条件的数据导出,目前城市达人的数据接口是通过URL地址获取的,地址如下形式:

http://city.qzone.qq.com/json.php?mod=search&act=page&city=440300&age=8&sex=3&page=1

其中的city是城市代码(包含省、城市、地区的代码),age是年龄段,Sex是性别,page是第几页,一般是通过这些条件来获取的

这些数据返回的格式是Json格式的数据,不知道大家做.net有没有听说过,这在Java领域可是很早就出来的概念和应用了。

利用接口第一次获取的时候,返回的数据用包含有这些条件结果的页数、数据等信息,下面我介绍下返回的数据:




数据主要分为两部分,一部份是QQ用户资料,如{"uin":开始的数据,uin就是QQ号码,其他的根据英文就知道具体意思了;另外一部份是结果信息,包含当期页面的页数,总结果的数量和页数等信息,这些对我们非常有用。

如果想利用QQ城市达人接口进行编程,就是解析这些看似怪怪的字符了,它们其实是Json的标准格式,解析这些类型有两种方式,一种是根据这些数据的规律,使用字符定位的方式(如正则表达式等)方式进行提取数据,另外一种方式就是今天要讲的利用.NET的组件,直接将这些数据转换为实体类,一两行代码搞定,呵呵。

解析代码如下:



List<QQData> entities = (List<QQData>)JavaScriptConvert.DeserializeObject(json, typeof(List<QQData>));




我定义的实体类信息如下:


public class QQData
{
public int err;
public int page;
public pagecount property;

public List<memberdata> data = new List<memberdata>();
}

public class pagecount
{
public string total_count;
public int total_page_count;
}

public class memberdata
{
public string uin;
public string online;
public string birthday;
public string nickname;
public string smallurl;
public string sex;
public string yellow;
public string job;
public string cate;
public string state1;
public string state2;
public string state3;
public string city;
public string edu;
public string intent;
public string emotion;
public string home;
public string bloodType;
public string weight;
public string height;
public int albumID;

public override string ToString()
{
return string.Format("uin:{0} nickname:{1}", uin, UnicodeHelper.UnicodeToString(nickname));
}
}


使用城市达人接口数据几个地方要值得注意:

1)所有的数据是按页返回了,一般一页为10个数据,你如果要返回多页,或者每页返回多条记录,如我上面的软件,那就需要解析返回结果,或者循环查找指定的页面结果数据了。

2)查找多个页面的数据是比较耗费时间的,因此最好放到一个独立的线程处理数据,这样可以提高用户体验

3)使用Json.net的相关组件可以提高处理效率,不用去解析那些鬼怪的的字符,但是要注意的是,实体类的属性或者字段,必须符合返回结果的名称,大小写要统一,否则出错。

4)城市达人返回的中文字符是Unicode字符编码处理过的字符,因此要做相应的解析工作才能正常显示。

5)城市代码是一个很庞大的数据,里面有省份(包括其他国家地区)、城市(如广州)、地区(如天河区)等内容,这些可以找城市达人的页面里面的脚本拿到相关的数据,不过最好的是大家参考我上面说的软件,里面的相关数据我都整理好了,大家可以直接使用。我是基于那些脚本里面的Json格式这里的,至少花费1天的功夫,很辛苦,希望大家不要走老路。呵呵

希望此文对大家有所帮助,谢谢支持。



上面的软件“QQ号码采集及邮件发送系统”详细介绍地址:http://www.iqidi.com/qqcollector.htm

软件用到的解析Json的类库是Newtonsoft.Json.dll, 大家可以在google里面查询相关的内容介绍,再此提供该压缩文件:http://files.cnblogs.com/wuhuacong/Newtonsoft.Json.rar
主要研究技术:代码生成工具、Visio二次开发


文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 233
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭