- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 Google Shortener API .我想使用 google api java 客户端库来发布请求并解析 JSON 响应。
接下来,我贴出我试过的代码:
import java.io.IOException;
import net.sf.json.JSONObject;
import com.google.api.client.googleapis.GoogleHeaders;
import com.google.api.client.googleapis.GoogleTransport;
import com.google.api.client.googleapis.json.JsonCParser;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonHttpContent;
import com.google.api.client.util.GenericData;
public class GoogleShortener {
public static final String GOOGL_URL = "https://www.googleapis.com/urlshortener/v1/url";
public static void main(String[] args) {
// setup up the HTTP transport
HttpTransport transport = GoogleTransport.create();
// add default headers
GoogleHeaders defaultHeaders = new GoogleHeaders();
transport.defaultHeaders = defaultHeaders;
transport.defaultHeaders.put("Content-Type", "application/json");
transport.addParser(new JsonCParser());
// build the HTTP GET request and URL
GenericData data = new GenericData();
data.put("longUrl", "http://www.google.com/");
JsonHttpContent content = new JsonHttpContent();
content.data = data;
HttpRequest request = transport.buildPostRequest();
request.content = content;
request.setUrl(GOOGL_URL);
HttpResponse response;
try {
JSONObject json = request.execute().parseAs(JSONObject.class);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
当我执行上面的代码时,我得到下一个输出:
Exception in thread "main" java.lang.IllegalArgumentException: data key not found
at com.google.api.client.googleapis.json.JsonCParser.parserForResponse(JsonCParser.java:77)
at com.google.api.client.googleapis.json.JsonCParser.parse(JsonCParser.java:47)
at com.google.api.client.http.HttpResponse.parseAs(HttpResponse.java:261)
at GoogleShortener.main(GoogleShortener.java:43)
知道如何正确设置 JsonCParser 吗?
一开始我没有正确设置请求内容。正如@dwb 所指出的,请求内容应该设置为:
GenericData data = new GenericData();
data.put("longUrl", "http://www.google.com/");
JsonHttpContent content = new JsonHttpContent();
content.data = data;
request.content = content;
如果你没有设置正确的内容,你会得到下一个错误
com.google.api.client.http.HttpResponseException: 411 Length Required at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:209) at GoogleShortener.main(GoogleShortener.java:32)
最佳答案
您需要像这样将 JSON 内容添加到请求正文中:
GenericData data = new GenericData();
data.put("longUrl", "http://www.google.com/");
JsonHttpContent content = new JsonHttpContent();
content.data = data;
request.content = content;
对于响应,请尝试使用 JsonHttpParser 而不是 JsonCParser。您需要创建一个 GenericJson 的子类,其中包含的字段带有您要检索的每个 JSON 属性的 @Key 注释。您可以使用 response.parseAsString() 查看所有可用的属性。
这是一个完整的工作示例:
import com.google.api.client.googleapis.GoogleHeaders;
import com.google.api.client.googleapis.GoogleTransport;
import com.google.api.client.http.HttpRequest;
import com.google.api.client.http.HttpResponse;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.GenericJson;
import com.google.api.client.json.JsonHttpContent;
import com.google.api.client.json.JsonHttpParser;
import com.google.api.client.util.GenericData;
import com.google.api.client.util.Key;
public class Shortener {
public static final String GOOGL_URL = "https://www.googleapis.com/urlshortener/v1/url";
/**
* @param args
*/
public static void main(String[] args) throws Exception {
// setup up the HTTP transport
HttpTransport transport = GoogleTransport.create();
// add default headers
GoogleHeaders defaultHeaders = new GoogleHeaders();
transport.defaultHeaders = defaultHeaders;
transport.defaultHeaders.put("Content-Type", "application/json");
transport.addParser(new JsonHttpParser());
// build the HTTP GET request and URL
HttpRequest request = transport.buildPostRequest();
request.setUrl(GOOGL_URL);
GenericData data = new GenericData();
data.put("longUrl", "http://www.google.com/");
JsonHttpContent content = new JsonHttpContent();
content.data = data;
request.content = content;
HttpResponse response = request.execute();
Result result = response.parseAs(Result.class);
System.out.println(result.shortUrl);
}
public static class Result extends GenericJson {
@Key("id")
public String shortUrl;
}
}
关于java - 如何使用 Google API Java 客户端向 Google Shortener API 发送请求并解析 JSON 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4724270/
我正在寻找优雅的方法来“缩短”对象的(用户提供的)名称。更准确地说: 我的用户可以输入自由文本(用作某些对象的“名称”),他们最多可以使用 64 个字符(包括空格、标点符号……) 除了那个“长”名字;
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 9年前关闭。 Improve this q
我想编写一个不必使用数据库的 URL 缩短器。相反,为了让移动部件尽可能少,脚本只会根据算法为我的 URL 创建一个唯一的哈希值(如 md5,但 md5 会太长)。我不太确定我会怎么做。有什么建议吗?
也许“缩短”这个词并不恰当;我会尽力解释。 我想向用户显示文件的路径,但我希望将主路径缩短为 ~,将根路径缩短为/。 例如,给定用户主目录中的文件 MyImage.png 的路径类似于: /Volum
通过Google API,我正在以编程方式创建简短的URL。这很好。在我的API控制台上,我可以看到统计信息,例如,自上周五我开始使用此API以来,显示的请求数量为“ urlshortener.url
怎么修剪diffForHumans() ? 赞 $post->created_at->diffForHumans()返回前一段时间 赞 3 days ago或 57 minutes ago , 或 2
这是我的问题:我想缩短字符串,但在开头。例如,“string”应该是“tring”,或者“help”应该变成“elp”。只需是第一个字母即可。 有什么想法吗?谢谢! =) 最佳答案 要么 string
是否可以让多个按钮调用同一个方法?我的意思是参数将是按钮的 ID。我的问题是我得到了一个非常非常长的 switch case 函数,并且每个 case 都有相同的方法。这是我的代码 fragment
我正在模拟 Ising Model使用简单的编码结构来处理尺寸大于 3 的铁磁体,但在效率方面存在一些问题。在我的代码中,有一个特定的函数是瓶颈。 在模拟过程中,需要找到所谓的给定站点的最近邻居。例如
我有字符串,我想缩短第一个单词,让它像这样;有什么方法吗? var name = "John Doe" ---> "J. Doe" 谢谢, 最佳答案 尝试这样的事情怎么样,在空间上分割然后获取第一个数
API 新手...我正在查看此处的文档 (https://developers.google.com/url-shortener/v1/getting_started),但无法使用以下命令:
已结束。此问题不符合 Stack Overflow guidelines .它目前不接受答案。
goo gl 可以支持多少个 URL?以及它的当前填充速度是多少。 我可以看到它使用大小字母和数字创建了唯一的 URL。这使它的容量为 (26*2+10)^5,这个估计是否正确。 最佳答案 我认为数学
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
使用google url缩短器api,在我开始进行负载测试之前,它工作正常。即使我注册使用API,并且每天有1,000,000次匹配,但很快就开始从Google取回403 Rate Limit E
我正在尝试使用 Google URL Shortener API。我已启用 Google URL Shortener API 并生成了 API key 。我按照这个例子http://hayageek.
下面的示例是有效的并且可以正常工作,但是它太长并且经常重复相同的事情。 (我必须这样做,因为我可能不会使用多重上传属性 - HTML5 -)。用户应该能够每次通过新的输入文件元素上传多个文件(最多 5
由于缺乏 PHP 和 MySQL 经验,我正在根据此 YouTube 教程 (PHPAcademy) 为我的网站创建一个 URL 缩短器,我觉得我很快就能掌握它,但是当我收到此错误消息时提交网址。 P
我为将 bash 包含在 PS1 环境变量中实现了一个提示路径缩短器,它将工作目录缩短为更紧凑但仍具有描述性的内容。我很好奇可能存在哪些其他想法。 这是挑战: 创建一个 bash 函数 _dir_ch
是的,又一个用 java 编写的 url 缩短器,因为我想要我自己的,因为为什么不呢。目前一切正常,只是不是我想要的那样。总之,整个项目中只有一个servlet映射到“/”。没有涉及框架,也没有任何花
我是一名优秀的程序员,十分优秀!