Как с помощью регулярки вытащить из строки нужную информацию
Пишу на Java. Получаю страницу стрима с ютуба (через JSoup) и вытаскиваю её код. Из этого кода нужно получить информацию о зрителях и лайках. Для достижения этой цели хочу использовать регулярку, но сколько я не пытался понять как их составлять, до сих пор не получается. Также хотел попробовать преобразовать это в json, но опять-таки ничего не получилось: получаю ошибку, что данная строка не является объектом json.
Помогите составить регулярное выражение или превратить строку в json чтобы удобно из неё вытаскиватт значения
p.s. сам код получаемый от ютуба https://pastebin.com/1biDfSnU
Ответы (1 шт):
Автор решения: komla3
→ Ссылка
Разобрался сам. Вот код получения лайков и зрителей
private void test(String html) {
JsonObject mainInfo = new JsonParser().parse(html).getAsJsonArray()
.get(0).getAsJsonObject()
.getAsJsonObject("contents")
.getAsJsonObject("twoColumnWatchNextResults")
.getAsJsonObject("results")
.getAsJsonObject("results")
.getAsJsonArray("contents")
.get(0).getAsJsonObject()
.getAsJsonObject("videoPrimaryInfoRenderer");
JsonObject likesInfo = mainInfo.getAsJsonObject("videoActions")
.getAsJsonObject("menuRenderer")
.getAsJsonArray("topLevelButtons")
.get(0).getAsJsonObject()
.getAsJsonObject("toggleButtonRenderer")
.getAsJsonObject("defaultText");
int viewers = Integer.parseInt(mainInfo.getAsJsonObject("viewCount")
.getAsJsonObject("videoViewCountRenderer")
.getAsJsonObject("viewCount")
.getAsJsonArray("runs")
.get(1).getAsJsonObject()
.get("text")
.getAsString().replaceAll("[^0-9]", "")
);
int likes = Integer.parseInt(likesInfo
.getAsJsonObject("accessibility")
.getAsJsonObject("accessibilityData")
.get("label").getAsString().replaceAll("[^0-9]", "")
);
String simpleLikes = likesInfo.get("simpleText").getAsString();
System.out.println("Зрителей: " + viewers); //Зрителей: 7475
System.out.println("Упрощенное кол-во лайков: " + simpleLikes); //Упрощенное кол-во лайков: 2,3 тыс.
System.out.println("Полное кол-во лайков: " + likes); //Полное кол-во лайков: 2387
}