| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
TvProgs.java_Pete_ 08.07.04 14:41 Hakee tv ohjelmat telkku.com:sta
HttpPageFetcher luokka käyttää hyväkseen täältä löytyvää kirjasto: http://www.do.org/products/parser/ Käytä näin: 1) talleta tästä kolme luokkaa omiin tiedostoihinsa 2) imuroi tarvittava kirjasto paketti (HtmlStreamTokenizer.zip), pura se ja kopio lib/arthurdo.jar tiedosto samaan hakemistoon kuin java lähdekoodit nyt pitäisi samassa hakemistossa olla tiedostot: HttpPageFetcher.java TvProgram.java TvProgs.java arthurdo.jar 3) käännä: javac -classpath ".;arthurdo.jar" TvProgs.java 4) aja: java -classpath ".;arthurdo.jar" TvProgs Programs fetched! [3] Thu Jul 08 10:10:00 EEST 2004 - TV1 -> Tv-uutiset [317] Thu Jul 08 14:15:00 EEST 2004 - TV2 -> Tohtori Ben Casey [613] Thu Jul 08 13:35:00 EEST 2004 - MTV3 -> MTV3 Chat [894] Thu Jul 08 14:00:00 EEST 2004 - Nelonen -> Sailrace-mobiilipeli [1112] Thu Jul 08 14:30:00 EEST 2004 - SubTV -> Peliputki: Polttopallo //===============================================// /* * COPYRIGHT 2004 Petri Airio * * All rights reserved. * */ import java.io.BufferedReader; import java.io.IOException; import java.io.StringReader; import java.util.Collections; import java.util.Calendar; import java.util.Enumeration; import java.util.Vector; /** * TvProgs * * $Revision: 1.1 $ * @author Petri Airio */ public class TvProgs { //~ Instance/static variables .............................................. private final static String[] CHANNELS = {"TV1", "TV2", "MTV3", "Nelonen", "SubTV"}; private Vector _programs; //~ Constructors ........................................................... //~ Methods ................................................................ public TvProgram getProgram(String channel, Calendar time) { TvProgram tp = null; for (int xx = _programs.size() - 1; xx != 0; xx--) { tp = (TvProgram) _programs.get(xx); if (tp.getChannel().equalsIgnoreCase(channel)) { Calendar cal = tp.getStartTime(); if (time.after(cal)) { return tp; } } } return null; } public TvProgram getNextProgram(String channel, TvProgram prg) { TvProgram tp = null; Enumeration eNum = _programs.elements(); boolean found = false; while (eNum.hasMoreElements()) { tp = (TvProgram) eNum.nextElement(); if (tp == prg) { found = true; break; } } if (found == true) { while (eNum.hasMoreElements()) { tp = (TvProgram) eNum.nextElement(); if (tp.getChannel().equalsIgnoreCase(prg.getChannel())) { return tp; } } } return null; } public void update() { String url = "http://www.telkku.com/ohjelmatiedot"; StringBuffer bufs[] = new StringBuffer[CHANNELS.length]; for (int xx = 0; xx < bufs.length; xx++) { bufs[xx] = new StringBuffer(); } for (int t = 0; t < 10; t++) { String urli = url + t + "0"; if (t == 0) { urli += "m"; } urli += ".shtml"; HttpPageFetcher pf = null; try { pf = new HttpPageFetcher(urli); } catch (Exception e) { System.out.println("INVALID URL: " + url); } String l = null; StringBuffer sb = null; Vector blocks = new Vector();; while (pf.hasMoreLines()) { l = pf.nextLine(); // System.out.print("'" + l + "'"); if (l.matches("\\d\\d:\\d\\d.*")) { if (sb == null) { sb = new StringBuffer(); } sb.append(l + "\n"); // System.out.println(" ADD LINE"); } else { if (sb != null) { blocks.add(sb); sb = null; // System.out.println(" TO VECTOR & NEW"); } else { // System.out.println(); } } } for (int xx = 0; xx < blocks.size(); xx++) { StringBuffer sb1 = (StringBuffer) blocks.get(xx); StringBuffer sb2 = bufs[xx % 5]; sb2.append(sb1.toString()); } } _programs = new Vector(); for (int xx = 0; xx < bufs.length; xx++) { StringBuffer sb = bufs[xx]; BufferedReader br = new BufferedReader(new StringReader(bufs[xx].toString())); int c = 0; Calendar cal = Calendar.getInstance(); cal.set(Calendar.SECOND, 0); cal.set(Calendar.MILLISECOND, 0); String l = null; int check = 0; int hh = 0, mm = 0; do { try { c++; l = br.readLine(); if (l != null) { cal = (Calendar) cal.clone(); check = hh; hh = Integer.parseInt(l.substring(0, 2)); mm = Integer.parseInt(l.substring(3, 5)); if (hh < check) { cal.roll(Calendar.DAY_OF_YEAR, 1); } cal.set(Calendar.HOUR_OF_DAY, hh); cal.set(Calendar.MINUTE, mm); String str2 = l.substring(6); TvProgram prog = new TvProgram(cal, CHANNELS[xx], str2); _programs.add(prog); } } catch (IOException e) { e.printStackTrace(); } } while (l != null); } Collections.sort(_programs); System.out.println("Programs fetched!"); } public static void main(String[] args) { TvProgs tv = new TvProgs(); tv.update(); for (int xx = 0; xx < CHANNELS.length; xx++) { TvProgram prg = tv.getProgram(CHANNELS[xx], Calendar.getInstance()); System.out.println(prg); } } } //===============================================// /* * COPYRIGHT 2004 Petri Airio * * All rights reserved. * */ import java.util.Calendar; import java.text.SimpleDateFormat; /** * TvProgram * * $Revision: 1.1 $ * @author Petri Airio */ public class TvProgram implements Comparable { //~ Instance/static variables .............................................. private static int _idCounter = 0; private static SimpleDateFormat _sdf1 = new SimpleDateFormat("HH:mm"); private static SimpleDateFormat _sdf2 = new SimpleDateFormat("dd/MM HH:mm"); private Calendar _startTime; private String _channel; private String _name; private int _id; //~ Constructors ........................................................... public TvProgram(Calendar startTime, String channel, String name) { _startTime = startTime; _channel = channel; _name = name; _id = _idCounter++; } //~ Methods ................................................................ public Calendar getStartTime() { return _startTime; } public String getChannel() { return _channel; } public String getName() { return _name; } public int getId() { return _id; } public String getTimeStr() { int day = Calendar.getInstance().get(Calendar.DAY_OF_MONTH); String dayStr = null; if (day == getStartTime().get(Calendar.DAY_OF_MONTH)) { dayStr = _sdf1.format(getStartTime().getTime()) + " "; } else { dayStr = _sdf2.format(getStartTime().getTime()) + " "; } return dayStr; } public int compareTo(Object o) { TvProgram tp = (TvProgram) o; long time1 = tp.getStartTime().getTime().getTime();; long time2 = this.getStartTime().getTime().getTime(); if (time1 == time2) { return 0; } if (time1 < time2) { return 1; } else { return -1; } // java 1.5 // return this.getStartTime().compareTo(tp.getStartTime()); } public String toString() { return "[" + _id + "] " + _startTime.getTime() + " - " + _channel + " -> " + _name; } } //===============================================// /* * COPYRIGHT 2004 Petri Airio * * All rights reserved. * */ import com.arthurdo.parser.HtmlStreamTokenizer; import com.arthurdo.parser.HtmlTag; import com.arthurdo.parser.HtmlException; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; import java.io.StringReader; import java.net.URL; import java.net.MalformedURLException; /** * Fetches pages from the web. * * HtmlStreamTokenizer library homepage: * http://www.do.org/products/parser/ * * @author Petri Airio */ public class HttpPageFetcher { //~ Instance/static variables .............................................. private boolean _flag = true; private StringBuffer _textBuffer; private StringBuffer _htmlBuffer; private String _line = null; private BufferedReader _lines; private HtmlStreamTokenizer _tok; //~ Constructors ........................................................... public HttpPageFetcher(String address) throws MalformedURLException, IOException, HtmlException { URL url = new URL(address); BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream())); _htmlBuffer = new StringBuffer(); String l = null; do { try { l = br.readLine(); } catch (IOException ex) { ex.printStackTrace(); } if (l != null) { _htmlBuffer.append(l + "\n"); } } while (l != null); _tok = new HtmlStreamTokenizer(new StringReader(_htmlBuffer.toString())); HtmlTag tag = new HtmlTag(); _textBuffer = new StringBuffer(); while (_tok.nextToken() != HtmlStreamTokenizer.TT_EOF) { int ttype = _tok.getTokenType(); if (ttype == HtmlStreamTokenizer.TT_TEXT) { // System.out.println("text: " + _tok.getStringValue()); _textBuffer.append(_tok.getStringValue()); } } HtmlStreamTokenizer.unescape(_textBuffer); reset(); } //~ Methods ................................................................ public void reset() { _lines = new BufferedReader(new StringReader(_textBuffer.toString())); _flag = true; _line = getLine(); } public StringBuffer getTextBuffer() { return _textBuffer; } public StringBuffer getHtmlBuffer() { return _htmlBuffer; } private String getLine() { String line = null; try { line = _lines.readLine(); } catch (IOException e) { _flag = false; } if (line == null) { _flag = false; } return line; } public String nextLine() { String line = _line; _line = getLine(); return line; } public boolean hasMoreLines(){ return _flag; } } |
![]() Haku
|