Я новичок в Java, и я шокирован тем, сколько кода мне нужно получить из двух данных (queryKey
и webEnv
) из запроса POST. Есть ли более простой или более оптимальный способ сделать то, что я здесь сделал?Есть ли способ упростить сопоставление Java-шаблона для извлечения двух частей данных из запроса POST?
String link = "https://eutils.ncbi.nlm.nih.gov/entrez/eutils/epost.fcgi?db=nucleotide&id=" + id;
URLConnection connection = new URL(link).openConnection();
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11");
connection.connect();
BufferedReader r = new BufferedReader(new InputStreamReader(connection.getInputStream(), "UTF-8"));
String webEnv = "";
String queryKey = "";
// Put together string to be scanned to find patterns
StringBuilder sb = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
sb.append(line);
}
String result = sb.toString();
// Specify patterns to search for
String queryKeyRegEx = "<QueryKey>(\\d+)<\\/QueryKey>";
String webEnvRegEx = "<WebEnv>(\\S+)<\\/WebEnv>";
// Create Pattern objects
Pattern queryKeyPattern = Pattern.compile(queryKeyRegEx);
Pattern webEnvPattern = Pattern.compile(webEnvRegEx);
// Create Matcher objects
Matcher queryKeyMatcher = queryKeyPattern.matcher(result);
if (queryKeyMatcher.find()) {
queryKey = queryKeyMatcher.group(1);
System.out.println(queryKey);
}
Matcher webEnvMatcher = webEnvPattern.matcher(result);
if (webEnvMatcher.find()) {
webEnv = webEnvMatcher.group(1);
System.out.println(webEnv);
}
По внешности вашего запроса, вы делаете HTTP GET запрос о API и синтаксического анализа результата XML. Вы используете стандартные Java-библиотеки, которые, хотя и хорошо, могут потребовать много кода, чтобы заставить их работать. Есть несколько библиотек, которые я мог бы предложить вам использовать, и я могу привести пример, если все в порядке? – phss
Я хотел бы увидеть пример @phss – briennakh
Я бы подключил синтаксический анализатор SAX прямо к входному потоку HTTP-соединения. Но это также займет довольно много строк кода. –