手机归属地查询(云平台开发)

概要

本章主要简示了使用聚合云API获取指定手机号的归属地信息,这次找了个可以免费查询很多次的平台。开发主要根据聚合的官方文档,由于获取的查询结果是Json格式,所以涉及到了Json解析,但现在的IOS开发内置了Json解析库,所以事情就简单多了。

结果展示

流程概要

1.在聚合云平台上注册账号并创建应用,下载对应的SDK

2.查看SDK文档,根据文档描述创建应用添加头文件、库、框架,官当文档描述如下:

将JuheApisSDK.a以及头文件“include”文件夹添加到自己的工程中来,添加依赖库CoreTelephony.framework, AdSupport.framework, CoreLocation.framework。
   注:
      1,开发环境使用xCode6.0以上版本进行开发,
      2,将AppDelegate.m改为AppDelegate.mm,或者选中项目,在右侧的设置窗口中选择:TARGETS->XXX(项目名)->Build Phases->Link Binary With Libraries,添加libc++.dylib。

添加聚合数据SDK以及依赖的包(Objective-C)

3.把OpenID和AppKey放到工程里面,布局界面

4.构建请求URL,使用NSURLConnection发出请求,使用对应的代理保存获取的结果,并使用NSJSONSerialization解析请求结果,注意Json解析后的结果是个字典树类型。

主要代码

h文件

//
//  ViewController.h
//  WhatPhone
//
//  Created by God Lin on 14/12/13.
//  Copyright (c) 2014年 arbboter. All rights reserved.
//

#import <UIKit/UIKit.h>
@interface ViewController : UIViewController
{
    NSString* _openID;
    NSString* _keyID;

    UITextField* _textPhone;
    UITextView* _textResult;

    NSString* _stringRecived;
}

@property (nonatomic, retain) NSString* _openID;
@property (nonatomic, retain) NSString* _keyID;
@property (nonatomic, retain) UITextField* _textPhone;
@property (nonatomic, retain) UITextView* _textResult;
@property (nonatomic, retain) NSString* _stringRecived;

@end

m文件

//
//  ViewController.m
//  WhatPhone
//
//  Created by God Lin on 14/12/13.
//  Copyright (c) 2014年 arbboter. All rights reserved.
//

#import "ViewController.h"
#import "JHAPISDK.h"
#import "JHOpenidSupplier.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize _openID;
@synthesize _keyID;
@synthesize _textPhone;
@synthesize _textResult;
@synthesize _stringRecived;

#pragma 实现协议NSURLConnectionDataDelegate
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSString* strData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    //NSLog(@"%@", strData);
    self._stringRecived = [self._stringRecived stringByAppendingString:strData];

    [strData release];
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSLog(@"All data : \r\n%@", self._stringRecived);
    [self parserResult];
}

// 解析查询结果(Json格式)
/*
 {
    "resultcode": "200",
    "reason": "Return Successd!",
    "result":
             {
             "province": "山东",
             "city": "临沂",
             "areacode": "0539",
             "zip": "276000",
             "company": "中国联通",
             "card": "未知"
             },
    "error_code": 0
 }
 */
-(BOOL)parserResult
{
    BOOL bOK = NO;
    // 解析Json数据
    NSData* data = [self._stringRecived dataUsingEncoding:NSUTF8StringEncoding];
    NSError *error;
    NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error];;
    if (json == nil)
    {
        NSLog(@"json parse failed \r\n");
        bOK = NO;
    }
    else
    {
        NSDictionary *result = [json objectForKey:@"result"];

        NSMutableString* str = [[NSMutableString alloc] initWithString:self._textResult.text];

        [str appendFormat:@"========%@========\n", self._textPhone.text];
        // 成功
        if((NSNull*)result != [NSNull null] && [result count])
        {

            for (NSString* key in result)
            {
                [str appendFormat:@"%@:%@\n", key, [result objectForKey:key]];
                bOK = YES;
            }

        }
        // 失败
        else
        {
            [str appendFormat:@"error !!!\n"];
            for (NSString* key in json)
            {
                [str appendFormat:@"%@:%@\n", key, [json objectForKey:key]];
            }
        }
        [str appendFormat:@"========%@========\n\n", self._textPhone.text];

        self._textResult.text = str;
        [str release];
    }

    self._textPhone.text = @"";
    return bOK;
}

// 发出查询请求
-(IBAction)OnPhoneInfo:(id)sender
{
    [self._textPhone resignFirstResponder];
    self._stringRecived = @"";
    NSString* strUrl = [[NSString alloc] initWithFormat:@"http://apis.juhe.cn/mobile/get?phone=%@&key=%@", self._textPhone.text, self._keyID];
    NSURL* url = [[NSURL alloc] initWithString:strUrl];
    NSURLRequest* request = [[NSURLRequest alloc] initWithURL:url];
    NSURLConnection* connect = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    NSLog(@"Request url : \r\n %@", strUrl);
    [connect release];
    [request release];
    [url release];
    [strUrl release];
}

