//a:调用taobao ip地址库提供的接口
//http://ip.taobao.com提供的对外服务接口
//http://ip.taobao.com/service/getIpInfo.php?ip=219.231.255.255
//b:把taobao ip服务返回的json字符串 封装成结果bean
代码如下
|
1
2
|
package com.bw.transformers.etl.utils; /** * 转换ip地址工具类 * @author admin * */
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import java.net.HttpURLConnection; import java.net.MalformedURLException; import java.net.URL;
import org.apache.htrace.fasterxml.jackson.databind.ObjectMapper;
import com.bw.transformers.common.SystemConstant; import com.bw.transformers.etl.bean.JsonBean; import com.bw.transformers.etl.bean.RegionBean;
public class IPUtil {
/** * 通过ip地址获取其对应的地域信息 * @param ip * @return */ public static RegionBean changeIPToRegionInfo(String ip) { //1:通过taobao ip 服务获取地域信息 RegionBean regionBean = getRegionInfoByTaobaoService(ip); //2: 校验RegionBean数据合法性 validRegionInfo(regionBean); return regionBean; } //校验获取到的地域信息 /* * 处理哪些不合法信息: * a:任何一个地域信息如果查不到 * 不能是xx 需要提示信息"未知" * b:每次省或者市查询之后都需要补充 "省" 或者 "市" * c:省需要单独处理 * c1:处理自治区 * 内蒙古 * 新疆 * 宁夏 * 广西 * 西藏 * c2:处理直辖市 * 北京 * 天津 * 上海 * 重庆 * c3:特别行政区 * 香港 * 澳门 * c4:省 * 其它 */ private static void validRegionInfo(RegionBean regionBean) { //1:处理国家 String country = regionBean.getCountry(); if (country==null||"xx".equalsIgnoreCase(country)) { regionBean.setCountry("未知"); } else { regionBean.setCountry("中国"); } //2:处理市 String city = regionBean.getCity(); if (city==null||"xx".equalsIgnoreCase(city)) { regionBean.setCity("未知"); } else { regionBean.setCity(city+"市"); } //3:处理省 String province = regionBean.getRegion(); if (province==null||"xx".equalsIgnoreCase(province)) { regionBean.setRegion("未知"); } else { if ("内蒙古".equals(province)||"新疆".equals(province)||"宁夏".equals(province) ||"广西".equals(province)||"西藏".equals(province)) { regionBean.setRegion(province+"自治区"); }else if ("北京".equals(province)||"天津".equals(province)||"上海".equals(province) ||"重庆".equals(province)) { regionBean.setRegion(province+"市"); }else if ("香港".equals(province)||"澳门".equals(province)) { regionBean.setRegion(province+"特别行政区"); }else { regionBean.setRegion(province+"省"); } } }
private static RegionBean getRegionInfoByTaobaoService(String ip) { RegionBean rBean = null; //a:拼接访问taobao ip服务的字符串 //http://ip.taobao.com/service/getIpInfo.php?ip=219.231.255.255 String sendurl = SystemConstant.IP_TAOBAO_URL_PREFIX+"?ip="+ip; //b:发送url 调用服务 URL url = null; HttpURLConnection connection = null; JsonBean jsonBean = null; try { url = new URL(sendurl);//通过url创建网络对象 connection = (HttpURLConnection) url.openConnection();//通过网络对象获取网络连接 connection.setRequestMethod("GET");//指明请求的方式是get方式 connection.setReadTimeout(2*1000);//设定读取返回数据流的超市时间 //以上是通过http开始调用taobao ip服务 // * io: // * a:此时是接收taobao ip服务的返回值 就是response // * 对于当前的代码客户端就是输入流 // * 对于网络就是最基本的输入字节流 InputStream is = connection.getInputStream();//从服务连接返回response 客户端输入网络流 //b:把输入流转成字符流 因为如果请求 响应正确 最终是接受json字符串 //所以这个字节流肯定可以转成字符流 Reader reader = new InputStreamReader(is, "UTF-8"); //c:给输入字符流再加缓冲 提升效率 BufferedReader bufferedReader = new BufferedReader(reader); //d:开始接收返回的json字符串 String json = ""; String line = null; while ((line=bufferedReader.readLine())!=null) { json += line; } //通过以上的循环 json字符串就是taobao ip服务最终返回的所有json //把接收到的json字符串 封装入bean //常用的json字符串和bean或者集合互相转化使用的中间件: //a:fastjson //b:jackson 默认的springmvc底层相互转化使用的中间件 ObjectMapper objectMapper = new ObjectMapper(); jsonBean = objectMapper.readValue(json, JsonBean.class); } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return jsonBean.getData(); } }
|