practica4.Bet365.java Source code

Java tutorial

Introduction

Here is the source code for practica4.Bet365.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package practica4;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.TreeMap;
import org.apache.commons.io.FileUtils;

/**
 *
 * @author Jakub
 */
class Bet365 implements Pagina {

    @Override
    public Partido[] parser(String url) throws FileNotFoundException, MalformedURLException, IOException {
        ArrayList<Partido> resultado = new ArrayList<>();
        HashMap<String, Partido> partidos = new HashMap<>();
        TreeMap<String, String> claves = new TreeMap<>();

        File file = new File("cache365");

        if (!file.exists()) {
            FileUtils.copyURLToFile(new URL(url), file);
        }

        String contents = FileUtils.readFileToString(file);
        //String[] pageParts = contents.split("\\<h3\\>");
        String[] pageParts = contents.split("\\|");

        for (String line : pageParts) {
            String lineParts[] = line.split(";");
            claves.clear();

            for (String part : lineParts) {
                if (part.length() < 3)
                    continue;
                String key = part.substring(0, 2);
                String value = part.substring(3);
                claves.put(key, value);
            }

            if (claves.containsKey("FI")) {
                // tenemos un partido
                String idPartido = claves.get("FI");

                if (claves.containsKey("NA")) {
                    // informacion general (nombre, fecha)
                    Partido partido = new Partido();

                    String nombresStr = claves.get("NA");
                    //byte[] bytes = nombresStr.getBytes("LATIN1");
                    //nombresStr = new String(bytes, "UTF-8");

                    String nombres[] = nombresStr.split(" v ");
                    String fecha = claves.get("BC");

                    partido.equipo1 = nombres[0].trim();
                    partido.equipo2 = nombres[1].trim();
                    partido.fecha = Calendar.getInstance();
                    partido.casa = "Bet365";

                    int year = Integer.parseInt(fecha.substring(0, 4));
                    int month = Integer.parseInt(fecha.substring(4, 6)) - 1;
                    int day = Integer.parseInt(fecha.substring(6, 8));
                    int hour = Integer.parseInt(fecha.substring(8, 10));
                    int minutes = Integer.parseInt(fecha.substring(10, 12));
                    partido.fecha.set(year, month, day, hour, minutes);
                    partido.costeVictoria1 = -1;
                    partido.costeVictoria2 = -1;
                    partido.costeEmpate = -1;

                    partidos.put(idPartido, partido);
                } else {

                    String fraccion[] = claves.get("OD").split("/");
                    Partido partido = partidos.get(idPartido);

                    double valor = 1.0 + Double.parseDouble(fraccion[0]) / Double.parseDouble(fraccion[1]);

                    valor = Math.round(valor * 100.0) / 100.0;

                    if (partido.costeVictoria1 == -1) {
                        partido.costeVictoria1 = valor;
                    } else if (partido.costeEmpate == -1) {
                        partido.costeEmpate = valor;
                    } else if (partido.costeVictoria2 == -1) {
                        partido.costeVictoria2 = valor;
                        resultado.add(partido);
                        System.out.printf("%s %f %f %f %s\n", partido.equipo1, partido.costeVictoria1,
                                partido.costeEmpate, partido.costeVictoria2, partido.equipo2);
                    }

                }

            }
        }
        return resultado.toArray(new Partido[partidos.size()]);
    }

}