怎样用Google APIs和Google的应用系统进行集成(3)----调用Google 发现(Discovery)API的RESTful服务
说了这么多,那么首先同意我以Google Discovery RESTful服务为例,给大家演示怎样用最普通的Java代码调用Google Discovery RESTful服务。
引言:
在“怎样用Google APIs和Google的应用系统进行集成(2)”的以下,我列出了当前Google APIs支持的全部的Google APIs。事实上这个表格是我用代码调用Google Discovery RESTFul服务自己主动生成的。详细的步骤和代码例如以下:
(1) 訪问Google Discovery RESTFul的服务:https://www.googleapis.com/discovery/v1/apis 能够获得RESTFul服务返回的结果:通过訪问 JSONtoStringConverter-->readJSONSAsString()
package com.henry.json.gson.googlediscovery; import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL; public class JSONtoStringConverter {
private String url_path="https://www.googleapis.com/discovery/v1/apis";
public String readJSONSAsString(){
InputStream in=this.getJSONSchemaInputStream();
return readJSONSAsString(in);
}
private InputStream getJSONSchemaInputStream() {
InputStream ipStream = null;
if (url_path == null) {
throw new IllegalArgumentException("The URL Path can't be empty!!!");
}
try {
URL url = new URL(url_path);
HttpURLConnection httpConnection = (HttpURLConnection) url
.openConnection();
httpConnection.setRequestMethod("GET");
httpConnection.setReadTimeout(30000);
httpConnection.setDoInput(true);
ipStream = httpConnection.getInputStream();
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return ipStream;
}
private String readJSONSAsString(InputStream in){
String jsonString="";
ByteArrayOutputStream baosArrayOutputStream=new ByteArrayOutputStream();
byte[] bytes=new byte[1024];
int len=0;
try {
while((len=in.read(bytes))!=-1){
baosArrayOutputStream.write(bytes, 0, len);
}
jsonString=new String(baosArrayOutputStream.toByteArray(),"utf-8");
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(jsonString);
return jsonString;
}
public static void main(String[] args) {
JSONtoStringConverter jSONtoStringConverter=new JSONtoStringConverter();
jSONtoStringConverter.readJSONSAsString(); } }
(2) 解析返回的JSON数据,可是解析曾经,我们须要建立对应的JavaBean,这样就能把JSON的对象和Java的对象映射起来。
2.1 GoogleDiscoveryBean
package com.henry.json.gson.googlediscovery; import java.util.List; public class GoogleDiscoveryBean {
private String kind;
private String discoveryVersion;
private List<Items> items; public String getKind() {
return kind;
} public void setKind(String kind) {
this.kind = kind;
} public String getDiscoveryVersion() {
return discoveryVersion;
} public void setDiscoveryVersion(String discoveryVersion) {
this.discoveryVersion = discoveryVersion;
} public List<Items> getItems() {
return items;
} public void setItems(List<Items> items) {
this.items = items;
}
@Override
public String toString(){
return kind+"--"+discoveryVersion+"--size:"+items.size();
}
}
2.2 Items
package com.henry.json.gson.googlediscovery;
/*
"kind": "discovery#directoryItem",
"id": "adexchangebuyer:v1",
"name": "adexchangebuyer",
"version": "v1",
"title": "Ad Exchange Buyer API",
"description": "Lets you manage your Ad Exchange Buyer account.",
"discoveryRestUrl": "https://www.googleapis.com/discovery/v1/apis/adexchangebuyer/v1/rest",
"discoveryLink": "./apis/adexchangebuyer/v1/rest",
"icons": {
"x16": "http://www.google.com/images/icons/product/doubleclick-16.gif",
"x32": "http://www.google.com/images/icons/product/doubleclick-32.gif"
},
"documentationLink": "https://developers.google.com/ad-exchange/buyer-rest",
"preferred": false
*/
public class Items {
private String kind;
private String id;
private String name;
private String version;
private String title;
private String description;
private String discoveryRestUrl;
private String discoveryLink;
private String documentationLink;
private String preferred;
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getVersion() {
return version;
}
public void setVersion(String version) {
this.version = version;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getDiscoveryRestUrl() {
return discoveryRestUrl;
}
public void setDiscoveryRestUrl(String discoveryRestUrl) {
this.discoveryRestUrl = discoveryRestUrl;
}
public String getDiscoveryLink() {
return discoveryLink;
}
public void setDiscoveryLink(String discoveryLink) {
this.discoveryLink = discoveryLink;
}
public String getDocumentationLink() {
return documentationLink;
}
public void setDocumentationLink(String documentationLink) {
this.documentationLink = documentationLink;
}
public String getPreferred() {
return preferred;
}
public void setPreferred(String preferred) {
this.preferred = preferred;
} }
(3) 下载JSON java的库: http://code.google.com/p/google-gson/
GSon是谷歌官方提供的解析JSON数据:
1.谷歌GSON这个Java类库能够把Java对象转换成JSON,也能够把JSON字符串转换成一个相等的Java对象。
2.Gson支持随意复杂Java对象包含没有源码的对象。
(4) 创建一个GoogleGSonTools: 这个类会把Google Discovery RESTful服务返回的JSON的字符串,自己主动转换成GoogleDiscoveryBean对象,这种方法不到10行,就这么简单。
package com.henry.json.gson.googlediscovery; import com.google.gson.Gson; public class GoogleGSonTools {
public static <T> T getGoogleDiscoveryBean(String josnString, Class<T> clazz) {
T t = null;
try {
Gson gson = new Gson();
t = gson.fromJson(josnString, clazz);
} catch (Exception e) {
}
return t;
}
}
(5)结合上面的(1)~(4),我们把其返回的值,格式化成一个HTML的表格。
package com.henry.json.gson.googlediscovery; import java.util.List; public class GoogleAPIsListViewService { public String listAllGoogleAPIs(){
StringBuilder sbBuilder=new StringBuilder("<table border=\"1\" style=\"word-break:break-all; word-wrap:break-word;\"> <tr><td>序号</td><td>API 标题</td><td>名字</td><td>版本号</td><td>RestFul请求的URL</td><td>RestFul请求的URL</td></tr>");
JSONtoStringConverter jSONtoStringConverter=new JSONtoStringConverter();
String json=jSONtoStringConverter.readJSONSAsString();
GoogleDiscoveryBean googleDiscoveryBean=GoogleGSonTools.getGoogleDiscoveryBean(json, GoogleDiscoveryBean.class);
List<Items> listItems=googleDiscoveryBean.getItems();
if(listItems!=null&&listItems.size()>0){
for(int i=0;i<listItems.size();i++){
Items items=listItems.get(i);
sbBuilder.append("<tr>");
sbBuilder.append("<td>").append(" "+(i+1)+" ").append("</td>");
sbBuilder.append("<td>").append(items.getTitle()).append("</td>");
sbBuilder.append("<td>").append(items.getName()).append("</td>");
sbBuilder.append("<td>").append(items.getVersion()).append("</td>");
sbBuilder.append("<td>").append(items.getDiscoveryRestUrl()).append("</td>");
sbBuilder.append("<td>").append(items.getDocumentationLink()).append("</td>");
sbBuilder.append("</tr>");
}
}
sbBuilder.append("</table>");
System.out.println(sbBuilder.toString());
return sbBuilder.toString();
}
public static void main(String[] args) {
GoogleAPIsListViewService gavs=new GoogleAPIsListViewService();
gavs.listAllGoogleAPIs();
} }
输出的结果就是: “怎样用Google APIs和Google的应用系统进行集成(2)”一文中看到的表格的html源码。
怎样用Google APIs和Google的应用系统进行集成(3)----调用Google 发现(Discovery)API的RESTful服务的更多相关文章
- 谷歌正式发布Google APIs Client Library for .NET
好消息,特大好消息! 英文原文:Google API library for .NET paves the way for Google services on Windows phone 本月 17 ...
- 怎样用Google APIs和Google的应用系统进行集成(4)----获得Access Token以通过一些Google APIs的OAuth2认证
在上篇文章中: "怎样用Google APIs和Google的应用系统进行集成(3)----调用发现Google APIs的RESTful的服务"一文中,我们直接用jdk的java ...
- Android SDK Manager Google Apis 下载
本意是想利用google的gcm来实装android推送功能的,很遗憾, google貌似已经停止提供啥服务给国内了,或者说国内想继续使用google 服务暂时变得几乎不可能了.找了个代理来进行goo ...
- 怎样用Google APIs和Google的应用系统进行集成(1)----Google APIs简介
Google的应用系统提供了非常多的应用,比方 Google广告.Google 任务,Google 日历.Google blogger,Google Plus,Google 地图等等非常的多的应用,请 ...
- 如何使用Google APIs和Google应用系统集成(7)----在里面JSON兑换XML数据处理,JSON数据包括违规XML数据规范:XML节点名称不支持号码Java解
笔者电话Google Calendar APIs的GetColors方法,其中(有关详细信息Google Calendar API已经Google API看到我的博文介绍的其余部分,目前,我们只取Go ...
- 怎样用Google APIs和Google的应用系统进行集成(2)----Google APIs的全部的RESTFul服务一览
上篇文章,我提到了,Google APIs暴露了86种不同种类和版本号的API.我们能够通过在浏览器里面输入https://www.googleapis.com/discovery/v1/apis这个 ...
- gRPC版本的 Google APIs
gRPC将是未来google所有客户端的库标准(DevoxxFR), 这句话的出处: https://twitter.com/chanezon/status/585724143003402240 ...
- Google Inc.:Google APIs:23' 解决方案
在导入一个项目是,出现 Unable to resolve target 'Google Inc.:Google APIs:6'第一种解决方法: compileSdkVersion 23 改成 com ...
- 怎样用Google APIs和Google的应用系统进行集成(8)----怎样把Google Blogger(博客)的JSON Schema转换成XML的Schema(XSD)?
在Google RESTFul API中,Google Blogger API(Google博客API)应该和我们的生活离得近期:由于差点儿非常多人每天都在看博客,都在写博客,都听说过博客.在前面的G ...
随机推荐
- C#与.Net Framework的各种版本和联系
C#是微软公司发布的一种面向对象的.运行于.NET Framework之上的高级程序设计语言.并定于在微软职业开发者论坛(PDC)上登台亮相.C#是微软公司研究员Anders Hejlsberg的最新 ...
- iOS开发常用的第三方框架
1. AFNetworking 在众多iOS开源项目中,AFNetworking可以称得上是最受开发者欢迎的库项目.AFNetworking是一个轻量级的iOS.Mac OS X网络通信类库,现在是G ...
- PHP MySQL 插入多条数据
PHP MySQL 插入多条数据 使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句. 以下实例向 "MyG ...
- Hive学习之四 《Hive分区表场景案例应用案例,企业日志加载》 详解
文件的加载,只需要三步就够了,废话不多说,来直接的吧. 一.建表 话不多说,直接开始. 建表,对于日志文件来说,最后有分区,在此案例中,对年月日和小时进行了分区. 建表tracktest_log,分隔 ...
- hdu1230火星A+B (大数题)
Problem Description 读入两个不超过25位的火星正整数A和B,计算A+B.需要注意的是:在火星上,整数不是单一进制的,第n位的进制就是第n个素数.例如:地球上的10进制数2,在火星上 ...
- Mysql 索引的基础(下)
如果需要存储大量的URL并需要根据URL进行搜索查找.如果使用B-Tree 来存储URL,存储的内容就会很大,因为URL本身都很长.正常情况下会有如下查询: SELECT id FROM url WH ...
- JQUERY1.9学习笔记 之基本过滤器(十二) 根元素选择器
根元素选择器 描述:选择文档的根节点元素.jQuery( ":root" ) 例:显示文档根节点标签名. <!DOCTYPE html><html lang=&q ...
- Boost使用笔记(Smart_ptr)
我是Word写的,复制过来实在懒得在排版了,有兴趣的朋友可以去我的百度文库看,谢谢 http://wenku.baidu.com/view/34e485e2f61fb7360b4c653e.html ...
- The formatter threw an exception while trying to deserialize the message in WCF
有一个WCF应用, 主要功能是存储doc, txt等类型文件到database,当文件的大小在16kb之内,调用WCF service能正常工作:但如果文件大小超出16KB之外, 它将抛出这样一个错误 ...
- SVN客户端忽略无关文件-备
修改前请先备份文件 ~/.subversion/config. 1,打开Terminal,输入命令: $ open ~/.subversion/config 2,在打开的文件中寻找:`global ...