Для моего первого поста я объясню, как анализировать ESPN API. Документацию по API можно найти по адресу http://developer.espn.com/docs .
Во-первых, вам нужно запросить ключ API, затем вы можете начать запрашивать API REST для получения ответа JSON. В следующем примере я собираюсь просто запросить всех игроков в спорте «Футбол» (черт возьми, американизм), которые играют в Премьер-лиге в Англии.
После прочтения документации, это URL, на который мне нужно отправлять запросы (с заменой на [apiKey] правильное значение).
http://api.espn.com/v1/sports/soccer/eng.1/athletes?apikey=[apiKey]
Прежде всего следует иметь в виду, что есть значение смещения, которое заставляет вас делать несколько запросов, если вы хотите больше, чем 50 результатов, это устанавливается с помощью параметра, известного как смещение. Так, например, чтобы получить результаты от 51-101, следующий запрос должен был бы их вернуть. Мы вернемся к этому позже, так как это может вызвать некоторые незначительные проблемы.
http://api.espn.com/v1/sports/soccer/eng.1/athletes?apikey=[apiKey]&offset=51
Теперь у меня есть описание, я начну код, следует отметить, что я использую GSON для анализа JSON, поэтому вам нужно добавить следующую зависимость Maven.
|
1
2
3
4
5
|
<dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.2.2</version></dependency> |
Как только это будет сделано, и вы запустите maven: install для загрузки jar-файлов, вы можете начать запрашивать. Приведенный ниже код просто необходим для загрузки JSON из ESPN API
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
private static String readUrl(final String urlString) throws Exception { BufferedReader reader = null; try { final URL url = new URL(urlString); reader = new BufferedReader(new InputStreamReader(url.openStream())); final StringBuffer buffer = new StringBuffer(); int read; final char[] chars = new char[1024]; while ((read = reader.read(chars)) != -1) { buffer.append(chars, 0, read); } return buffer.toString(); } finally { if (reader != null) { reader.close(); } } } |
Теперь мы можем начать синтаксический анализ этого JSON, потому что созданный JSON содержит много избыточных данных, я решил не разбирать их на объекты и просто запросил их в необработанном виде.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
private static JsonArray getAthletesJsonArray(final int offset) throws Exception { final String json = readUrl(getUrl(offset)); final JsonArray sports = getSportsJsonArray(json); final JsonElement league = sports.get(0); return league.getAsJsonObject().get("leagues").getAsJsonArray().get(0) .getAsJsonObject().get("athletes").getAsJsonArray(); } private static JsonArray getSportsJsonArray(final String json) { final JsonArray sports = new JsonParser().parse(json).getAsJsonObject() .get("sports").getAsJsonArray(); return sports; } private static String getUrl(final int offset) { return APIURL + APIKEY + "&offset=" + offset; } |
Это даст нам JsonArray of Athletes и связанные с ними данные, которые можно получить о них. Следует отметить, что ответ здесь варьируется в зависимости от вашего пособия по API (бесплатное, партнерское, платное и т. Д.). Я оставлю соответствующую страницу API ESPN здесь http://developer.espn.com/docs/athletes#parameters.
Теперь, когда у нас есть соответствующий JsonArray, который мы хотим, мы можем просто просмотреть его, чтобы получить данные о каждом игроке.
|
01
02
03
04
05
06
07
08
09
10
11
12
|
for (int offset = 1; offset < 650; offset = offset + 50) { try { final JsonArray athletes = getAthletesJsonArray(offset); for (final JsonElement athlete : athletes) { System.out.println(athlete.getAsJsonObject() .get("fullName")); } Thread.sleep(100); } catch (Exception e) { e.printStackTrace(); } } |
Следует отметить пару вещей, которые могут показаться странными в этом коде. Во-первых, причина сна заключается в том, что у API есть ограничение на количество вызовов в секунду, которое вы можете вызывать. В настоящее время, когда я пишу это бесплатно, вы ограничены раз в 3 секунды. Во-вторых, причина, по которой он находится в цикле 650, связана со смещением, на которое я ссылался ранее в этом посте. Это означает, что вам нужно запрашивать каждые 50 игроков, это кажется немного вычислительно дорогим, так как я бы подумал, что было бы проще вернуть 602 игрока, а не выполнять тяжелую загрузку при получении 12 вызовов RESTful.
Затем, когда мы соберем все это вместе, вы получите класс ниже, это будет проходить через каждого игрока, давая вам свое имя.
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
package org.espn.app;import java.io.BufferedReader;import java.io.InputStreamReader;import java.net.URL;import com.google.gson.JsonArray;import com.google.gson.JsonElement;import com.google.gson.JsonParser;/** * @author David Gray * * This class is simply an example of how to parse the Json * API for ESPN. */public class EspnParser { private static final String APIKEY = "apiKey"; /** * @param arguments * for main method. */ public static void main(final String[] args) { for (int offset = 1; offset < 650; offset = offset + 50) { try { final JsonArray athletes = getAthletesJsonArray(offset); for (final JsonElement athlete : athletes) { System.out.println(athlete.getAsJsonObject() .get("fullName")); } Thread.sleep(100); } catch (Exception e) { e.printStackTrace(); } } } private static JsonArray getAthletesJsonArray(final int offset) throws Exception { final String json = readUrl(getUrl(offset)); final JsonArray sports = getSportsJsonArray(json); final JsonElement league = sports.get(0); return league.getAsJsonObject().get("leagues").getAsJsonArray().get(0) .getAsJsonObject().get("athletes").getAsJsonArray(); } private static JsonArray getSportsJsonArray(final String json) { final JsonArray sports = new JsonParser().parse(json).getAsJsonObject() .get("sports").getAsJsonArray(); return sports; } private static String getUrl(final int offset) { return APIURL + APIKEY + "&offset=" + offset; } private static String readUrl(final String urlString) throws Exception { BufferedReader reader = null; try { final URL url = new URL(urlString); reader = new BufferedReader(new InputStreamReader(url.openStream())); final StringBuffer buffer = new StringBuffer(); int read; final char[] chars = new char[1024]; while ((read = reader.read(chars)) != -1) { buffer.append(chars, 0, read); } return buffer.toString(); } finally { if (reader != null) { reader.close(); } } }} |
Вы можете скачать полный проект на github https://github.com/david99world/EspnApiParsingExample