List of usage examples for org.apache.commons.lang3 StringEscapeUtils unescapeHtml4
public static final String unescapeHtml4(final String input)
Unescapes a string containing entity escapes to a string containing the actual Unicode characters corresponding to the escapes.
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; } }