2016-09-20 2 views
0

Ich habe ein Java-Programm von Scraping geschrieben und ich möchte es automatisieren, um das Scraping jeden Tag zu einer bestimmten Zeit auszuführen.Wie automatisiere ich ein Java-Programm

Dies ist der Code

private static class DateObject{ 

     private Double taxes; 
     private Double price; 
     private Double htPrice; 

     public DateObject(Double price, Double htPrice, Double taxes){ 
      this.taxes = taxes; 
      this.price = price; 
      this.htPrice = htPrice; 
     } 

     public Double getTaxes() { 
      return taxes; 
     } 

     public Double getPrice() { 
      return price; 
     } 

     public Double getHtPrice() { 
      return htPrice; 
     } 
    } 

    public static void main(String[] args) { 

     Map<String, DateObject> prices = new TreeMap<String, DateObject>(); 
     File f = new File(System.getProperty("user.home") + "\\Desktop\\Test.xls"); 

     WritableWorkbook myexcel = null; 

     try { 

      myexcel = Workbook.createWorkbook(f); 
      WritableSheet mysheet = myexcel.createSheet("AirFrance ", 0); 

      Response response = Jsoup 
        .connect("http://www.airfrance.fr/vols/paris+tunis") 
        .userAgent("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36") 
        .method(Method.GET) 
        .timeout(2000) 
        .execute(); 

      Document doc = Jsoup 
        .connect("http://www.airfrance.fr/FR/fr/local/vols/getInstantFlexNewCalendar.do?idMonth=10&itineraryNumber=1") 
        .cookies(response.cookies()) 
        .timeout(2000) 
        .userAgent("Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.82 Safari/537.36") 
        .referrer("http://www.airfrance.fr/vols/paris+tunis").get(); 

      JSONObject obj = (JSONObject) new JSONParser().parse(doc.text()); 

      JSONArray dates = (JSONArray) obj.get("days"); 

      JSONObject dateObject; 

      for(Object o : dates){ 
       if (o instanceof JSONObject) { 
        dateObject = ((JSONObject)o); 
        prices.put(dateObject.get("dallasDate").toString(), new DateObject((Double)dateObject.get("price"), (Double)dateObject.get("HTprice"), (Double)dateObject.get("taxes"))); 
       } 
      } 

      addLabel(mysheet, 0, 0, "Date"); 
      addLabel(mysheet, 1, 0, "Prix [€]"); 
      addLabel(mysheet, 2, 0, "PrixHt [€]"); 
      addLabel(mysheet, 3, 0, "Taxes [€]"); 

      int rowIndex = 1; 
      DateObject date; 

      for (String key : prices.keySet()) { 
       date = prices.get(key); 
       addLabel(mysheet, 0, rowIndex, key); 
       addLabel(mysheet, 1, rowIndex, ""+date.getPrice()); 
       addLabel(mysheet, 2, rowIndex, ""+date.getHtPrice()); 
       addLabel(mysheet, 3, rowIndex, ""+date.getTaxes()); 
       rowIndex++; 
      } 

     myexcel.write(); 

     System.out.println("Scraping finished without errors."); 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } catch (WriteException e) { 
      e.printStackTrace(); 
     } finally { 
      try { 
       myexcel.close(); 
      } catch (WriteException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 

    private static void addLabel(WritableSheet sheet, int column, int row, String s) 
      throws WriteException, RowsExceededException { 
     Label label; 
     label = new Label(column, row, s); 
     sheet.addCell(label); 
    } 

und ich möchte auch eine Fehler Mail erhalten, wenn die Verschrottung schief gelaufen ist. Jede Hilfe bitte

+0

"Ich habe geschrieben". Bist du dir da sicher? –

Antwort

0

Es gibt viele Möglichkeiten, dies zu erreichen. Cron jobs zum Beispiel: Diese können zu einem bestimmten Zeitpunkt jeden Tag (oder jede Stunde oder jeden Monat) laufen. Wenn es jedoch um die Fehlerberichterstattung über fehlgeschlagene Cron-Jobs geht, erfordert dies etwas fortgeschritteneres Know-how im * nix-Bereich, an dem Sie zu diesem Zeitpunkt vielleicht nicht interessiert sind.

Java selbst verfügt über eine Reihe von Scheduler-Frameworks, die Ihre Jobs regelmäßig ausführen können. Quartz Scheduler ist eins. Und während ich es noch nicht ausprobiert habe, ist Obsidian Scheduler ein anderer, den einige meiner Kollegen mir kürzlich als Ersatz für Quartz brachten. Aber diese Namen sind nur Anekdoten und ihre Lebensfähigkeit unterliegt Veränderungen im Laufe der Zeit. Es genügt zu sagen, dass diese Dinge bereits für Sie erstellt wurden, um sie als Bibliotheken von Drittanbietern zu verwenden, und Sie sollten sie recherchieren, um herauszufinden, welches für Sie am besten ist.

+0

Sollte ich meinen Code in JAR-Datei bereitstellen? –

0

Führen Sie es unter einer crontab.

Wie für eine Fehler-E-Mail ... das ist eine ganz andere Frage und es liegt an Ihnen.

+0

Ich verwende Windows –

+0

@hamzaelhadj dann google "crontab für Windows" oder etwas – djechlin

+0

Danke @djechlin –

Verwandte Themen