Example usage for org.apache.commons.lang3 StringEscapeUtils unescapeHtml4

List of usage examples for org.apache.commons.lang3 StringEscapeUtils unescapeHtml4

Introduction

In this page you can find the example usage for org.apache.commons.lang3 StringEscapeUtils unescapeHtml4.

Prototype

public static final String unescapeHtml4(final String input) 

Source Link

Document

Unescapes a string containing entity escapes to a string containing the actual Unicode characters corresponding to the escapes.

Usage

From source file:nya.miku.wishmaster.chans.ernstchan.ErnstModule.java

@Override
public String deletePost(DeletePostModel model, ProgressListener listener, CancellableTask task)
        throws Exception {
    String url = getUsingUrl() + "/wakaba.pl";

    List<NameValuePair> pairs = new ArrayList<NameValuePair>();
    pairs.add(new BasicNameValuePair("delete", model.postNumber));
    pairs.add(new BasicNameValuePair("task", "delete"));
    pairs.add(new BasicNameValuePair("board", model.boardName));
    pairs.add(new BasicNameValuePair("password", model.password));

    HttpRequestModel request = HttpRequestModel.builder().setPOST(new UrlEncodedFormEntity(pairs, "UTF-8"))
            .setNoRedirect(true).build();
    HttpResponseModel response = null;// w ww. j  a  v  a 2 s  .c o m
    try {
        response = HttpStreamer.getInstance().getFromUrl(url, request, httpClient, null, task);
        if (response.statusCode == 200) {
            ByteArrayOutputStream output = new ByteArrayOutputStream(1024);
            IOUtils.copyStream(response.stream, output);
            String htmlResponse = output.toString("UTF-8");
            if (htmlResponse.contains("<div class=\"error\">")) {
                int start = htmlResponse.indexOf("<div class=\"info\">");
                if (start != -1) {
                    int end = htmlResponse.indexOf("</div>", start + 18);
                    if (end != -1) {
                        throw new Exception(StringEscapeUtils
                                .unescapeHtml4(htmlResponse.substring(start + 18, end).trim()));
                    }
                }
            }
        }
    } finally {
        if (response != null)
            response.release();
    }
    return null;
}

From source file:nya.miku.wishmaster.chans.ernstchan.ErnstReader.java

private void handleFilter(int filterIndex) throws IOException {
    switch (filterIndex) {
    case FILTER_THREAD_END:
        finalizeThread();/*w  w  w .ja  v  a2s. com*/
        break;
    case FILTER_POSTNUMBER:
    case FILTER_POSTNUMBER_OP:
        currentPost.number = readUntilSequence(FILTERS_CLOSE[filterIndex]).trim();
        break;
    case FILTER_COUNTRYBALL:
        parseIcon(readUntilSequence(FILTERS_CLOSE[filterIndex]));
        break;
    case FILTER_SUBJECT:
        currentPost.subject = StringEscapeUtils.unescapeHtml4(readUntilSequence(FILTERS_CLOSE[filterIndex]))
                .trim();
        break;
    case FILTER_POSTERNAME:
        currentPost.name = StringEscapeUtils.unescapeHtml4(readUntilSequence(FILTERS_CLOSE[filterIndex]))
                .trim();
        break;
    case FILTER_TRIPCODE:
    case FILTER_ADMINMARK:
        currentPost.trip += StringEscapeUtils.unescapeHtml4(readUntilSequence(FILTERS_CLOSE[filterIndex]))
                .trim();
        break;
    case FILTER_DATE:
        String date = readUntilSequence(FILTERS_CLOSE[filterIndex]);
        try {
            currentPost.timestamp = ERNST_DATEFORMAT.parse(date).getTime();
        } catch (Exception e) {
            Logger.e(TAG, "unable to parse date", e);
        }
        break;
    case FILTER_SAGE:
        currentPost.sage = true;
        break;
    case FILTER_ATTACHMENT:
        String attachmentString = StringEscapeUtils
                .unescapeHtml4(readUntilSequence(FILTERS_CLOSE[filterIndex]));
        String[] attachments = attachmentString.split("<div class=\"file\">");
        for (String attachment : attachments)
            parseAttachment(attachment);
        break;
    case FILTER_START_COMMENT:
        skipUntilSequence(">".toCharArray());
        currentPost.comment = readUntilSequence(FILTERS_CLOSE[filterIndex]);
        finalizePost();
        break;
    case FILTER_OMITTEDPOSTS:
        parseOmittedString(readUntilSequence(FILTERS_CLOSE[filterIndex]));
        break;
    }
}

