2013-02-13 14 views
5

Sto lavorando a un progetto che richiede di utilizzare le informazioni sui tempi di attesa del confine forniti dalla Canadian Border Patrol sul loro website per creare una rappresentazione visiva della distribuzione del tempo di attesa .Scrittura di uno script in Java che richiede regolarmente dati da un sito Web

Sto cercando di trovare un modo per avere uno script Java controllare regolarmente il sito Web ed estrarre le informazioni in alcune diverse stazioni di confine (non tutte). Suppongo che userò XPath per ottenere le stazioni specifiche, ma come faccio a caricare la pagina web su base regolare?

(PS So che hanno un account su Twitter anche adesso, ma aggiornano una volta al giorno e più specificamente mi piacerebbe imparare a lavorare con i siti web e XPath)

+0

in pratica devi implementare AJAX con un codice timer. Sarà molto facile da implementare usando la libreria jQuery. AJAX funzionerà per te se hai accesso API al sito web in questione. Oppure devi creare una soluzione di backend per raschiare i dati da quel sito web –

+0

Vuoi dire Javascript, non Java, giusto? Se è così, per favore aggiusta il tag. –

+0

No, intendo Java – CodyBugstein

risposta

4

Ok ho avuto un po 'di tempo il via oggi a lavoro e ho pensato di dare un aiuto e scrivere per voi. Scusami per eventuali errori è la prima volta che ho analizzato un sito, ho fatto una piccola ricerca e ho deciso di usare jSoup per questo.

Ok questo codice analizzare la tabella e il sistema le 3 colonne con i valori, è possibile modificare il codice e costruire entro le vostre esigenze :)

È necessario scaricare il vaso jsoup Download jSoup

import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import java.util.Iterator; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; /** * */ public class ParseWithJsoup{ public static void main(String[] args) { URL url; try { url = new URL("http://www.cbsa-asfc.gc.ca/bwt-taf/menu-eng.html"); URLConnection conn = url.openConnection(); BufferedReader buffRead = new BufferedReader(new InputStreamReader(conn.getInputStream())); StringBuffer buffer = new StringBuffer(""); String inputLine = ""; // Append the site in a buffer while (inputLine != null){ inputLine = buffRead.readLine(); buffer.append(inputLine); } Document doc = Jsoup.parse(buffer.toString()); // Parse the table Element table = doc.select("table[class=bwt]").first(); //Office elements iterator Iterator<Element> officeElements = table.select("td[headers=Office]").iterator(); //Commercial Flow iterator Iterator<Element> comElements = table.select("td[headers=Com ComCanada]").iterator(); //Travellers Flow iterator Iterator<Element> travElements = table.select("td[headers=Trav TravCanada]").iterator(); // Iterate all elements through first element row for all columns while(officeElements.hasNext()){ System.out.println("Office: " + officeElements.next().text()); System.out.println("Commercial Flow: " + comElements.next().text()); System.out.println("Travellers Flow: " + travElements.next().text()); } } catch (Exception e){ System.out.println("Exc:"+e.getMessage()); } } }

`

0

assomiglia Ajax utilizzando setInterval("function()",x)

fare riferimento a questa domanda - Repeat jQuery ajax call

non ho trovato il tempo di imparare node.js ma questo Loos come qualcosa che sarebbe ben si adatta ad esso

4

utilizzare l'URL in Jav un. Crea l'URL e utilizza il suo metodo .openConnection() per iniziare a leggere dal sito web.

import java.io.BufferedReader; 
import java.io.InputStreamReader; 
import java.net.URL; 
import java.net.URLConnection; 


public class webVisitor { 


    public static void main(String[] args) { 

     URL url; 

     try { 

      url = new URL("http://seinfeldaudio.com"); 
      URLConnection conn = url.openConnection(); 

      BufferedReader buffRead = new BufferedReader(new InputStreamReader(conn.getInputStream())); 

      String inputLine = ""; 

      while (inputLine != null){ 
       inputLine = buffRead.readLine(); 
       System.out.println(inputLine); 
      } 


     } 
     catch (Exception e){ 

     } 

    } 

} 

Maggiori informazioni qui: http://www.mkyong.com/java/how-to-get-url-content-in-java/

+1

Quindi hai risposto alla tua domanda e l'hai selezionata come risposta? – happybuddha

+0

In ogni caso, sarà necessario anche un qualche tipo di meccanismo di push per aggiornare l'interfaccia utente con i nuovi dati. Si consiglia di guardare le notifiche push Comet per lo stesso. – happybuddha

+0

@happybuddha Ya fondamentalmente. Ci è voluto molto tempo per ottenere una risposta, quindi ho tirato fuori un libro e ne ho tratto la maggior parte.Stackoverflow dà il benvenuto agli OP rispondendo alle proprie domande tra – CodyBugstein

0

Utilizzare il DWR (Easy Ajax for Java), chiamare il metodo DWR dal java script impostando l'intervallo di tempo come

setInterval(DWR function here , millisec, lang) 

In Java, utilizzare la classe java.net.URL per leggere e analizzare il contenuto come richiesto.

Problemi correlati