“最新”手机号码归属地库制作
目的
通過本文你可以自己動手制作最新的號碼歸屬地庫
所需技術
ü???????? html
ü???????? js、ajax
ü???????? php(或jsp)
ü???????? mysq
基本思路
利用http://api.showji.com提供的查詢接口,前臺頁面(querymobile.html)不斷查詢獲歸屬地數據,再提交到后臺處理頁面(deal.php),把數據保存至數據庫(phonenumber_db)表(tb_number)。
實現步驟
1.?????? 前臺html頁面
一個開始號碼輸入框、一個【開始查詢】按鈕,還有一些顯示查詢結果的span標簽,很簡單。如下圖:
部分源碼如下:
…………
?起始號碼(前七位):<input type="text" name="m" value="1300000" " id="m" />
<input type="button" value="開始查詢" id="btnQuery" οnclick="btnQuery(this)" />
?
<ul>
??? <li>所查號碼:<span id="txtMobile"></span></li>
??? <li>歸屬省份:<span id="txtProvince"></span></li>
??? <li>歸屬城市:<span id="txtCity"></span></li>
??? <li>城市區號:<span id="txtAreaCode"></span></li>
??? <li>城市郵編:<span id="txtPostCode"></span></li>
??? <li>卡 類 型:<span id="txtCard"></span></li>
</ul>
…………
?
2.?????? 前臺js
js在這里很重要,代碼較多,但都是基本的東西,有注釋,應該好理解
/** **********全局變量定義************** */
// 開始號碼(注:前七位手機號碼即可)
var startNumber = 1300000;
// 是否停止
var isFinish = false;
/** ************************ */
// 根據元素id獲取元素
// lxq 2011/09/11
/** ************************ */
function $(objID) {
??? return document.getElementById(objID);
}
?
/** ************************ */
// 號碼查詢后,執行的回調函數
// lxq 2011/09/11
/** ************************ */
function querycallback(obj) {
??? // 檢查是否成功獲取手機歸屬信息
??? if (obj["QueryResult"] != "True") {
?????? // 顯示查詢到的歸屬信息
?????? $("txtMobile").innerHTML = '<bold>暫無無數據</bold>';
?????? $("txtProvince").innerHTML = '';
?????? $("txtMobile").innerHTML = '';
?????? $("txtCity").innerHTML = '';
?????? $("txtAreaCode").innerHTML = '';
?????? $("txtPostCode").innerHTML = '';
?????? $("txtCard").innerHTML = '';
??? } else {
?????? // 顯示查詢到的歸屬信息
?????? $("txtMobile").innerHTML = obj["Mobile"];
?????? $("txtProvince").innerHTML = obj["Province"];
?????? $("txtCity").innerHTML = obj["City"];
?????? $("txtAreaCode").innerHTML = obj["AreaCode"];
?????? $("txtPostCode").innerHTML = obj["PostCode"];
?????? $("txtCard").innerHTML = obj["Corp"] + obj["Card"];
?????? // alert(obj.toJSONString());
?????? // 將查詢結果返回后臺,交與jsp(或php處理
?????? postDataToBack(obj);
?
??? }
?
}
?
/** ************************ */
// 查詢號碼函數,執行的回調函數
// lxq 2011/09/11
/** ************************ */
function query() {
??? // 若有停止查詢,應跳出查詢程序,不再繼續執行
??? if (isFinish) {
?????? return;
??? }
?
??? // 讀取歸屬數據,成功后調用 querycallback 函數
??? var oHead = document.getElementsByTagName('head')[0];
??? var oTar = $("remotejs");
??? // 存在此js節點應刪除,防止累計生成重復js代碼
??? if (oTar)
?????? oHead.removeChild(oTar);
?
??? var oScript = document.createElement('script');
??? oScript.type = "text/javascript";
??? oScript.id = "remotejs";
??? oScript.src = "http://api.showji.com/Locating/default.aspx?m="
?????????? + escape(startNumber) + "&output=json&callback=querycallback";
??? oHead.appendChild(oScript);
?
??? startNumber++;
??? $("m").value = startNumber;
}
?
/** ************************ */
// 查詢按鈕事件
// lxq 2011/09/11
/** ************************ */
function btnQuery(btn) {
??? // 獲取號碼,進行驗證
??? var mobile = $("m").value;
??? if (mobile.length == 1) {
?????? alert('請輸入號碼');
?????? return;
??? }
?
??? if (btn.value == '開始查詢') {
?????? var number = $("m").value;
?????? if (number != '') {
?????????? try {
????????????? startNumber = parseInt(number);
?????????? } catch (err) {
????????????? $("m").value = startNumber;
?????????? }
?????????? ;
?????? } else {
?????????? $("m").value = startNumber;
?????? }
?
?????? btn.value = '停止查詢';
?????? isFinish = false;
?????? query();
??? } else if (btn.value == '停止查詢') {
?????? btn.value = '繼續查詢';
?????? isFinish = true;
??? } else if (btn.value == '繼續查詢') {
?????? btn.value = '停止查詢';
?????? isFinish = false;
?????? query();
??? }
};
?
/** ************************ */
// 提交數據到后臺處理頁面deal.php
// lxq 2011/09/11
/** ************************ */
var xmlHttp;
function postDataToBack(data) {
??? xmlHttp = null;
??? var url = "http://localhost/test/deal.php";
??? if (window.XMLHttpRequest) {// IE7, Firefox, Opera
?????? xmlHttp = new XMLHttpRequest();
??? } else if (window.ActiveXObject) {// IE6, IE5
?????? xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
??? }
??? if (xmlHttp != null) {
?????? xmlHttp.onreadystatechange = function() {
?????????? // 若后臺處理完,繼續查詢下一個號碼
?????????? if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
????????????? // alert(xmlHttp.responseText);
????????????? query();
?????????? }
?????? };
?
?????? xmlHttp.open("POST", url, true);
?????? xmlHttp.setRequestHeader("Content-Type",
????????????? "application/x-www-form-urlencoded");
?????? var urlparams = "Mobile=" + data["Mobile"] + "&Province="
????????????? + data["Province"] + "&City=" + data["City"] + "&AreaCode="
????????????? + data["AreaCode"] + "&PostCode=" + data["PostCode"] + "&Corp="
????????????? + data["Corp"] + "&Card=" + data["Card"];
?
?????? urlparams = encodeURI(urlparams);
?????? xmlHttp.send(urlparams);
??? }
3.?????? 后臺處理頁面
后臺的處理思路是:先查詢是否存在該號碼信息,如存在則不再錄入該號碼信息,其他到沒什么了,就是簡單的sql操作了。
<?php
??? header("Content-type: text/html; charset=utf-8");
??? //獲取前臺提交數據
??? $Mobile = $_POST["Mobile"];
??? $Province =? urldecode($_POST["Province"]);
??? $City = urldecode($_POST["City"]);
??? $AreaCode = $_POST["AreaCode"];
??? $PostCode = $_POST["PostCode"];
??? $Corp = urldecode($_POST["Corp"]);
??? $Card = urldecode($_POST["Card"]);
???
??? $con = mysql_connect("localhost", "root", "root");
??? if (!$con)
??? {
?????? error_log("創建mysql連接失敗:". mysql_error(),3,"log.txt");
?????? die('Could not connect: ' . mysql_error());
??? }
??? mysql_query("set names utf8",$con);
??? $db_selected = mysql_select_db("phonenumber_db",$con);
??? $sql="SELECT * FROM tb_number WHERE Mobile = '".$Mobile."'";
??? $result = mysql_query($sql,$con);
??? $row = mysql_fetch_row($result);
???
??? //查詢不到此號碼時,才進行錄入該號碼
??? if($row == false){
?????? $sql ="INSERT INTO `phonenumber_db`.`tb_number` (`IID`, `Mobile`, `Province`, `City`, `AreaCode`, `PostCode`, `Corp`, `Card`) VALUES"
?????? ." (NULL, '".$Mobile."', '".$Province."', '".$City."', '".$AreaCode."', '".$PostCode."', '".$Corp."', '".$Card."');";
?????? $isSuccess = mysql_query($sql,$con);
??????
?????? if($isSuccess == false){
?????????? //echo '插入數據失敗....';
?????????? error_log("插入數據失敗:".error_get_last(),3,"./log.txt");
?????? }
??? }
???
??? //關閉連接
??? mysql_close($con);
?
?>
4.?????? 數據庫腳本
忘了說了,前臺、js、后臺、數據庫都應該使用utf-8編碼,防止出現亂碼。
一個數據庫一張表,這這些了
表tb_number
| 字段 | 類型 | Null | 默認 | 注釋 |
| IID | bigint(20) | 否? | ? | 內部標識? |
| Mobile | varchar(7) | 否? | ? | 號碼? |
| Province | varchar(50) | 否? | ? | 省份? |
| City | varchar(50) | 否? | ? | 地市? |
| AreaCode | varchar(25) | 否? | ? | 區域碼? |
| PostCode | varchar(25) | 否? | ? | 郵政編碼? |
| Corp | varchar(25) | 否? | ? | 運營商? |
| Card | varchar(25) | 否? | ? | 品牌? |
?
總結
以前在網上看到有人這樣搞過,記不清出,手機號碼歸屬地的數據庫網上也有些現成的數據庫,不是最新的,好像就10~20萬條記錄吧。網友也要那個j2me搞滴手機號碼源程序,才想起做最新庫的事,反正閑著沒事做
總結
以上是生活随笔為你收集整理的“最新”手机号码归属地库制作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: KMP讲解(自制动图)
- 下一篇: Acrel-5000型建筑能耗监测可对商