From source file:nya.miku.wishmaster.chans.hispachan.HispachanModule.java

@Override
public String sendPost(SendPostModel model, ProgressListener listener, CancellableTask task) throws Exception {
    String url = getUsingUrl() + "board.php";
    ExtendedMultipartBuilder postEntityBuilder = ExtendedMultipartBuilder.create().setDelegates(listener, task);
    String emOptions = (model.icon > 0 && model.icon < EMAIL_OPTIONS.length) ? EMAIL_OPTIONS[model.icon]
            : "noko";
    postEntityBuilder.addString("board", model.boardName)
            .addString("replythread", model.threadNumber == null ? "0" : model.threadNumber)
            .addString("name", model.name).addString("em", emOptions).addString("subject", model.subject)
            .addString("message", model.comment).addString("postpassword", model.password);
    setSendPostEntityAttachments(model, postEntityBuilder);

    String checkCaptchaUrl = getUsingUrl() + "cl_captcha.php?board=" + model.boardName + "&v"
            + (model.threadNumber != null ? "&rp" : "");
    if (HttpStreamer.getInstance()
            .getStringFromUrl(checkCaptchaUrl, HttpRequestModel.DEFAULT_GET, httpClient, null, task, false)
            .equals("1")) {
        String response = Recaptcha2solved.pop(RECAPTCHA_KEY);
        if (response == null) {
            throw Recaptcha2.obtain(getUsingUrl(), RECAPTCHA_KEY, null, CHAN_NAME, false);
        }//w  ww .  j a v  a 2  s .  c  om
        postEntityBuilder.addString("g-recaptcha-response", response);
    }

    HttpRequestModel request = HttpRequestModel.builder().setPOST(postEntityBuilder.build()).setNoRedirect(true)
            .build();
    HttpResponseModel response = null;
    try {
        response = HttpStreamer.getInstance().getFromUrl(url, request, httpClient, null, task);
        if (response.statusCode == 302) {
            if (!emOptions.startsWith("noko"))
                return null;
            for (Header header : response.headers) {
                if (header != null && HttpHeaders.LOCATION.equalsIgnoreCase(header.getName())) {
                    return fixRelativeUrl(header.getValue());
                }
            }
        } else if (response.statusCode == 200) {
            ByteArrayOutputStream output = new ByteArrayOutputStream(1024);
            IOUtils.copyStream(response.stream, output);
            String htmlResponse = output.toString("UTF-8");
            if (htmlResponse.contains("<div class=\"divban\">")) {
                throw new Exception("EST?S BANEADO!");
            }
            Matcher errorMatcher = ERROR_POSTING.matcher(htmlResponse);
            if (errorMatcher.find()) {
                throw new Exception(StringEscapeUtils.unescapeHtml4(errorMatcher.group(1).trim()));
            }
        } else {
            throw new Exception(response.statusCode + " - " + response.statusReason);
        }
    } finally {
        if (response != null)
            response.release();
    }
    return null;
}

From source file:nya.miku.wishmaster.chans.hispachan.HispachanModule.java

@Override
protected void checkDeletePostResult(DeletePostModel model, String result) throws Exception {
    if (StringEscapeUtils.unescapeHtml4(result).contains("No puedes realizar esta accin")) {
        throw new Exception("No puedes realizar esta accin");
    }// w w  w. j a  v  a2s  .com
}

From source file:nya.miku.wishmaster.chans.hispachan.HispachanModule.java

