Example usage for org.jsoup.nodes Element attr

List of usage examples for org.jsoup.nodes Element attr

Introduction

In this page you can find the example usage for org.jsoup.nodes Element attr.

Prototype

public String attr(String attributeKey) 

Source Link

Document

Get an attribute's value by its key.

Usage

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;
}