public static Result parse(String body) throws ParseException {
        Matcher m;
        Result result = new Result();
        m = PATTERN_IMAGE_URL.matcher(body);
        if (m.find()) {
            result.imageUrl = StringUtils.unescapeXml(StringUtils.trim(m.group(1)));
        }
        m = PATTERN_SKIP_HATH_KEY.matcher(body);
        if (m.find()) {
            result.skipHathKey = StringUtils.unescapeXml(StringUtils.trim(m.group(1)));
        }
        m = PATTERN_ORIGIN_IMAGE_URL.matcher(body);
        if (m.find()) {
            result.originImageUrl = StringUtils.unescapeXml(m.group(1)) + "fullimg" + StringUtils.unescapeXml(m.group(2));
        }
        m = PATTERN_SHOW_KEY.matcher(body);
        if (m.find()) {
            result.showKey = m.group(1);
        }

        if (!TextUtils.isEmpty(result.imageUrl) && !TextUtils.isEmpty(result.showKey)) {
            return result;
        } else {
            throw new ParseException("Parse image url and show error", body);
        }
    }
@Test
  public void testParse() throws IOException, ParseException {
    InputStream resource = GalleryPageParserTest.class.getResourceAsStream("GalleryPageParserTest.GalleryTopListEX.html");
    BufferedSource source = Okio.buffer(Okio.source(resource));
    String body = source.readUtf8();

    GalleryPageParser.Result result = GalleryPageParser.parse(body);
    assertEquals("http://108.6.41.160:2688/h/5c63e9a5810d8d9c873d9e0dfaadc4a0d70a13bf-188862-1280-879-jpg/keystamp=1550291700-145ecbbb10;fileindex=67290651;xres=1280/10.jpg", result.imageUrl);
    assertEquals("26664-430636", result.skipHathKey);
    assertEquals("https://e-hentai.org/fullimg.php?gid=1363978&page=10&key=qt2hwrx98a4", result.originImageUrl);
    assertEquals("ghz0e5m98a4", result.showKey);
  }