HTMLParser.java 3.05 KB
package com.upc.pbe.upcnews;

import java.util.ArrayList;

import android.util.Log;

public class HTMLParser
{
	private final static String TAG = "HTMLParser";
	private ArrayList<String> resources;
	private String server;

	public HTMLParser(String u)
	{
		String host = u.substring(7);
		server = u.substring(0,host.indexOf("/")+7);
		resources = new ArrayList<String>();
	}
	
	public ArrayList<String> parse(String code)
	{
		if(!resources.isEmpty())
		{
			resources.clear();
		}
		parseDirectories(resources,code);
		parseFiles(resources,code);
		return resources;
	}

	public void parseDirectories(ArrayList<String> resources, String code)
	{
		// Separem el codi en linies
		String[] split = code.split("\n");
		/*
		 * Busquemos el tag <a>, descartando comentarios:
		 */
		for (int i = 0; i < split.length; i++)
		{
			while (split[i].startsWith("<!--"))
			{
				if (split[i++].endsWith("-->"))
				{
					break;
				}
			}
			// Posible comentario descartado
			if (split[i].indexOf("<a ") != -1) //Enlace
			{
				if (split[i].indexOf("href=") != -1) //Esto tiene buena pinta
				{
					String dirpath = split[i].substring(split[i].indexOf("href=\"") + 6); //Eliminamos morralla del principio.
					dirpath = dirpath.substring(0, dirpath.indexOf("\"")); //Quitamos la morralla del final, nos queda el valor de href sólo.
					if(dirpath.lastIndexOf("/") != -1) //Mira que sea una carpeta y no un fichero suelto.
					{
						dirpath = dirpath.substring(0,dirpath.lastIndexOf("/")+1); //Elimina parte que no es carpeta
						if(dirpath.startsWith("/"))
						{
							dirpath = server + dirpath;
						}
						if(!resources.contains(dirpath)) //No seamos repetitivos
						{
							resources.add(dirpath);
						}
						Log.d(TAG, "DIRECTORY FOUND: " + dirpath);
					}
				}
			}
		}
	}

	public void parseFiles(ArrayList<String> resources, String code)
	{
		String[] split = code.split("\n");
		for (int i = 0; i < split.length; i++)
		{
			while (split[i].startsWith("<!--"))
			{
				if (split[i++].endsWith("-->"))
				{
					break;
				}
			}
			// Posible comentario descartado
			if (split[i].contains("<a ")) //Enlace
			{
				if (split[i].contains("href=")) //Esto tiene buena pinta
				{
					String filepath = split[i].substring(split[i].indexOf("href=\"") + 6); //Eliminamos morralla del principio.
					filepath = filepath.substring(0, filepath.indexOf("\"")); //Quitamos la morralla del final, nos queda el valor de href sólo.
					if(filepath.endsWith(".m3u8")) //Mira que sea una lista.
					{
						String filename;
						//Deteccion de ficheros ocultos
						if(filepath.indexOf("/") != -1)
						{
							filename = filepath.substring(filepath.lastIndexOf("/"));
						}
						else
						{
							filename = filepath;
						}
						if(!filename.startsWith("."))
						{
							if(!resources.contains(filepath)) //No seamos repetitivos
							{
								resources.add(filepath);
							}
							Log.d(TAG, "PLAYLIST FOUND: " + filepath);
						}
					}
				}
			}
		}
	}
}