精华内容
下载资源
问答
  • 网络API接口的使用

    万次阅读 2018-02-20 20:03:59
     网络API接口的使用一:先介绍一下什么是网络API接口 网络API接口就是各种大公司对外提供的一种各种信息和数据获取的接口像百度,腾讯,阿里巴巴等都提供这种接口,一些小公司和个人就可以通过这些接口获取...
    
    

                                                    网络API接口的使用

    一:先介绍一下什么是网络API接口
        网络API接口就是各种大公司对外提供的一种各种信息和数据获取的接口像百度,腾讯,阿里巴巴等都提供这种接口,一些小公司和个人就可以通过这些接口获取各种信息,如城市天气信息,生成二维码,地图信息,手机号码归属地,摄像头,卫星定位等。这些小公司就可以通过付费的方式使用这些接口,从而做出像天气预报查询,地图导航等一系列的APP。对于我们学习使用来讲这些接口大部分都有免费使用次数,足够我们学习使用

    二:我在这里介绍一下两种API接口
    1: k780.com     这个网站提供的接口可免费使用
     进入网页看到下图
     


     点击上面的数据接口可以看到许多接口

    2: 百度API接口
     可以先注册一个百度账号,百度API同样有免费使用次数,足够学习使用。

    使用方法:
     我就以天气预报解析作为示例
     我们从k780.com 获取天气预报接口如下
     http://api.k780.com:88/app=weather.future&weaid=1&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json
     注:
          1:接口中weaid=后面接的就是你想查询的城市名称,比如我所在的城市南昌
          2:由于我们在程序中获取这条接口命令传回来的信息是直接输入在Linux系统
          的命令行上,而&是特殊字符,所以要用单引号引起来
          3:用Linux命令curl来运行这条接口命令 
          4:在命令的结尾处需要将返回的信息存放在文件中,可在结尾将信息定向到一
          个文件中例如:> 123.txt
     综合上述几点注意,可得命令为:
     curl    http://api.k780.com:88/?app=weather.future'&'weaid=南昌'&&'appkey=10003'&'sign=b59bc3ef6191eb9f747dd4e83c99f2a4'&'
     format=json > 123.txt


     三:在C语言程序中如何使用:
     可用C语言system函数来执行命令。
     
    四:获取的天气信息如下:(格式为json格式)

    {"success":"1","result":[{"weaid":"237","days":"2018-02-05","week":"星期一",
    "cityno":"nanchang","citynm":"南昌","cityid":"101240101","temperature":"7℃/
    -1℃","humidity":"0%/0%","weather":"晴","weather_icon":"http://api.k780.com/
    upload/weather/d/0.gif","weather_icon1":"http://api.k780.com/upload/weather/
    n/0.gif","wind":"东北风","winp":"<3级","temp_high":"7","temp_low":"-1","humi
    _high":"0","humi_low":"0","weatid":"1","weatid1":"1","windid":"13","winpid":
    "395"},{"weaid":"237","days":"2018-02-06","week":"星期二","cityno":"nanchang
    ","citynm":"南昌","cityid":"101240101","temperature":"8℃/1℃","humidity":"0
    %/0%","weather":"晴转多云","weather_icon":"http://api.k780.com/upload/weathe
    r/d/0.gif","weather_icon1":"http://api.k780.com/upload/weather/n/1.gif","win
    d":"东北风","winp":"<3级","temp_high":"8","temp_low":"1","humi_high":"0","hu
    mi_low":"0","weatid":"1","weatid1":"2","windid":"13","winpid":"395"},{"weaid
    ":"237","days":"2018-02-07","week":"星期三","cityno":"nanchang","citynm":"南
    昌","cityid":"101240101","temperature":"10℃/2℃","humidity":"0%/0%","weathe
    r":"多云","weather_icon":"http://api.k780.com/upload/weather/d/1.gif","weath
    er_icon1":"http://api.k780.com/upload/weather/n/1.gif","wind":"东北风转北风"
    ,"winp":"<3级","temp_high":"10","temp_low":"2","humi_high":"0","humi_low":"0
    ","weatid":"2","weatid1":"2","windid":"25","winpid":"395"},{"weaid":"237","d
    ays":"2018-02-08","week":"星期四","cityno":"nanchang","citynm":"南昌","cityi
    d":"101240101","temperature":"11℃/4℃","humidity":"0%/0%","weather":"多云转
    阴","weather_icon":"http://api.k780.com/upload/weather/d/1.gif","weather_icon
    1":"http://api.k780.com/upload/weather/n/2.gif","wind":"东北风转北风","winp":
    "<3级","temp_high":"11","temp_low":"4","humi_high":"0","humi_low":"0","weatid
    ":"2","weatid1":"3","windid":"25","winpid":"395"},{"weaid":"237","days":"2018
    -02-09","week":"星期五","cityno":"nanchang","citynm":"南昌","cityid":"1012401
    01","temperature":"6℃/5℃","humidity":"0%/0%","weather":"小雨","weather_icon
    ":"http://api.k780.com/upload/weather/d/7.gif","weather_icon1":"http://api.k7
    80.com/upload/weather/n/7.gif","wind":"北风","winp":"<3级","temp_high":"6","t
    emp_low":"5","humi_high":"0","humi_low":"0","weatid":"8","weatid1":"8","windi
    d":"20","winpid":"395"},{"weaid":"237","days":"2018-02-10","week":"星期六","c
    ityno":"nanchang","citynm":"南昌","cityid":"101240101","temperature":"10℃/2℃
    ","humidity":"0%/0%","weather":"阴转多云","weather_icon":"http://api.k780.com/
    upload/weather/d/2.gif","weather_icon1":"http://api.k780.com/upload/weather/n/
    1.gif","wind":"北风","winp":"<3级","temp_high":"10","temp_low":"2","humi_high"
    :"0","humi_low":"0","weatid":"3","weatid1":"2","windid":"20","winpid":"395"},{
    "weaid":"237","days":"2018-02-11","week":"星期日","cityno":"nanchang","citynm"
    :"南昌","cityid":"101240101","temperature":"10℃/3℃","humidity":"0%/0%","weat
    her":"多云转阴","weather_icon":"http://api.k780.com/upload/weather/d/1.gif","w
    eather_icon1":"http://api.k780.com/upload/weather/n/2.gif","wind":"北风转无持续
    风向","winp":"<3级","temp_high":"10","temp_low":"3","humi_high":"0","humi_low":
    "0","weatid":"2","weatid1":"3","windid":"126","winpid":"395"}]}

    注:获取到上述信息后,我们所要做的工作就是用C语言代码将信息解析出来

    五:下面附上我自己的代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    #define WEEK_INFO_NUM   14
    static char *str1="curl http://api.k780.com:88/?app=weather.future'&'weaid=";
    static char *str2="'&&'appkey=10003'&'sign=b59bc3ef6191eb9f747dd4e83c99f2a4'&'format=json >wea.txt";
    //定义一个保存天气信息的结构体
    typedef struct _tag_Weather_Info
    {
     char date[11];//日期
     char week[10];//星期
     char addr_pinyin[20];//地址拼音
     char addr_name[20];//地址中文
     char city_id[20];//城市id
     char temperature[10];//温度
     char humidity[10];//湿度
     char weather[20];//气候
     char wind[20];//风向
     char winp[10];//风力
     char temp_high[5];//最高气温
     char temp_low[5];//最低气温
     char humi_high[5];//最高湿度
     char humi_low[5];//最低湿度
    }Wea_Info;
    Wea_Info weather_info[14];//用于存放7天的天气信息
    char *wea_flag[14]={"days","week","cityno","citynm","cityid","temperature",\
    "humidity","weather","wind","winp","temp_high","temp_low","humi_high","humi_low"};
    char buf[14][20];//定义一个存放信息的缓冲区

    /*
     函数名称:move_to_info
     函数功能:将字符串移动到要提取的信息位置
     参数:char *str--字符串
     返回值:char *--移动后的字符串
     */
    char *move_to_info(char *str)
    {
     while(1)
     {
      if(*str==':')
       break;
      str++;
     }
     str+=2;
     return str;
    }

    /*
     函数名称:Get_Info
     函数功能:获取天气的单个信息
     参数:char *src--存放天气信息的字符串 int flag--要提取的信息编号 
     返回值:char *--提取完一次的字符串
     */
    char *Get_Info(char *src,int flag)
    {
     int i=0;
     while(1)
     {
      if(*src=='"')
       break;
      else
      {
       buf[flag][i++]=*src;
       src++;
      }
     }
     buf[flag][i]='\0';
     return src;
    }

    /*
     函数名称:Get_Weather_Info
     函数功能:获取天气信息
     参数:char *src_info--存放天气信息的字符串
     返回值:char *--提取完一次的字符串
     */
    char *Get_Weather_Info(char *src_info,int num)
    {
     int i=0;
     char *temp=NULL;
     for(i=0;i<WEEK_INFO_NUM;i++)
     {
      temp=strstr(src_info,wea_flag[i]);
      temp=move_to_info(temp);
      temp=Get_Info(temp,i);
     }
     i=0;
     //将信息放入结构体
     strcpy(weather_info[num].date,buf[i++]);
     strcpy(weather_info[num].week,buf[i++]);
     strcpy(weather_info[num].addr_pinyin,buf[i++]);
     strcpy(weather_info[num].addr_name,buf[i++]);
     strcpy(weather_info[num].city_id,buf[i++]);
     strcpy(weather_info[num].temperature,buf[i++]);
     strcpy(weather_info[num].humidity,buf[i++]);
     strcpy(weather_info[num].weather,buf[i++]);
     strcpy(weather_info[num].wind,buf[i++]);
     strcpy(weather_info[num].winp,buf[i++]);
     strcpy(weather_info[num].temp_high,buf[i++]);
     strcpy(weather_info[num].temp_low,buf[i++]);
     strcpy(weather_info[num].humi_high,buf[i++]);
     strcpy(weather_info[num].humi_low,buf[i++]);
     return temp;
    }

    /*
     函数名称:Print_Weather_Info
     函数功能:打印天气信息
     参数:int num--天数编号
     返回值:void
     */
    void Print_Weather_Info(int num)
    {
     printf("日期:%s\n",weather_info[num].date);
     printf("星期:%s\n",weather_info[num].week);
     printf("地址拼音:%s\n",weather_info[num].addr_pinyin);
     printf("地址中文:%s\n",weather_info[num].addr_name);
     printf("城市ID:%s\n",weather_info[num].city_id);
     printf("温度:%s\n",weather_info[num].temperature);
     printf("湿度:%s\n",weather_info[num].humidity);
     printf("气候:%s\n",weather_info[num].weather);
     printf("风向:%s\n",weather_info[num].wind);
     printf("风力:%s\n",weather_info[num].winp);
     printf("最高气温:%s\n",weather_info[num].temp_high);
     printf("最低气温:%s\n",weather_info[num].temp_low);
     printf("最高湿度:%s\n",weather_info[num].humi_high);
     printf("最低湿度:%s\n",weather_info[num].humi_low);
    }
    int main(int argc,char **argv)
    {
     if(argc!=2)
     {
      printf("传参格式:./a.out <城市名>\n");
      exit(-1);
     }

     //拼接命令行字符串
     char *ptr=malloc(strlen(str1)+strlen(str2)+strlen(argv[1])+1);
     strcpy(ptr,str1);
     strcat(ptr,argv[1]);
     strcat(ptr,str2);

     //获取天气信息并将信息存放到123.txt
     system(ptr);
     FILE *fpr=fopen("wea.txt","rb");
     if(fpr==NULL)
     {
      printf("打开文件失败!\n");
      exit(-1);
     }
     //利用stat获取文件大小
     struct stat stat_buf;
     stat("wea.txt", &stat_buf);
     char *src=malloc(stat_buf.st_size);
     fread(src,1,stat_buf.st_size,fpr);
     fclose(fpr);
     int i=0;
     char *temp=src;
     for(i=0;i<7;i++)
     {
      memset(buf,0,sizeof(buf));
      temp=Get_Weather_Info(temp,i);
     }
     for(i=0;i<7;i++)
     {
      Print_Weather_Info(i);
      printf("\n");
     }
     return 0;
    }

    六:实际在解析过程中有两种方法可以解析,一种就是上面的自己找规律将信息解析出来,还有一种是通过cjson库来解析数据,这方面的知识可以到网上搜索一下,如果学会了cjson的使用,那解析数据就不用像上面一样那么麻烦。







    
    展开全文
  • 网络API接口的详细使用

    千次阅读 多人点赞 2020-05-19 16:43:45
    你还在为不会介入网络API而烦恼吗?本文手把手教你,从0开始调用网络API

    API简介

    API(Application Programming Interface,应用程序接口)是一些预先定义的函数,或指软件系统不同组成部分衔接的约定。 用来提供应用程序与开发人员基于某软件或硬件得以访问的一组例程,而又无需访问原码,或理解内部工作机制的细节。

    API接口的申请

    这里以百度翻译API示例:

    百度翻译开放平台:https://api.fanyi.baidu.com

    进入网址后,先去登录(注册)一个百度账号,登录以后,点击右上角名称下的 “开发者信息” ,这里有你的APP ID和你的密钥(KEY)
    在这里插入图片描述

    然后,有了APP ID和密钥(KEY)以后,你就可以去选择一种API服务进行使用了,这里我以一个简单的“通用翻译API”进行讲解[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pYAmqFI0-1589877307755)(E:\ASYU\Desktop\通用翻译.png)]

    API接口的要素:

    接入地址

    通用翻译API HTTPS地址:https://fanyi-api.baidu.com/api/trans/vip/translate

    我们接入API都是需要一个API地址才能进行使用的,这里我们选择下面HTTPS地址(HTTP和HTTPS的区别可以自行进行了解)进行使用

    输入参数

    可以看到,接入文档里有一个“入参”列表,这里我们要知道 “必填参数” 里面有 Y/N ,意思是 Y 代表这个参数是每次请求数据必须传入的,否则请求会报错,而 N 则是不必须(也就是可选的),这里也可以看到,这里的 tts 和 dict 是开通了词典、TTS者需填写的
    在这里插入图片描述

    请求方式

    这里可以从入参下面的文字看到,“请求方式可使用GET或POST方式”,这也是API请求最常用的两种方式了

    输出参数

    输出参数也就是我们发送了数据请求,然后服务器给我们返回来的数据,现在大多数API接口也都是返回Json格式的数据,由于每次返回的参数又往往包含了很多其他我们不需要的参数,所以这时我们就需要通过解析Json格式内容来获取我们真正需要的信息。

    实战应用

    正确地获取入参

    q = 这是我们需要翻译的文本

    from = auto(这里我选择自动识别)

    to = zh(中文)

    appid = 个人开发者信息里有

    salt = 100(在程序里随机数获取)

    sign签名(小白难点):

    签名的获取,是相对所有入参里面最麻烦的,公式 = MD5(appid + q + salt + key),也就是先要把几个入参和密钥先连接起来(字符串形式),然后再对其进行MD5加密

    其中MD5加密的方法可以看这篇文章:MD5加密

    发送请求

    这里的话我用的是OKHttp,依赖:

    implementation 'com.squareup.okhttp3:okhttp:3.12.1'
    

    OkHttp的用法:OkHttp的详细使用方法

    然后写了一个简单的请求工具类,这里是写了两个方法

    • 中英互译:通过传入的内容,然后通过其字符串长度和字节数的对比来判断输入的是中文还是英文
    • 多语言翻译:通过选择源语言和译文语言来进行翻译,这里输入是输入语言名,比如中文、英文、粤语等,然后通过一个HashMap来获取对应的语言代码
    解析出参

    请求数据获取到的内容是这样的Json数据:

    {
        "from": "en",
        "to": "zh",
        "trans_result": [{
            "dst": "爱",
            "src": "love"
        }]
    }
    

    这里我输入的是 love ,所以我们需要的数据是:爱 这个字,也就是 trans_result 下的 dst 内容,其他的内容对于我们来说都不是那么重要,拿到翻译结果就完成任务了

    Tip:这里我用的是fastjson,依赖:implementation ‘com.alibaba:fastjson:1.1.71.android’

    JSONObject jsonObject = JSON.parseObject(response.body().string());
    JSONArray array = jsonObject.getJSONArray("trans_result");
    for (int i = 0; i < array.size(); i++) {
         JSONObject object = (JSONObject) array.get(i);
         result = object.getString("dst");
    }
    
    完整Java代码:
    public class BaiDuUtils {
        // 请求地址
        private static final String URL = "https://fanyi-api.baidu.com/api/trans/vip/translate";
        // 应用id(开发者信息里)
        private static final String APP_ID = "";
        // 密钥(开发者信息里)
        private static final String KEY = "";
        // 随机数对象
        private static Random sRandom = new Random();
    
        /**
         * 中英互译(自动检测)
         *
         * @param q 待翻译文本
         * */
        public static String translate(String q) {
            // 源语言
            String from = "";
            // 译文语言
            String to = "";
            // 字符长度和字符的字节长度相等,则说明没有中文
            if (q.length() == q.getBytes().length) {
                from = "en";
                to = "zh";
            } else {
                from = "zh";
                to = "en";
            }
            // 翻译结果
            String result = "";
            // 随机数
            String salt = String.valueOf(sRandom.nextInt(100));
            // 合成签名
            String strSign = APP_ID + q + salt + KEY;
            // 将sign串转化成MD5
            String sign = MD5Utils.MD5(strSign);
            // 实例化OkHttpClient对象
            OkHttpClient client = new OkHttpClient();
            RequestBody requestBody = new FormBody.Builder()
                    .add("q", q)
                    .add("from", from)
                    .add("to", to)
                    .add("appid", APP_ID)
                    .add("salt", salt)
                    .add("sign", sign)
                    .build();
            Request request = new Request.Builder()
                    .url(URL)
                    .post(requestBody)
                    .build();
            Response response = null;
            try {
                response = client.newCall(request).execute();
                JSONObject jsonObject = JSON.parseObject(response.body().string());
                JSONArray array = jsonObject.getJSONArray("trans_result");
                for (int i = 0; i < array.size(); i++) {
                    JSONObject object = (JSONObject) array.get(i);
                    result = object.getString("dst");
                    Log.d("BaiDuUtils", "translate: 成功!结果:" + result);
                    return result;
                }
            } catch (IOException e) {
                Log.d("BaiDuUtils", "translate: 失败!");
                return "请求错误";
            }
            return result;
        }
    
        /**
         * 多语言翻译
         *
         * @param q 待翻译文本
         * @param from 源语言类型
         * @param to 目标语言类型
         * */
        public static String translate(String q, String from, String to) {
            // 从Spinner获取过来的是中文,所以需要转化成代码
            from = getLanguage(from);
            to = getLanguage(to);
            // 翻译结果
            String result = "";
            // 随机数
            String salt = String.valueOf(sRandom.nextInt(100));
            // 合成签名
            String strSign = APP_ID + q + salt + KEY;
            // 将sign串转化成MD5
            String sign = MD5Utils.MD5(strSign);
            // 实例化OkHttpClient对象
            OkHttpClient client = new OkHttpClient();
            RequestBody requestBody = new FormBody.Builder()
                    .add("q", q)
                    .add("from", from)
                    .add("to", to)
                    .add("appid", APP_ID)
                    .add("salt", salt)
                    .add("sign", sign)
                    .build();
            Request request = new Request.Builder()
                    .url(URL)
                    .post(requestBody)
                    .build();
            Response response = null;
            try {
                response = client.newCall(request).execute();
                JSONObject jsonObject = JSON.parseObject(response.body().string());
                JSONArray array = jsonObject.getJSONArray("trans_result");
                for (int i = 0; i < array.size(); i++) {
                    JSONObject object = (JSONObject) array.get(i);
                    result = object.getString("dst");
                    Log.d("BaiDuUtils", "translate: 成功!结果:" + result);
                    return result;
                }
            } catch (IOException e) {
                Log.d("BaiDuUtils", "translate: 失败!");
                return "请求错误";
            }
            return result;
        }
    
        // 通过传入中文,返回对应的语言代码
        private static String getLanguage(String key) {
            Map<String, String> map = new HashMap<>();
            map.put("自动检测", "auto");
            map.put("中文", "zh");
            map.put("英文", "en");
            map.put("粤语", "yue");
            map.put("文言文", "wyw");
            map.put("日语", "jp");
            map.put("韩语", "kor");
            map.put("法语", "fra");
            map.put("西班牙语", "spa");
            map.put("泰语", "th");
            map.put("阿拉伯语", "ara");
            map.put("俄语", "ru");
            map.put("葡萄牙语", "pt");
            map.put("德语", "de");
            map.put("意大利语", "it");
            map.put("希腊语", "el");
            map.put("荷兰语", "nl");
            map.put("波兰语", "pl");
            map.put("保加利亚语", "bul");
            map.put("爱沙尼亚语", "est");
            map.put("丹麦语", "dan");
            map.put("芬兰语", "fin");
            map.put("捷克语", "cs");
            map.put("罗马尼亚语", "rom");
            map.put("斯洛文尼亚语", "slo");
            map.put("瑞典语", "swe");
            map.put("匈牙利语", "hu");
            map.put("繁体中文", "cht");
            map.put("越南语", "vie");
            return map.get(key);
        }
    

    结语:其实目前大部分的API接口使用方法都差不多,一般来说只要会了一个,其他的API接口只需要简单看其官网提供的开发者文档即可!
    如果你觉得文章写得还不是太烂,点个赞再走吧!
    在这里插入图片描述

    展开全文
  • C# 网络API接口使用

    千次阅读 2017-04-10 14:41:16
    网络API使用

    1. 用HttpClient访问网络API获取网页内容:

    Uri uri = new Uri(“http://api.k780.com:88/?app=phone.get&phone=13800138000&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=xml”);//Uri页面为Json字符串或XML字符串
    HttpClient client = new HttpClient();
    string result = await client.GetStringAsync(uri);//Json或XML字符串

    或者

    Uri uri = new Uri(“”);//Uri页面为Json字符串或XML字符串
    HttpClient client = new HttpClient();
    HttpResponseMessage response = await httpClient.GetAsync(uri);
    response.EnsureSuccessStatusCode();//如果出现错误,则抛出异常
    string result = await response.Content.ReadAsStringAsync();////Json或XML字符串

    附异常处理:

    if (response.StatusCode == HttpStatusCode.OK)
    {
       // 
    }
    或:
    if (response.IsSuccessStatusCode)
    {
       // ...
    }
    或:
    try
    {
        HttpResponseMessage response = postTask.Result;
        response.EnsureSuccessStatusCode();
    }
    catch (HttpRequestException e)
    {
        // ...
    }

    2. Json解析

    (1)使用JsonReader读Json字符串:

    string jsonText =@"{""input"" : ""value"",""output"" : ""result""}";  
    JsonReader reader = new JsonTextReader(new StringReader(jsonText));  
    while (reader.Read())  
    {  
       Console.WriteLine(reader.TokenType + "\t\t" + reader.ValueType+ "\t\t" + reader.Value); 
        //一共循环6次,输出依次为“start”“input”“value”“output”“result”“end”.
    }  

    (2)使用JsonWriter写字符串:

    StringWriter sw = new StringWriter();  
    JsonWriter writer = new JsonTextWriter(sw);  
    
    writer.WriteStartObject();  
    writer.WritePropertyName("input");  
    writer.WriteValue("value");  
    writer.WritePropertyName("output");  
    writer.WriteValue("result");  
    writer.WriteEndObject();  
    writer.Flush();  
    
    string jsonText =sw.GetStringBuilder().ToString();  
    Console.WriteLine(jsonText);  

    (3)使用JObject读写字符串:

    JObject jo = JObject.Parse(jsonText);  
    string[] values =jo.Properties().Select(item => item.Value.ToString()).ToArray();
    //得到的是一个字符串数组存储每个value值

    (4)读取数组

    string jsonArrayText1 ="[{'a':'a1','b':'b1'},{'a':'a2','b':'b2'}]";  
    JArray ja =(JArray)JsonConvert.DeserializeObject(jsonArrayText1);  
    string ja1a =ja[1]["a"].ToString();  //值为a2
    //或者  
    JObject o = (JObject)ja[1];  
    string oa = o["a"].ToString();  

    (5)嵌套格式

    string jsonText ="{\"beijing\":{\"zone\":\"海淀\",\"zone_en\":\"haidian\"}}";  
    JObject jo =(JObject)JsonConvert.DeserializeObject(jsonText);  
    string zone =jo["beijing"]["zone"].ToString();  
    string zone_en =jo["beijing"]["zone_en"].ToString();  

    3.XML解析:

    var xml = new XmlDocument();
    xml.LoadXml(result);

    得到XML文件之后就可以根据XML对节点的操作方式去获取自己想要的元素,如:

    company.Text = xml.GetElementsByTagName("operators")[0].InnerText;
    area.Text = xml.GetElementsByTagName("style_simcall")[0].InnerText;

    4. VS使用:

    要在项目的NUGet中安装:Newtonsoft.Json。才可解析Json.

    5. 博客资源来源于以下博客,更多详情请参考:

    http://www.cnblogs.com/wywnet/p/httpclient.html
    http://blog.csdn.net/coolszy/article/details/8606803

    展开全文
  • 该示例 很好的示范了如何从网络API中加载数据并显示到自己的应用中
  • java原生方式调用API1) 我们会使用fastjson解析json数据,会导入alibaba的fastjson依赖包: <groupId>com.alibaba</groupId> <artifactId>fastjson <version>1.2.40 </dependency>2) Demo源码:

    java原生方式调用API

    1) 我们会使用fastjson解析json数据,会导入alibaba的fastjson依赖包:

    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.40</version>
    </dependency>

    2) Demo源码:
    以天行数据提供的一个API为例, 首先定义数据模型相关类:

    NewsData类:

    import java.util.List;
    
    public class NewsData {
        private int error_code;
        private String reason;
        private List<News> result;
    
        public int getError_code() {
            return error_code;
        }
    
        public void setError_code(int error_code) {
            this.error_code = error_code;
        }
    
        public String getReason() {
            return reason;
        }
    
        public void setReason(String reason) {
            this.reason = reason;
        }
    
        public List<News> getResult() {
            return result;
        }
    
        public void setResult(List<News> result) {
            this.result = result;
        }
    }

    News类:

    public class News {
    
        private String content;
        private String hashId;
        private long unixtime;
        private String updatetime;
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    
        public String getHashId() {
            return hashId;
        }
    
        public void setHashId(String hashId) {
            this.hashId = hashId;
        }
    
        public long getUnixtime() {
            return unixtime;
        }
    
        public void setUnixtime(long unixtime) {
            this.unixtime = unixtime;
        }
    
        public String getUpdatetime() {
            return updatetime;
        }
    
        public void setUpdatetime(String updatetime) {
            this.updatetime = updatetime;
        }
    }

    测试类:

           //网络接口比如:http://api.tianapi.com/meinv/?key=网络提供的key&num=30&page=2
            URL url = new URL("网络上面提供的API接口");
    import com.alibaba.fastjson.JSON;
    
    import java.io.InputStream;
    import java.net.URL;
    
    public class App {
        public static void main(String[] args) throws  Exception {
            //网络接口比如:http://api.avatardata.cn/Joke/QueryJokeByTime?key=网站提供的key&page=2&rows=10&sort=asc&time=1418775237
            URL url = new URL("网络上面提供的API接口");
            try (InputStream input = url.openStream()) {
                StringBuilder jsonStr = new StringBuilder();
                byte[] buffer = new byte[512];
                int totalBytes;
                while ((totalBytes = input.read(buffer)) != -1) {
                    jsonStr.append(new String(buffer, 0, totalBytes, "utf-8"));
                }
                //fastjson
                NewsData newsData = JSON.parseObject(jsonStr.toString(), NewsData.class);
                for (News model : newsData.getResult()) {
                    System.out.println("----------------");
                    System.out.println(model.getContent());
                }
            }
        }
    }

    运行结果:

    HttpClient方式调用API

    添加解析json数据依赖项,数据类还是DataNews和News类

    测试类:

    import com.fasterxml.jackson.databind.ObjectMapper;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    
    public class App2 {
        public static void main(String[] args) throws  Exception {
            HttpClient httpClient = HttpClients.createDefault();
                    //网络接口比如:http://api.avatardata.cn/Joke/QueryJokeByTime?key=网站提供的key&page=2&rows=10&sort=asc&time=1418775237
            HttpGet getReq = new HttpGet("网络上面提供的API接口");
            HttpResponse resp =httpClient.execute(getReq);
            String jsonStr = EntityUtils.toString(resp.getEntity(),"utf-8");
            System.out.println(jsonStr);
            //jackson
            ObjectMapper mapper = new ObjectMapper();
            NewsData newsData = mapper.readValue(jsonStr,NewsData.class);
            for(News news:newsData.getResult()){
                System.out.println(news.getContent());
                System.out.println("---------------------------");
            }
        }
    }

    RestTemplate方式调用API

    添加Spring-web和fastjson依赖项

     <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.3.11.RELEASE</version>
    </dependency>

    数据类还是DataNews和News类

    测试类:

    import org.springframework.web.client.RestTemplate;
    
    public class App3 {
    
        public static void main(String[] args) throws Exception {
            // Spring - RestTemplate
            RestTemplate template = new RestTemplate();
            NewsData newsData =
                    template.getForObject("http://api.avatardata.cn/Joke/QueryJokeByTime?key=0446a80169034e7fa28e9c58953c9c1a&page=2&rows=10&sort=asc&time=1418745237",
                            NewsData.class);
    
            for(News news:newsData.getResult()){
                System.out.println(news.getContent());
            }
        }
    }

    执行结果:
    代码执行结果

    如有问题,请及时指正,谢谢

    展开全文
  • 网络音乐api接口,歌词api接口,免费 具体请看项目地址 项目地址: http://showdoc.dagoogle.cn/index.php/4 网络音乐api开放接口 所有这些都是为了学习,交流,共同进步。 音乐api接口所有资源均...
  • 高可用api接口网络部署方案

    千次阅读 2016-10-30 18:15:37
    高可用api接口网络部署方案
  • 介绍基于华为无线网络业务开放的QOS API接口参考。
  • 网络新闻api接口,免费开放

    万次阅读 2016-01-10 19:14:55
    网络新闻api接口,具体内容请参考说明文档 提供板块 * 1 => 头条 * 2 => 娱乐 * 3 => 军事 * 4 => 汽车 * 5 => 财经 * 6 => 笑话 * 7 =...
  • 真·天气API(七天),音乐API,图片API
  • 小程序请求API接口网络请求封装

    千次阅读 2018-06-24 18:24:19
    前几日关注的用户问我有没有封装好的小程序网络请求接口,那么小程序请求API接口网络请求封装,我们应该怎么编写呢? 今天我们说下小程序请求API接口的实现,然后就分享这样的小案例。希望对大家有所帮助。 不多...
  • 用Spring Boot开发API接口

    万次阅读 多人点赞 2018-02-15 03:02:03
    前后端分离、APP交互等,大多都是通过API接口实现的。既然要进行数据交互,那么这接口就得有讲究了:既要实用,又要优雅好看! 那么,如何写一套(个)漂亮的API接口呢? 一、返回格式 API接口要求返回...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 422,994
精华内容 169,197
关键字:

网络api接口