Я пытаюсь запустить google-поиск api из SO-ссылки ниже: - Как вы можете искать программный Java API Java Вот мой код ниже:
public class RetrieveArticles {
public static void main(String[] args) throws UnsupportedEncodingException, IOException {
// TODO Auto-generated method stub
String google = "http://www.google.com/news?&start=1&q=";
String search = "Police Violence in USA";
String charset = "UTF-8";
String userAgent = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"; // Change this to your company name and bot homepage!
Elements links = Jsoup.connect(google + URLEncoder.encode(search, charset)).userAgent(userAgent).get().children();
for (Element link : links) {
String title = link.text();
String url = link.absUrl("href"); // Google returns URLs in format "http://www.google.com/url?q=<url>&sa=U&ei=<someKey>".
url = URLDecoder.decode(url.substring(url.indexOf('=') +1, url.indexOf('&')), "UTF-8");
if (!url.startsWith("http")) {
continue; // Ads/news/etc.
}
System.out.println("Title: " + title);
System.out.println("URL: " + url);
}
}
}
Когда я пытаюсь запустить это, я получаю следующую ошибку. Может кто-нибудь, пожалуйста, помогите мне исправить это.
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
at java.lang.String.substring(String.java:1911)
at google.api.search.RetrieveArticles.main(RetrieveArticles.java:34)
Заранее спасибо.
Проблема здесь:
url.substring(url.indexOf('=') +1, url.indexOf('&'))
Либо url.indexOf('=')
либо url.indexOf('&')
возвратил -1, что является незаконным аргументом в subString
.
Вы должны проверить url
вы разбираете, прежде чем предполагать, что он содержит =
и &
.
добавьте System.Out.Println(Url); перед
url = URLDecoder.decode(url.substring(url.indexOf('=') +1, url.indexOf('&')), "UTF-8");
то вы узнаете, что строка url файла контактирует '=', '&' или нет.
=
, я не думаю, что получение подстроки, начинающейся с первого символа URL, - это то, что хочет ОП.