@Override
protected void checkReportPostResult(DeletePostModel model, String result) throws Exception {
    if (StringEscapeUtils.unescapeHtml4(result).contains("Post reportado correctamente"))
        return;/*  w  w w .  ja  va 2 s  .  com*/
    throw new Exception(result);
}

From source file:nya.miku.wishmaster.chans.hispachan.HispachanReader.java

@Override
protected void customFilters(int ch) throws IOException {
    super.customFilters(ch);

    if (ch == FILE_SIZE_FILTER[curFilesizePos]) {
        ++curFilesizePos;//from w w w .j a va  2s. co  m
        if (curFilesizePos == FILE_SIZE_FILTER.length) {
            currentAttachmentSize = -1;
            Matcher byteSizeMatcher = ATTACHMENT_SIZE_PATTERN.matcher(readUntilSequence("<".toCharArray()));
            if (byteSizeMatcher.find()) {
                try {
                    String digits = byteSizeMatcher.group(1);
                    int multiplier = 1;
                    String prefix = byteSizeMatcher.group(2);
                    if (prefix != null) {
                        if (prefix.equalsIgnoreCase("k"))
                            multiplier = 1024;
                        else if (prefix.equalsIgnoreCase("m"))
                            multiplier = 1024 * 1024;
                    }
                    int value = Math.round(Float.parseFloat(digits) / 1024 * multiplier);
                    currentAttachmentSize = value;
                } catch (NumberFormatException e) {
                }
            }
            curFilesizePos = 0;
        }
    } else {
        if (curFilesizePos != 0)
            curFilesizePos = ch == FILE_SIZE_FILTER[0] ? 1 : 0;
    }

    if (ch == PX_SIZE_FILTER[curPxSizePos]) {
        ++curPxSizePos;
        if (curPxSizePos == PX_SIZE_FILTER.length) {
            currentAttachmentWidth = -1;
            currentAttachmentHeight = -1;
            Matcher pxMatcher = ATTACHMENT_PX_SIZE_PATTERN.matcher(readUntilSequence(SPAN_CLOSE_FILTER));
            if (pxMatcher.find()) {
                try {
                    currentAttachmentWidth = Integer.parseInt(pxMatcher.group(1));
                    currentAttachmentHeight = Integer.parseInt(pxMatcher.group(2));
                } catch (NumberFormatException e) {
                }
            }
            curPxSizePos = 0;
        }
    } else {
        if (curPxSizePos != 0)
            curPxSizePos = ch == PX_SIZE_FILTER[0] ? 1 : 0;
    }

    if (ch == FILE_NAME_FILTER[curFilenamePos]) {
        ++curFilenamePos;
        if (curFilenamePos == FILE_NAME_FILTER.length) {
            currentAttachmentName = null;
            Matcher originalNameMatcher = ATTACHMENT_NAME_PATTERN.matcher(readUntilSequence(SPAN_CLOSE_FILTER));
            if (originalNameMatcher.find()) {
                String originalName = originalNameMatcher.group(1).trim();
                if (originalName != null && originalName.length() > 0) {
                    currentAttachmentName = StringEscapeUtils.unescapeHtml4(originalName);
                }
            }
            curFilenamePos = 0;
        }
    } else {
        if (curFilenamePos != 0)
            curFilenamePos = ch == FILE_NAME_FILTER[0] ? 1 : 0;
    }
}

From source file:nya.miku.wishmaster.chans.hispachan.HispachanReader.java

@Override
protected void parseNameEmail(String raw) {
    super.parseNameEmail(raw);

    Matcher iconMatcher = BADGE_ICON_PATTERN.matcher(raw);
    if (iconMatcher.find()) {
        BadgeIconModel iconModel = new BadgeIconModel();
        iconModel.source = iconMatcher.group(1);
        iconModel.description = StringEscapeUtils.unescapeHtml4(iconMatcher.group(2));
        int currentIconsCount = currentPost.icons == null ? 0 : currentPost.icons.length;
        BadgeIconModel[] newIconsArray = new BadgeIconModel[currentIconsCount + 1];
        for (int i = 0; i < currentIconsCount; ++i)
            newIconsArray[i] = currentPost.icons[i];
        newIconsArray[currentIconsCount] = iconModel;
        currentPost.icons = newIconsArray;
    }//  w  ww.  j  a va  2  s .co  m
}

