Android Open Source - WineDB U P C Database Wine Scraper






From Project

Back to project page WineDB.

License

The source code is released under:

MIT License

If you think the Android project WineDB 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

package com.selesse.android.winedb.winescraper.impl;
/*  w  ww .jav  a2s  . com*/
import android.util.Log;
import com.google.common.collect.Lists;
import com.google.common.io.CharStreams;
import com.selesse.android.winedb.database.Wine;
import com.selesse.android.winedb.winescraper.WineScraper;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;

public class UPCDatabaseWineScraper implements WineScraper {
    private static final String TAG = UPCDatabaseWineScraper.class.getSimpleName();
    private String url;
    private List<Exception> errors;
    private String barcode;

    public UPCDatabaseWineScraper(String barcode) {
        this.barcode = barcode;
        url = "http://www.upcdatabase.com/item/" + barcode;
        errors = Lists.newArrayList();
    }

    @Override
    public List<Wine> scrape() {
        List<Wine> scrapedWines = Lists.newArrayList();
        try {
            URL url = new URL(getQueryUrl());
            URLConnection connection = url.openConnection();
            String rawHtml = CharStreams.toString(new InputStreamReader(connection.getInputStream()));

            Document document = Jsoup.parse(rawHtml);

            Elements table = document.select("table.data");
            // if we don't have any table data, we didn't find the wine in the UPC database
            if (table.size() == 0) {
                errors.add(new Exception("Wine was not found!"));
                return scrapedWines;
            }

            Wine wine = new Wine();
            wine.setBarcode(barcode);

            Elements rows = table.select("tr");

            // the rows in the result have 3 <td>s: 1st is key, 3rd is value
            for (Element tr : rows) {
                Elements tds = tr.select("td");
                for (int i = 0; i < tds.size(); i++) {
                    Element td = tds.get(i);
                    // set the name to the description, it is usually short enough to fit in name
                    if (td.text().contains("Description")) {
                        wine.setName(tds.get(i + 2).text());
                    } else if (td.text().contains("Country")) {
                        wine.setCountry(tds.get(i + 2).text());
                    }
                }
            }

            scrapedWines.add(wine);
        } catch (IOException e) {
            Log.e(TAG, "UPCDatabase.org threw exception : \n" + e);
            errors.add(e);
        }

        return scrapedWines;
    }

    @Override
    public String getQueryUrl() {
        return url;
    }

    @Override
    public List<Exception> getErrors() {
        return errors;
    }

    @Override
    public String getSourceName() { return "UPCDatabase"; }
}




Java Source Code List

com.google.zxing.integration.android.IntentIntegrator.java
com.google.zxing.integration.android.IntentResult.java
com.selesse.android.winedb.activity.CreateOrEditWineActivity.java
com.selesse.android.winedb.activity.SingleWineFragment.java
com.selesse.android.winedb.activity.SingleWineViewActivity.java
com.selesse.android.winedb.activity.WineCollectionPagerAdapter.java
com.selesse.android.winedb.activity.WineDB.java
com.selesse.android.winedb.activity.WineListFragment.java
com.selesse.android.winedb.async.AsyncImageLoader.java
com.selesse.android.winedb.contentprovider.WineContentProvider.java
com.selesse.android.winedb.database.FileDatabaseBackup.java
com.selesse.android.winedb.database.FileUtils.java
com.selesse.android.winedb.database.WineDatabaseHandler.java
com.selesse.android.winedb.database.Wine.java
com.selesse.android.winedb.model.RequestCode.java
com.selesse.android.winedb.model.SortOrder.java
com.selesse.android.winedb.model.WineColor.java
com.selesse.android.winedb.model.WineContextMenu.java
com.selesse.android.winedb.winescraper.AbstractWineResponse.java
com.selesse.android.winedb.winescraper.WineResponse.java
com.selesse.android.winedb.winescraper.WineScraperThread.java
com.selesse.android.winedb.winescraper.WineScraper.java
com.selesse.android.winedb.winescraper.WineScrapers.java
com.selesse.android.winedb.winescraper.impl.Semantics3Response.java
com.selesse.android.winedb.winescraper.impl.Semantics3WineScraper.java
com.selesse.android.winedb.winescraper.impl.UPCDatabaseOrgResponse.java
com.selesse.android.winedb.winescraper.impl.UPCDatabaseOrgWineScraper.java
com.selesse.android.winedb.winescraper.impl.UPCDatabaseWineScraper.java