批量获取手机号归属地

package main

import (
    "bufio"
    "crypto/tls"
    "encoding/json"
    "fmt"
    "io"
    "io/ioutil"
    "log"
    "net/http"
    "os"
    "path/filepath"
    "strings"
    "time"
)

type RespData struct {
    Mobile string
    Msg    string
    Meta   struct {
        Result string `json:result`
    } `json:meta`
    Data struct {
        Area     string `json:area`
        Operator string `json:operator`
    } `json:data`
}

var (
    client *http.Client
)

func init() {
    tr := &http.Transport{
        TLSClientConfig: &tls.Config{InsecureSkipVerify: true}} //忽略https的证书检查
    client = &http.Client{Transport: tr}
}

func main() {
    log.Println("请输入含有手机号的文本文件路径(最终结果也将放在此目录中)!当手机号较多时将会消耗较多系统资源")
    stdInput := bufio.NewReader(os.Stdin)
    filePath, _ := stdInput.ReadString('\n')
    filePath = strings.ReplaceAll(filePath, "\n", "")
    filePath = strings.ReplaceAll(filePath, "\r", "")
    filePath = strings.Trim(filePath, " ")
    if filePath == "" {
        log.Fatal("您未输入文件路径!告辞")
    }
    mobiles := ReadMobilesFromFile(filePath)
    mobileAreaChan := make(chan *RespData, len(mobiles))
    for _, mobile := range mobiles {
        go MobileAreaInfo(mobileAreaChan, mobile)
    }
    fileDir := filepath.Dir(filePath)
    currentTime := time.Now()
    mobileAreaFile := filepath.Join(fileDir, currentTime.Format("2006-01-02"))
    os.Remove(mobileAreaFile)
    fileObj, err := os.Create(mobileAreaFile)
    if err != nil {
        log.Fatal(err)
    }
    defer fileObj.Close()
    writer := bufio.NewWriter(fileObj)
    for i := 0; i < len(mobiles); i++ {
        data := <-mobileAreaChan
        line := fmt.Sprintf("手机号=%s 归属地=%s 运营商=%s 错误信息=%s\n", data.Mobile, data.Data.Area, data.Data.Operator, data.Msg)
        fmt.Println(line)
        writer.WriteString(line)
    }
    writer.Flush()
}

//从文件中读取手机号
func ReadMobilesFromFile(fileName string) []string {
    file, openErr := os.Open(fileName)
    if openErr != nil {
        log.Fatal(openErr)
    }
    defer file.Close()
    ret := []string{}
    rd := bufio.NewReader(file)
    for {
        line, readErr := rd.ReadString('\n')
        if readErr != nil && readErr == io.EOF {
            break
        } else if readErr != nil {
            log.Fatal(readErr)
        }
        line = strings.Replace(line, "\n", "", -1)
        line = strings.Replace(line, "\r", "", -1)
        ret = append(ret, line)
    }
    return ret
}

//手机号归属地信息
func MobileAreaInfo(areaChan chan *RespData, mobile string) {
    var respData *RespData = new(RespData)
    respData.Mobile = mobile
    req, err := http.NewRequest("GET", fmt.Sprintf("https://www.baifubao.com/callback?cmd=1059&phone=%s", mobile), nil)
    if err != nil {
        respData.Msg = err.Error()
        areaChan <- respData
        return
    }
    resp, err := client.Do(req)

    if err != nil {
        respData.Msg = err.Error()
        areaChan <- respData
        return
    }
    defer resp.Body.Close()
    if resp.StatusCode != http.StatusOK {
        respData.Msg = fmt.Sprintf("响应状态码%d错误", resp.StatusCode)
        areaChan <- respData
        return
    }

    bodyData, _ := ioutil.ReadAll(resp.Body)
    bodyStr := string(bodyData)
    bodyStr = strings.Replace(bodyStr, "/*fgg_again*/(", "", -1)
    bodyStr = strings.TrimSuffix(bodyStr, ")")
    json.Unmarshal([]byte(bodyStr), respData)
    areaChan <- respData
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,718评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,683评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,207评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,755评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,862评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,050评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,136评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,882评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,330评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,651评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,789评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,477评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,135评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,864评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,099评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,598评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,697评论 2 351

推荐阅读更多精彩内容

  • 遇到一个需求, 需要发送短信给全球各地的用户, 但是各大运营商的API都是 区分 国内 和 国际, 但是我们只有电...
    毛宇鹏阅读 1,768评论 0 0
  • java获取手机号归属地 一般想获取手机号归属地等信息个人是无法获取的,但是可以通过调用第三方接口获取,具体百度搜...
    AA织梦yz阅读 642评论 0 0
  • 我是黑夜里大雨纷飞的人啊 1 “又到一年六月,有人笑有人哭,有人欢乐有人忧愁,有人惊喜有人失落,有的觉得收获满满有...
    陌忘宇阅读 8,531评论 28 53
  • 人工智能是什么?什么是人工智能?人工智能是未来发展的必然趋势吗?以后人工智能技术真的能达到电影里机器人的智能水平吗...
    ZLLZ阅读 3,768评论 0 5
  • 首先介绍下自己的背景: 我11年左右入市到现在,也差不多有4年时间,看过一些关于股票投资的书籍,对于巴菲特等股神的...
    瞎投资阅读 5,711评论 3 8