From source file:nya.miku.wishmaster.chans.lampach.LampachReader.java

@Override
protected void parseDate(String date) {
    Matcher matcher = SPAN_ADMIN_PATTERN.matcher(date);
    if (matcher.find()) {
        currentPost.trip = (currentPost.trip == null ? "" : currentPost.trip)
                + StringEscapeUtils.unescapeHtml4(matcher.group(2));
        currentPost.color = Color.parseColor(matcher.group(1));
        date = matcher.group(3);//from  w w w . j  a  va  2s .c o  m
    } else {
        if (date.startsWith("<"))
            date = RegexUtils.removeHtmlTags(date);
    }

    try {
        currentPost.timestamp = DATE_FORMAT.parse(date.replace("|", "")).getTime();
    } catch (Exception e) {
        super.parseDate(date);
    }
}

From source file:nya.miku.wishmaster.chans.monaba.AbstractMonabaChan.java

@Override
public String sendPost(SendPostModel model, ProgressListener listener, CancellableTask task) throws Exception {
    UrlPageModel urlModel = new UrlPageModel();
    urlModel.chanName = getChanName();/*from   w w w.  j a  v a  2  s.c  o m*/
    urlModel.boardName = model.boardName;
    if (model.threadNumber == null) {
        urlModel.type = UrlPageModel.TYPE_BOARDPAGE;
        urlModel.boardPage = UrlPageModel.DEFAULT_FIRST_PAGE;
    } else {
        urlModel.type = UrlPageModel.TYPE_THREADPAGE;
        urlModel.threadNumber = model.threadNumber;
    }

    String referer = buildUrl(urlModel);
    List<Pair<String, String>> fields = MonabaAntibot.getFormValues(referer, task, httpClient);

    if (task != null && task.isCancelled())
        throw new Exception("interrupted");

    ExtendedMultipartBuilder postEntityBuilder = ExtendedMultipartBuilder.create()
            .setCharset(Charset.forName("UTF-8")).setDelegates(listener, task);
    String rating = (model.icon >= 0 && model.icon < RATINGS.length) ? Integer.toString(model.icon + 1) : "1";
    int fileCount = 0;
    for (Pair<String, String> pair : fields) {
        String val;
        switch (pair.getKey()) {
        case "f1":
            val = model.name;
            break;
        case "f2":
            val = model.subject;
            break;
        case "f3":
            val = model.comment;
            break;
        case "f4":
            val = TextUtils.isEmpty(model.password) ? getDefaultPassword() : model.password;
            break;
        case "f5":
            val = TextUtils.isEmpty(model.captchaAnswer) ? "" : model.captchaAnswer;
            break;
        case "f6":
            val = "1";
            break; //noko
        case "f7":
            val = model.sage ? pair.getValue() : "";
            break;
        default:
            val = pair.getValue();
        }

        if (pair.getValue().equals("file")) {
            if ((model.attachments != null) && (fileCount < model.attachments.length)) {
                postEntityBuilder.addFile(pair.getKey(), model.attachments[fileCount], model.randomHash);
                ++fileCount;
            } else {
                postEntityBuilder.addPart(pair.getKey(), new ByteArrayBody(new byte[0], ""));
            }
        } else if (pair.getValue().equals("rating-input")) {
            postEntityBuilder.addString(pair.getKey(), rating);
        } else {
            postEntityBuilder.addString(pair.getKey(), val);
        }
    }

    String url = getUsingUrl() + model.boardName + (model.threadNumber != null ? "/" + model.threadNumber : "");

    Header[] customHeaders = new Header[] { new BasicHeader(HttpHeaders.REFERER, referer) };

    HttpRequestModel request = HttpRequestModel.builder().setPOST(postEntityBuilder.build())
            .setCustomHeaders(customHeaders).setNoRedirect(true).build();
    HttpResponseModel response = null;
    try {
        response = HttpStreamer.getInstance().getFromUrl(url, request, httpClient, null, task);
        if (response.statusCode == 303) {
            for (Header header : response.headers) {
                if (header != null && HttpHeaders.LOCATION.equalsIgnoreCase(header.getName())) {
                    String location = header.getValue();
                    String html = HttpStreamer.getInstance().getStringFromUrl(location,
                            HttpRequestModel.DEFAULT_GET, httpClient, null, task, false);
                    if (html.contains("Post has been submitted successfully")) {
                        return location;
                    }
                    Matcher errorMatcher = ERROR_PATTERN.matcher(html);
                    if (errorMatcher.find()) {
                        throw new Exception(StringEscapeUtils.unescapeHtml4(errorMatcher.group(1)));
                    }
                    return null;
                }
            }
        } else
            throw new Exception(response.statusCode + " - " + response.statusReason);
    } finally {
        if (response != null)
            response.release();
    }
    return null;
}

