【原創】Java實現手機號碼歸屬地查詢

來源:互聯網
上載者:User

標籤:

網路上已經有很多的手機號碼歸屬地查詢的API介面,但是這些介面總是有一些大大小小的缺陷。

總結一下這些缺陷:

1、要直接將它的搜尋方塊連結形式粘到自己的頁面,點擊查詢的時候還要跳轉到他們的網站來展示歸屬地結果

2、提供介面的API,一般都要求付費,或者一天只有免費的限定查詢次數

3、有些部落格文檔中的API已經過於老舊,嘗試的時候,已經404Not Found的了

所以寫篇部落格,供正在做手機歸屬地查詢的小夥伴參考。

思路:

  ->我找到一個拍拍網的介面,可以通過curl直接傳手機號碼來進行查詢,並且會返回給我們一個類似json的字串(其實不是Json,就是一些字串裡面有我們想要的資訊)

  ->java通過HttpURLConnection去串連這個地址,並且抓取到所返回頁面的所有字串,這些字串中就含有上述的類json的結果

  ->那我們拿到這個字串,解析出我們想要的通訊商和省份城市等資訊就可以了

說明:

  拍拍網查手機歸屬地地址:http://virtual.paipai.com/extinfo/GetMobileProductInfo?mobile=15850781443&amount=10000

  參數說明:mobile:手機號碼

       amount:未知(但是必須要有,不然查詢不出結果)   傳回值:類似JSON的字串具體實現:  
 1 /** 2 * @ClassName: HttpClientUtil  3 * @Description: html頁面抓取素有字串工具類 4 * @author: chenkaideng 5 * @date 2015年11月2日 下午3:55:49  6  */ 7  8 import java.io.BufferedReader; 9 import java.io.InputStream;10 import java.io.InputStreamReader;11 import java.net.HttpURLConnection;12 import java.net.URL;13 import org.apache.commons.io.IOUtils;14 import org.apache.commons.lang3.StringUtils;15 import org.slf4j.Logger;16 import org.slf4j.LoggerFactory;17 18 19 public class HttpClientUtil {20     private static final Logger logger = LoggerFactory.getLogger("HttpClient");21     private String readInputStream(InputStream instream, String charest) throws Exception {22         StringBuilder sb = new StringBuilder();23         try(24                 InputStreamReader isr = new InputStreamReader(instream, charest);25                 BufferedReader reader = new BufferedReader(isr);) {26             String line = null;27             while ((line = reader.readLine()) != null) {28                 sb.append(line);29             }30         }31         return sb.toString();32         33     } 34     35     public String getWebcontent(String webUrl, String charest) {36         if (StringUtils.isEmpty(webUrl)) 37             return null;38         int response = -1;39         HttpURLConnection conn = null;40         try {            41             URL url = new URL(webUrl);42             conn = (HttpURLConnection) url.openConnection();43             conn.setRequestMethod("GET");44             conn.setReadTimeout(60 * 2000);45             conn.setConnectTimeout(10 * 1000);46             conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36");47             conn.setDoOutput(true);48             conn.connect();49             response = conn.getResponseCode();50             if (response == 200) {51                 InputStream im = null;                52                 try {53                     im = conn.getInputStream();54                     return readInputStream(im, charest);55                 } finally {56                     IOUtils.closeQuietly(im);57                 }58             }59             return null;60         } catch (Exception e) {61             logger.error(String.format("下載到檔案出錯[url=%s][%s][responsecode=%d]", webUrl, e.getMessage(), response));62             return null;63         } finally {64             if(conn != null) {65                 conn.disconnect();66                 conn = null;67             }68         } 69     }70 }

  然後調用上述的工具類,帶著手機號碼參數去訪問拍拍的介面地址,抓到頁面,解析出歸屬地資訊就可以了

 1 import com.alibaba.fastjson.JSONObject; 2 /** 3  *  4 * @ClassName: GetMobileMessage 5 * @Description: TODO 6 * @author [email protected] 7 * @date 2016年1月28日 下午2:40:56 8 * 9  */10 public class GetMobileMessage{11     private static final String PHONE_PLACE_API_URL="http://virtual.paipai.com/extinfo/GetMobileProductInfo";12     /**13      * 14     * @Title: getMobilePlace 15     * @Description: 擷取手機歸屬地資訊16     * @param @param mobile17     * @param @return     18     * @return String     19     * @throws20      */21     public String getMobilePlace(String mobile){22         HttpClientUtil util = new HttpClientUtil();23         String[] strings={"",""};24         try {25             //訪問拍拍的查詢介面26             String mobileMessage = util.getWebcontent(PHONE_PLACE_API_URL+"?mobile="+mobile+"&amount=10000", "GB2312");27             strings = mobileMessage.split(";");28             //(頁面擷取到的訊息,除了這些,還有一些html語句)29 //            string[0]="({mobile:‘15850781443‘,province:‘江蘇‘,isp:‘中國移動‘,stock:‘1‘,amount:‘10000‘,maxprice:‘0‘,minprice:‘0‘,cityname:‘南京‘})";30             mobileMessage = strings[0];31             JSONObject jsonObject = JSONObject.parseObject(mobileMessage.substring(1, mobileMessage.length()-1));32             //解析出省份和city和電訊廠商33             String province = jsonObject.getString("province");34             String cityname = jsonObject.getString("cityname");35             String isp = jsonObject.getString("isp");36             return isp+"&nbsp"+province+cityname;37         } catch (Exception e) {38             e.printStackTrace();39 //            logger.error(strings[0]+e.toString());40             return "";41         } 42     }43 }

 

這樣就可以免費得到手機號的歸屬地資訊了,而且可以作為自己的一個工具方法使用,大家愛怎麼封裝就怎麼封裝,

不然查個歸屬地還要收費還要給別人網站做廣告,實屬不爽啊。

但是唯一的缺陷就是,拍拍要是把這個地址一改,就得跟著改咯。

不過沒關係,都給整這個思路,什麼地址什麼介面都能整出歸屬地。

 

【原創】Java實現手機號碼歸屬地查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.