// 布局
-(void)resetLayout
{
    CGRect frame = self.view.frame;

    CGFloat _x = frame.origin.x;
    CGFloat _y = frame.origin.y;
    CGFloat _w = frame.size.width;
    CGFloat _h = frame.size.height;

    CGFloat yEdge = 10;
    CGFloat xEdge = 20;
    CGFloat x = _x + xEdge;
    CGFloat y = _y + 40;
    CGFloat w = _w - 2* xEdge;
    CGFloat h = 30;

    self._textPhone.frame = CGRectMake(x, y, w, h);
    self._textPhone.layer.cornerRadius = 10;
    self._textPhone.placeholder = @"phone number";
    self._textPhone.textAlignment = NSTextAlignmentCenter;
    self._textPhone.layer.borderWidth = 1;

    y = self._textPhone.frame.origin.y + self._textPhone.frame.size.height + yEdge;
    self._textResult.frame = CGRectMake(x, y, w, _y + _h - y - yEdge);
    self._textResult.editable = NO;
    self._textResult.layer.borderWidth = 1;
    self._textResult.layer.cornerRadius = 1;
    self._textResult.layer.borderColor = [[UIColor blackColor] CGColor];
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    self._keyID = @"你的AppKey";
    self._openID = @"你的OpenID";
    [[JHOpenidSupplier shareSupplier] registerJuheAPIByOpenId:self._openID];

    // new UI
    self._textPhone = [[UITextField alloc] init];
    [self.view addSubview:self._textPhone];
    [self._textPhone addTarget:self action:@selector(OnPhoneInfo:) forControlEvents:UIControlEventEditingDidEndOnExit];

    self._textResult = [[UITextView alloc] init];
    [self.view addSubview:self._textResult];

    // 切屏
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(doRotateAction:)
                                                 name:UIDeviceOrientationDidChangeNotification
                                               object:nil];

    [self resetLayout];
}

-(void) doRotateAction:(NSNotification *) notification
{
  [self resetLayout];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(void)dealloc
{
    [_textPhone release];
    [_textResult release];
    [_keyID release];
    [_openID release];
    [_stringRecived release];

    [super dealloc];
}
@end

工程代码

时间: 2025-01-07 03:45:49

手机归属地查询(云平台开发)的相关文章

谈谈WebService开发-应用篇(一)---手机归属地查询

接续上一篇WebService基础,这里介绍一些常用应用的开发,主要是让大家练练手.后续还会介绍以后工作中常用的开发方式,采用CXF.AXIS2等第三方框架进行开发. 相信大家经常能看到一些网站有有手机归属地查询.天气预报等信息,那么这些信息是哪里来的呢?实际上是有一些单位提供了免费的webservice服务,那么哪里可以查到这些免费服务呢,大家可以到  Web服务(免费) 查询到不少免费的webservice服务,也可以访问这篇博文常用免费Webservice服务列表,里面收集了不少常用的免费

手机归属地查询

手机归属地查询 效果图: 分析: 1.传递多个参数,用一个类就好 2.打开数据库 private SQLiteDatabase database; database=SQLiteDatabase.openOrCreateDatabase(file, null); file是数据库的路径 3.在逻辑中多加判断 比如是否获取到正确的手机号 比如我们操作的字符串是否为空 比如时候获取正确参数 4.通过文件流来实现释放APK中包中的数据库文件到手机本地 5.需要用的数据库放在assets目录中 buff

手机归属地查询api

手机归属地查询:可以查询到手机号码是哪的,属于移动,联通,还是电信等一系列情况.? 详情:?http://www.haoservice.com/docs/14 示例: { "error_code": "0", "reason": "Return Successd!", "result": { "province": "浙江", "city": &q

【安卓笔记】单机版手机归属地查询

既然是单机版,那么必然是查询本地数据库了,所以我们得准备一个离线数据库文件(下载地址:http://download.csdn.net/detail/rowandjj/7660979). 步骤: 1.创建一个工具类打开数据库: package cn.edu.chd.mobilesafe.db.dao; import android.database.sqlite.SQLiteDatabase; public class AddressDao { public static SQLiteDatab

PHP学习笔记:利用百度api实现手机归属地查询

从来没有用过api,都不知道怎么获得api的数据,跟着demo,然后修改,终于实现了手机号码查询的功能,代码和说明很全,大家试试. <?php /** * Created by jianqingwang * User: Administrator * Date: 2016/9/10 0010 * Time: 22:49 * 查询手机归属地 */ header("Content-type: text/html; charset=utf-8"); //传入查询的电话 //$phone

手机归属地查询演示代码

手机归属地演示代码示例 申请key值(http://www.haoservice.com/docs/14 )后输入要查手机号就可以用了,刚测试完,没问题. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.Security; using System.Security.Cryptography.X509Certificates; using

最简单的SAP云平台开发教程 - 如何开发UI5应用并运行在SAP云平台上

选择Services Catalog,根据关键字搜索到WebIDE服务,点击超链接打开WebIDE: 进入workspace,选择Git->Clone Repository: 从我的github clone:https://github.com/i042416/jerrylist clone完毕之后选择Run->Run index.html, 检查clone是否成功. 正常情况下应该看到这个UI5应用: 将该应用从git的workspace部署到SAP cloud platform上: App

【ADO.NET】5、手机归属地查询( winfrom )

using System.IO; 有一个数据库手机号码的txt文件,格式是 : 13500000000-13560000000-中国移动 查询结果: 湖南移动[邵阳]文件夹选择对话框 FolderBrowserDialog; string[] Directory.GetFiles(路径,类型,选项) //按照通配符搜索目录下的文件 Path.GetFileNameWithoutExtension(文件名) //得到文件名(不要扩展名)Path.Combine(路径1,路径2) //合并两个路径P

云平台开发常见的基础组件

1.分布式缓存服务 2.分布式k/v存储 3.分布式数据层框架 4.分布式调用跟踪系统 5.监控.日志.报警平台 6.分布式协同服务