From source file:nya.miku.wishmaster.chans.monaba.MonabaReader.java

private void handleFilter(int filterIndex) throws IOException {
    switch (filterIndex) {
    case FILTER_THREAD_END:
        finalizeThread();//w w w  .  ja  v a  2  s .  c  om
        break;
    case FILTER_POSTNUMBER:
        currentPost.number = readUntilSequence(FILTERS_CLOSE[filterIndex]);
        break;
    case FILTER_SUBJECT:
        currentPost.subject = StringEscapeUtils.unescapeHtml4(readUntilSequence(FILTERS_CLOSE[filterIndex]))
                .trim();
        break;
    case FILTER_NAME:
        currentPost.name = readUntilSequence(FILTERS_CLOSE[filterIndex]);
        break;
    case FILTER_DATE:
        parseDate(readUntilSequence(FILTERS_CLOSE[filterIndex]));
        break;
    case FILTER_ATTACHMENT:
        Matcher matcher = ATTACHMENT_PATTERN.matcher(readUntilSequence(FILTERS_CLOSE[filterIndex]));
        AttachmentModel attachment = new AttachmentModel();
        attachment.size = -1;
        attachment.width = -1;
        attachment.height = -1;
        if (matcher.find()) {
            attachment.originalName = matcher.group(1);
            attachment.path = matcher.group(2);
            String ext = attachment.path.substring(attachment.path.lastIndexOf('.') + 1).toLowerCase(Locale.US);
            switch (ext) {
            case "jpg":
            case "jpeg":
            case "png":
                attachment.type = AttachmentModel.TYPE_IMAGE_STATIC;
                break;
            case "gif":
                attachment.type = AttachmentModel.TYPE_IMAGE_GIF;
                break;
            case "webm":
            case "mp4":
            case "ogv":
                attachment.type = AttachmentModel.TYPE_VIDEO;
                break;
            case "mp3":
            case "ogg":
                attachment.type = AttachmentModel.TYPE_AUDIO;
                break;
            default:
                attachment.type = AttachmentModel.TYPE_OTHER_FILE;
            }
        }
        ++currentThread.attachmentsCount;
        currentAttachments.add(attachment);
        break;
    case FILTER_ATTACHMENT_INFO:
        parseAttachmentSizes(readUntilSequence(FILTERS_CLOSE[filterIndex]));
        break;
    case FILTER_ATTACHMENT_THUMBNAIL:
        parseThumbnail(readUntilSequence(FILTERS_CLOSE[filterIndex]));
        break;
    case FILTER_OMITTEDPOSTS:
        parseOmittedString(readUntilSequence(FILTERS_CLOSE[filterIndex]));
        break;
    case FILTER_START_COMMENT:
        currentPost.comment = readUntilSequence(FILTERS_CLOSE[filterIndex]);
        finalizePost();
        break;
    }
}