日期:2014-05-16  浏览次数:20525 次

获取世界大学数据(人人网)

今天闲来无事,凭着对大数据和海量数据的浓厚兴趣,把很久之前想写但没写完的程序坚持写完了,下面简要介绍一下吧。

这些程序的主要目的是统计世界大学的信息,主要的数据来源就是人人网了,在人人网上有一个接口,就是在查询大学数据的时候,通过Ajax会向后台发送一个请求(http://s.xnimg.cn/a27085/allunivlist.js),这个请求的返回值就是一个js文件,而这个js文件就是一个很大的json对象,然后通过解析这个json对象就可以得到世界大学的信息了。

原来在论坛里面已经有人对此做了实现(http://www.iteye.com/topic/1118508),不过貌似比较复杂,源码看得都累了,所以自己想做一个实现,简化一些操作。

首先就是要保存下来这个js文件,对保存下来的js文件稍作修改:var allUnivList = [{"id":"00","univs":"",改成[{"id":0,"univs":"",也就是把前面变量定义去掉,因为已经没用了,还有就是把00改成0。基本上就是这些,下面是工程的源代码:

首先说明一下,要看得懂这里的源代码,其实还是需要花费一段时间的,主要就是对那个很大的json对象要很熟悉,下面是我整理出的一个对象框架,希望能让读者受益:(考虑到阅读方便,这里已经做了转码)

[{"id":0,"univs":"","name":"中国","provs":[//像中国这样的,国家没有大学,只有省市级别的才有大学
	{"id":1,"univs":[{"id":1001,"name":"清华大学"}...{"id":2000,"name":"中北国际演艺学校"}],"country_id":0,"name":"北京"},
	{"id":2,"univs":[{"id":2001,"name":"复旦大学"}...{"id":2169,"name":"上海大学巴士汽车学院"}],"country_id":0,"name":"上海"},
	...
	{"id":32,"univs":[{"id":32001,"name":"香港大学"}...{"id":32013,"name":"The Open University of HongKong"}],"country_id":0,"name":"香港"},
	...
	{"id":34,"univs":[{"id":34001,"name":"国立台湾大学"}...{"id":34055,"name":"铭传大学?"}],"country_id":0,"name":"台湾"}
]},
...//省略了很多国家
{"id":"28","univs":[//像印度这样的,没有省市级别的大学只有国家的大学
	{"id":2800001,"name":"University of Delhi"}...{"id":2800008,"name":"St.xavier's College"}],
"name":"印度","provs":""},
{"id":"29","univs":[//奥地利也和印度一样只有国家级别的大学
	{"id":2900001,"name":"Akademie der bildenden Künste Wien"}...{"id":2900110,"name":"Wirtschaftsuniversit?t Wien "}],
"name":"奥地利","provs":""}]
 

?

?下面就是真正的源代码:

UniBean.java

package com.universities.samples;

public class UniBean {

	private Integer id;
	private String name;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

?

?ProBean.java

package com.universities.samples;

public class ProBean {

	private Integer id;
	private String univs;
	private Integer country_id;
	private String name;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUnivs() {
		return univs;
	}
	public void setUnivs(String univs) {
		this.univs = univs;
	}
	public Integer getCountry_id() {
		return country_id;
	}
	public void setCountry_id(Integer country_id) {
		this.country_id = country_id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

?

?ConBean.java

package com.universities.samples;

public class ConBean {

	private Integer id;
	private String univs;
	private String name;
	private String provs;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getUnivs() {
		return univs;
	}
	public void setUnivs(String univs) {
		this.univs = univs;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getProvs() {
		return provs;
	}
	public void setProvs(String provs) {
		this.provs = provs;
	}
	
}

?

?University.java

package com.universities.samples;

public class University {

	private Long id;//自动生成。主要为防止冲突的
	private String name;//大学名称
	private Integer cid;//国家编号
	private String county;//国家名
	private Integer pid;//省市编号
	private String province;//省市名
	private Integer uid;//大学在国家里的编号
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getCid() {
		return cid;
	}
	public void setCid(Integer cid) {
		this.cid = c