Android Open Source - TorrentFreak-Reader Latest News List Provider






From Project

Back to project page TorrentFreak-Reader.

License

The source code is released under:

GNU General Public License

If you think the Android project TorrentFreak-Reader listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Copyright (C) 2013 Jack Wakefield//from   w  ww  . j a v  a2s  .com
 *
 * This file is part of TorrentFreak Reader.
 *
 * TorrentFreak Reader is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * TorrentFreak Reader is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with TorrentFreak Reader.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.torrentfreak.reader.free.articles.providers;

import java.lang.Exception;
import java.lang.Integer;
import java.util.ArrayList;
import java.util.GregorianCalendar;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.torrentfreak.reader.free.articles.ArticleItem;
import com.torrentfreak.reader.free.articles.providers.ArticleListProvider;
import com.torrentfreak.reader.free.articles.providers.exceptions.ArticleScrapeException;
import com.torrentfreak.reader.free.categories.CategoryItem;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class LatestNewsListProvider extends ArticleListProvider {
    /**
     * The date scraper.
     */
    private static final Pattern dateScraper =
        Pattern.compile(".+?-([0-9]{2})([0-9]{2})([0-9]{2})/");

    public LatestNewsListProvider(final CategoryItem category) {
        super(category);
    }

    public List<ArticleItem> scrape(final Document document) throws Exception {
        // ensure the document exists
        if (document == null) {
            throw new ArticleScrapeException("unable to parse document");
        }

        // retrieve the article elements
        final Elements articleElements = document.getElementsByTag("article");
        final List<ArticleItem> articles = new ArrayList<ArticleItem>();

        // loop through each article element
        for (final Element articleElement : articleElements) {
            ArticleItem article = null;

            try {
                // attempt to scrape the article element
                article = scrapeArticleItem(articleElement);
            } catch (final ArticleScrapeException e) {
                throw e;
            }

            // ensure the article exists
            if (article != null) {
                // add the article to the article list
                articles.add(article);
            }
        }

        return articles;
    }

    private ArticleItem scrapeArticleItem(final Element articleElement)
        throws ArticleScrapeException {
        // retrieve the title element
        final Element titleElement = articleElement.select("header h4 a").first();

        // ensure the title element exists
        if (titleElement == null) {
            throw new ArticleScrapeException("title not found");
        }

        // retrieve the comments element
        final Element commentsElement = articleElement.select("footer ul .comments a").first();

        // ensure the comments element exists
        if (commentsElement == null) {
            throw new ArticleScrapeException("comment count not found");
        }

        // retrieve the title and URL text
        final String title = titleElement.text();
        final String url = titleElement.attr("href");

        // retrieve the comment count text and strip out any character which is not numerical
        String commentCountText = commentsElement.text();
        commentCountText = commentCountText.replaceAll("[^0-9]", "");

        int commentCount = 0;

        if (commentCountText.length() > 0) {
            commentCount = Integer.parseInt(commentCountText);
        }

        final Matcher dateMatcher = dateScraper.matcher(url);
        final GregorianCalendar date = new GregorianCalendar();

        // attempt to find a match for the date from the URL
        if (dateMatcher.find()) {
            final int year = Integer.parseInt(dateMatcher.group(1)) + 2000;
            final int month = Integer.parseInt(dateMatcher.group(2)) - 1;
            final int day = Integer.parseInt(dateMatcher.group(3));

            date.set(year, month, day);
        }

        // create the article setting the details to those retrieved
        final ArticleItem article = new ArticleItem();
        article.setCategoryId(category.getId());
        article.setTitle(title);
        article.setUrl(url);
        article.setDate(date);
        article.setCommentCount(commentCount);

        return article;
    }
}




Java Source Code List

com.slidingmenu.lib.CanvasTransformerBuilder.java
com.slidingmenu.lib.CustomViewAbove.java
com.slidingmenu.lib.CustomViewBehind.java
com.slidingmenu.lib.MenuInterface.java
com.slidingmenu.lib.SlidingMenu.java
com.slidingmenu.lib.app.SlidingActivityBase.java
com.slidingmenu.lib.app.SlidingActivityHelper.java
com.slidingmenu.lib.app.SlidingActivity.java
com.slidingmenu.lib.app.SlidingFragmentActivity.java
com.slidingmenu.lib.app.SlidingListActivity.java
com.slidingmenu.lib.app.SlidingPreferenceActivity.java
com.torrentfreak.reader.free.AboutActivity.java
com.torrentfreak.reader.free.ArticleActivity.java
com.torrentfreak.reader.free.LicensesActivity.java
com.torrentfreak.reader.free.MainActivity.java
com.torrentfreak.reader.free.SettingsActivity.java
com.torrentfreak.reader.free.adapters.ArticleFragmentAdapter.java
com.torrentfreak.reader.free.adapters.ArticleListAdapter.java
com.torrentfreak.reader.free.adapters.LicenseFragmentAdapter.java
com.torrentfreak.reader.free.adapters.SlidingMenuAdapter.java
com.torrentfreak.reader.free.adapters.items.LicenseItem.java
com.torrentfreak.reader.free.adapters.items.SlidingMenuItem.java
com.torrentfreak.reader.free.adapters.views.ArticleItemView.java
com.torrentfreak.reader.free.adapters.views.SlidingMenuItemView.java
com.torrentfreak.reader.free.articles.ArticleItem.java
com.torrentfreak.reader.free.articles.ArticleStorage.java
com.torrentfreak.reader.free.articles.providers.ArticleContentProvider.java
com.torrentfreak.reader.free.articles.providers.ArticleListProvider.java
com.torrentfreak.reader.free.articles.providers.CategoryListProvider.java
com.torrentfreak.reader.free.articles.providers.LatestNewsListProvider.java
com.torrentfreak.reader.free.articles.providers.exceptions.ArticleScrapeException.java
com.torrentfreak.reader.free.articles.tasks.ArticleContentHttpTask.java
com.torrentfreak.reader.free.categories.CategoryItem.java
com.torrentfreak.reader.free.categories.CategoryManager.java
com.torrentfreak.reader.free.categories.CategoryType.java
com.torrentfreak.reader.free.fragments.ArticleCommentsFragment.java
com.torrentfreak.reader.free.fragments.ArticleContentFragment.java
com.torrentfreak.reader.free.fragments.ArticleListFragment.java
com.torrentfreak.reader.free.fragments.LicenseFragment.java
com.torrentfreak.reader.free.fragments.SlidingMenuFragment.java
com.torrentfreak.reader.free.helpers.FontHelper.java
com.torrentfreak.reader.free.helpers.WeakReferenceHelper.java
com.torrentfreak.reader.free.widgets.StackWidgetActivity.java
com.torrentfreak.reader.free.widgets.StackWidgetProvider.java
com.torrentfreak.reader.free.widgets.StackWidgetService.java
com.torrentfreak.reader.free.widgets.items.StackWidgetItem.java