List of usage examples for org.jsoup.nodes Element attr
public String attr(String attributeKey)
From source file:com.normalexception.app.rx8club.fragment.HomeFragment.java
/** * Get the forum contents as a Map that links the category names * to a list of the forums within each category * @param root The full forum document * @return A map of the categories to the forums *///from w w w .j av a 2 s .c o m private void getCategories(Document root) { // Grab each category Elements categories = root.select("td[class=tcat][colspan=5]"); Log.d(TAG, "Category Size: " + categories.size()); // Now grab each section within a category Elements categorySections = root.select("tbody[id^=collapseobj_forumbit_]"); // These should match in size if (categories.size() != categorySections.size()) { Log.w(TAG, String.format("Size of Categories (%d) doesn't match Category Sections (%d)", categories.size(), categorySections.size())); return; } // Iterate over each category int catIndex = 0; for (Element category : categorySections) { CategoryModel cv = new CategoryModel(); cv.setTitle(categories.get(catIndex++).text()); mainList.add(cv); Elements forums = category.select("tr[align=center]"); for (Element forum : forums) { cv = new CategoryModel(); List<SubCategoryModel> scvList = cv.getSubCategories(); // Each forum object should have 5 columns Elements columns = forum.select("tr[align=center] > td"); try { if (columns.size() != 5) continue; String forum_name = columns.get(HomeFragment.FORUM_NAME).select("strong").text(); String forum_href = columns.get(HomeFragment.FORUM_NAME).select("a").attr("href"); String forum_desc = ""; try { forum_desc = columns.get(HomeFragment.FORUM_NAME).select("div[class=smallfont]").first() .text(); } catch (NullPointerException npe) { /* Some might not have a desc */ } String threads = columns.get(HomeFragment.THREADS_CNT).text(); String posts = columns.get(HomeFragment.POSTS_CNT).text(); // Lets grab each subcategory Elements subCats = columns.select("tbody a"); for (Element subCat : subCats) { SubCategoryModel scv = new SubCategoryModel(); scv.setLink(subCat.attr("href")); scv.setTitle(subCat.text().toString()); scvList.add(scv); } cv.setTitle(forum_name); cv.setThreadCount(threads); cv.setPostCount(posts); cv.setLink(forum_href); cv.setDescription(forum_desc); cv.setSubCategories(scvList); mainList.add(cv); } catch (Exception e) { Log.e(TAG, "Error Parsing Forum", e); } } } return; }
From source file:com.normalexception.app.rx8club.fragment.thread.ThreadFragment.java
/** * Grab contents from the forum that the user clicked on * @param doc The document parsed from the link * @param id The id number of the link * @return An arraylist of forum contents *//*from ww w. ja va2 s . c om*/ public void getThreadContents(Document doc) { // Update pagination try { Elements pageNumbers = doc.select("div[class=pagenav]"); if (pageNumbers.first() != null) { Elements pageLinks = pageNumbers.first().select("td[class^=vbmenu_control]"); thisPage = pageLinks.text().split(" ")[1]; finalPage = pageLinks.text().split(" ")[3]; Log.d(TAG, String.format("This Page: %s, Final Page: %s", thisPage, finalPage)); } else { Log.d(TAG, "Thread only contains one page"); } } catch (Exception e) { Log.e(TAG, "We had an error with pagination", e); } // Is user thread admin?? Elements threadTools = doc.select("div[id=threadtools_menu] > form > table"); if (threadTools.text().contains(MODERATION_TOOLS)) { Log.d(TAG, "<><> User has administrative rights here! <><>"); } else { //adminContent.setVisibility(View.GONE); lv.removeHeaderView(adminContent); } // Get the user's actual ID, there is a chance they never got it // before UserProfile.getInstance().setUserId(HtmlFormUtils.getInputElementValueByName(doc, "loggedinuser")); // Get Post Number and security token securityToken = HtmlFormUtils.getInputElementValueByName(doc, "securitytoken"); Elements pNumber = doc.select("a[href^=http://www.rx8club.com/newreply.php?do=newreply&noquote=1&p=]"); String pNumberHref = pNumber.attr("href"); postNumber = pNumberHref.substring(pNumberHref.lastIndexOf("=") + 1); threadNumber = doc.select("input[name=searchthreadid]").attr("value"); Elements posts = doc.select("div[id=posts]").select("div[id^=edit]"); Log.v(TAG, String.format("Parsing through %d posts", posts.size())); for (Element post : posts) { try { Elements innerPost = post.select("table[id^=post]"); // User Control Panel Elements userCp = innerPost.select("td[class=alt2]"); Elements userDetail = userCp.select("div[class=smallfont]"); Elements userSubDetail = userDetail.last().select("div"); Elements userAvatar = userDetail.select("img[alt$=Avatar]"); // User Information PostModel pv = new PostModel(); pv.setUserName(userCp.select("div[id^=postmenu]").text()); pv.setIsLoggedInUser(LoginFactory.getInstance().isLoggedIn() ? UserProfile.getInstance().getUsername().equals(pv.getUserName()) : false); pv.setUserTitle(userDetail.first().text()); pv.setUserImageUrl(userAvatar.attr("src")); pv.setPostDate(innerPost.select("td[class=thead]").first().text()); pv.setPostId(Utils.parseInts(post.attr("id"))); pv.setRootThreadUrl(currentPageLink); // get Likes if any exist Elements eLikes = innerPost.select("div[class*=vbseo_liked] > a"); List<String> likes = new ArrayList<String>(); for (Element eLike : eLikes) likes.add(eLike.text()); pv.setLikes(likes); Iterator<Element> itr = userSubDetail.listIterator(); while (itr.hasNext()) { String txt = itr.next().text(); if (txt.contains("Location:")) pv.setUserLocation(txt); else if (txt.contains("Posts:")) pv.setUserPostCount(txt); else if (txt.contains("Join Date:")) pv.setJoinDate(txt); } // User Post Content pv.setUserPost(formatUserPost(innerPost)); // User signature try { Element userSig = innerPost.select("div[class=konafilter]").first(); pv.setUserSignature(userSig.html()); } catch (NullPointerException npe) { } Elements postAttachments = innerPost.select("a[id^=attachment]"); if (postAttachments != null && !postAttachments.isEmpty()) { ArrayList<String> attachments = new ArrayList<String>(); for (Element postAttachment : postAttachments) { attachments.add(postAttachment.attr("href")); } pv.setAttachments(attachments); } pv.setSecurityToken(securityToken); // Make sure we aren't adding a blank user post if (pv.getUserPost() != null) postlist.add(pv); } catch (Exception e) { Log.w(TAG, "Error Parsing Post...Probably Deleted"); } } }
From source file:github.popeen.dsub.fragments.SelectPodcastsFragment.java
private String getRssFeed(String url) { String url2 = url;//from w ww .j a v a2 s.co m try { if (url.toLowerCase().contains("itunes.apple.com")) { Pattern pattern = Pattern.compile("/id([0-9]*)"); Matcher matcher = pattern.matcher(url); if (matcher.find()) { try { String raw = KakaduaUtil.http_get_contents( "https://itunes.apple.com/lookup?id=" + matcher.group(1) + "&entity=podcast"); url2 = new JSONObject(raw).getJSONArray("results").getJSONObject(0).getString("feedUrl"); Log.w("podcast", url2); } catch (Exception e) { Log.w("podcast", e.toString()); } } } else if (url.toLowerCase().contains("soundcloud.com")) { try { Document doc = Jsoup.connect(url).get(); Elements metas = doc.getElementsByTag("meta"); for (Element meta : metas) { if (meta.attr("property").equals("al:android:url")) { String id = meta.attr("content").replace("soundcloud://users:", ""); url2 = "https://feeds.soundcloud.com/users/soundcloud:users:" + id + "/sounds.rss"; Log.w("podcast", url2); } } } catch (Exception e) { Log.w("podcast", e.toString()); } } else if (url.toLowerCase().contains("player.fm/series")) { try { Document doc = Jsoup.connect(url).get(); Elements links = doc.select(".blatant"); for (Element link : links) { if (link.text().equals("Public Feed")) { url2 = link.attr("href"); Log.w("podcast", url2); } } } catch (Exception e) { Log.w("podcast", e.toString()); } } else if (url.toLowerCase().contains("acast.com") || url.toLowerCase().contains("podbean.com")) { /* TODO, This uses a standard tag that most podcasting websites support. Make it always try this if the url entered is not a valid feed or a website with a specific conversion above like for example iTunes. If it fails it needs to prevent the app from adding it to the server and then show an error message */ try { Document doc = Jsoup.connect(url).get(); Elements links = doc.select("link"); for (Element link : links) { if (link.attr("type").equals("application/rss+xml")) { url2 = link.attr("href"); Log.w("podcast", url2); } } } catch (Exception e) { Log.w("podcast", e.toString()); } } } catch (Exception e) { Log.w("podcast", e.toString()); } return url2; }
From source file:moose.com.ac.ArticleViewActivity.java
private void filterImg(String str) { Document mDocument = Jsoup.parse(str); Elements imgs = mDocument.select("img"); for (int imgIndex = 0; imgIndex < imgs.size(); imgIndex++) { Element img = imgs.get(imgIndex); String src = img.attr("src").trim(); if (TextUtils.isEmpty(src)) continue; Uri parsedUri = Uri.parse(src);//from www . j a va 2 s .c om if ("file".equals(parsedUri.getScheme())) continue; if (parsedUri.getPath() == null) continue; if (!"http".equals(parsedUri.getScheme())) { parsedUri = parsedUri.buildUpon().scheme("http").authority("www.acfun.tv").build(); } // url may have encoded path parsedUri = parsedUri.buildUpon().path(parsedUri.getPath()).build(); src = parsedUri.toString(); Log.i(TAG, "image src:" + src); img.attr("org", src); if (CommonUtil.getMode() == 1 && !CommonUtil.isWifiConnected(mContext)) {// Log.i(TAG, "[?]"); img.after("<div style=\"width: 100%;text-align: center;\"><br><p>[]</p></div>"); } else { Log.i(TAG, "[?]"); StringBuilder builder = new StringBuilder(); builder.append("<div style='text-align: center;'><br>") .append("<img src='file:///android_asset/loading.gif'").append("name = '").append(src) .append("'\n;onclick = window.JsBridge.showImage('").append(src).append("')") .append(" alt=' '/>\n").append("</div>"); img.after(builder.toString()); Log.i(TAG, "image:table:-" + builder.toString()); } /*if (CommonUtil.getMode() == 1 && !CommonUtil.isWifiConnected(mContext)) { img.after("<p >[]</p>"); } else if (!src.contains(Config.AC_EMOTION)) { StringBuilder builder = new StringBuilder(); builder.append("<div style=\"width: 100%;text-align: center;\"><br><img src=\"") .append(src) .append("\" width=: 100%;height:auto\"") .append(" alt=\" \"/>\n") .append("</div>"); Log.i(TAG, "index image:" + builder.toString()); img.after(builder.toString()); } else { img.after("<img src=\"" + src + "\" alt=\" \"/>\n"); }*/ img.remove(); //img.removeAttr("style"); HtmlBody = mDocument.toString(); Log.i(TAG, "??html:" + HtmlBody); } }
From source file:net.meiolania.apps.habrahabr.fragments.companies.loader.CompaniesLoader.java
@Override public ArrayList<CompaniesData> loadInBackground() { ArrayList<CompaniesData> data = new ArrayList<CompaniesData>(); try {//from w w w.j a va 2 s . c om String readyUrl = String.format(URL, page); Log.i(TAG, "Loading a page: " + readyUrl); Document document = Jsoup.connect(readyUrl).get(); Elements companies = document.select("div.company"); for (Element company : companies) { CompaniesData companiesData = new CompaniesData(); Element icon = company.select("div.icon > img").first(); Element index = company.select("div.habraindex").first(); Element title = company.select("div.description > div.name > a").first(); Element description = company.select("div.description > p").first(); companiesData.setTitle(title.text()); companiesData.setUrl(title.attr("abs:href")); // TODO: rewrite the code below companiesData.setIcon("http://habrahabr.ru" + icon.attr("src")); companiesData.setIndex(index.text()); companiesData.setDescription(description.text()); data.add(companiesData); } } catch (IOException e) { } return data; }
From source file:net.meiolania.apps.habrahabr.fragments.events.loader.EventLoader.java
@Override public ArrayList<EventsData> loadInBackground() { ArrayList<EventsData> data = new ArrayList<EventsData>(); try {//from ww w . j av a 2 s. co m String readyUrl = url.replace("%page%", String.valueOf(page)); Log.i(TAG, "Loading a page: " + readyUrl); Document document = Jsoup.connect(readyUrl).get(); Elements events = document.select("div.event"); for (Element event : events) { EventsData eventsData = new EventsData(); Element title = event.select("h1.title > a").first(); //Element detail = event.select("div.detail").first(); Element text = event.select("div.text").first(); Element month = event.select("div.date > div.month").first(); Element day = event.select("div.date > div.day").first(); Element hubs = event.select("div.hubs").first(); eventsData.setTitle(title.text()); eventsData.setUrl(title.attr("abs:href")); //eventsData.setDetail(detail.text()); eventsData.setText(text.text()); eventsData.setDate(day.text() + " " + month.text()); eventsData.setHubs(hubs.text()); data.add(eventsData); } } catch (IOException e) { } return data; }
From source file:net.meiolania.apps.habrahabr.fragments.hubs.loader.HubsLoader.java
@Override public ArrayList<HubsData> loadInBackground() { ArrayList<HubsData> data = new ArrayList<HubsData>(); try {//from www .j av a2s . c o m String readyUrl = url.replace("%page%", String.valueOf(page)); Log.i(TAG, "Loading a page: " + readyUrl); Document document = Jsoup.connect(readyUrl).get(); Elements hubs = document.select("div.hub"); for (Element hub : hubs) { HubsData hubsData = new HubsData(); Element index = hub.select("div.habraindex").first(); Element title = hub.select("div.title > a").first(); Element stat = hub.select("div.stat").first(); hubsData.setTitle(title.text()); hubsData.setUrl(title.attr("abs:href")); hubsData.setStat(stat.text()); hubsData.setIndex(index.text()); data.add(hubsData); } } catch (IOException e) { } return data; }
From source file:net.meiolania.apps.habrahabr.fragments.posts.loader.PostCommentsLoader.java
private void parseComments(Elements comments, int level) { for (Element comment : comments) { CommentsData commentsData = new CommentsData(); /*/*w w w .j ava 2s . c o m*/ * TODO: Really awful. Need to rewrite this. */ String commentId = comment.attr("id"); if (containedComments.contains(commentId)) continue; containedComments.add(commentId); Element name = comment.select("a.username").first(); Element message = comment.select("div.message").first(); Element linkToComment = comment.select("a.link_to_comment").first(); Element score = comment.select("span.score").first(); commentsData.setScore(score.text()); commentsData.setUrl(linkToComment.attr("abs:href")); commentsData.setAuthorUrl(name.attr("abs:href")); commentsData.setAuthor(name.text()); commentsData.setComment(message.text()); commentsData.setLevel(level); commentsDatas.add(commentsData); Elements replyComments = comment.select("div.reply_comments > div.comment_item"); parseComments(replyComments, level + 1); } }
From source file:net.meiolania.apps.habrahabr.fragments.posts.loader.PostsLoader.java
@Override public ArrayList<PostsData> loadInBackground() { ArrayList<PostsData> data = new ArrayList<PostsData>(); try {/* ww w . ja va 2s . c o m*/ String readyUrl = url.replace("%page%", String.valueOf(page)); Log.i(TAG, "Loading a page: " + readyUrl); Document document = Jsoup.connect(readyUrl).get(); Elements posts = document.select("div.post"); for (Element post : posts) { PostsData postsData = new PostsData(); Element postTitle = post.select("a.post_title").first(); Element hubs = post.select("div.hubs").first(); Element date = post.select("div.published").first(); Element author = post.select("div.author > a").first(); Element comments = post.select("div.comments > span.all").first(); Element score = post.select("span.score").first(); postsData.setTitle(postTitle.text()); postsData.setUrl(postTitle.attr("abs:href")); postsData.setHubs(hubs.text()); postsData.setDate(date.text()); postsData.setAuthor(author != null ? author.text() : ""); postsData.setComments(comments != null ? comments.text() : "0"); postsData.setScore(score.text()); data.add(postsData); } } catch (IOException e) { } return data; }
From source file:net.meiolania.apps.habrahabr.fragments.qa.loader.QaCommentsLoader.java
@Override public ArrayList<CommentsData> loadInBackground() { ArrayList<CommentsData> data = new ArrayList<CommentsData>(); try {/*from w w w .j a va2 s. c om*/ Document document = Jsoup.connect(url).get(); Elements answers = document.select("div.answer"); for (Element answer : answers) { CommentsData commentsData = new CommentsData(); Element name = answer.select("a.username").first(); Element message = answer.select("div.message").first(); Element linkToComment = answer.select("a.link_to_comment").first(); Element score = answer.select("span.score").first(); commentsData.setUrl(linkToComment.attr("abs:href")); commentsData.setAuthor(name.text()); commentsData.setAuthorUrl(name.attr("abs:href")); commentsData.setComment(message.text()); commentsData.setLevel(0); commentsData.setScore(score.text()); data.add(commentsData); Elements comments = answer.select("div.comment_item"); for (Element comment : comments) { commentsData = new CommentsData(); name = comment.select("span.info > a").first(); message = comment.select("span.text").first(); commentsData.setUrl(linkToComment.attr("abs:href")); commentsData.setAuthorUrl(name.attr("abs:href")); commentsData.setAuthor(name.text()); commentsData.setComment(message.text()); commentsData.setLevel(1); commentsData.setScore(""); data.add(commentsData); } } } catch (IOException e) { } return data; }