Multiples scannen von URL's

Ich möchte gerne folgendes GO Skript nach Java porten:
package main

`import (
“bytes”
“encoding/xml”
“fmt”
“io/ioutil”
“net/http”
“os/exec”
“regexp”
)

type Jdk struct {
Url string
Ver string
update string
}

func main() {
resp, err := http.Get(“http://www.oracle.com/technetwork/java/javase/downloads/index.html”)
if err != nil {
fmt.Printf("Error on http Get: %v
", err)
return
}
bodyb, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Printf("QueriesForOwner: error in ReadAll: %v
", err)
return
}
br := bytes.NewBuffer(bodyb)
jdkre, err := regexp.Compile(h3[^ ]+(/technetwork/java/javase/downloads/(jdk(?:6|7)(?:u(\d+))?)-downloads-\d+\.html))
if err != nil {
fmt.Printf("extract: error in regexp compilation: %v
", err)
return
}
jdks := jdkre.FindAllSubmatch(br.Bytes(), -1)
jdk7 := Jdk{string(jdks[0][4]), string(jdks[0][5]), string(jdks[0][6])}
jdk6 := Jdk{string(jdks[1][7]), string(jdks[1][8]), string(jdks[1][9])}
fmt.Printf(“Jdk7: %v
Jdk6: %v
“, jdk7, jdk6)
jver, err := exec.Command(“java”, “-version”).CombinedOutput()
if err != nil {
fmt.Printf(”*ExitError from java -version:”, err)
return
}
fmt.Println(“JVer: '”, string(jver), “’”)
jverre, err := regexp.Compile(1.(\d).\d(?:_(\d+))")
jvers := jverre.FindSubmatch(jver)
jj := string(jvers[0])
jv := string(jvers[1])
ju := string(jvers[2])
jdk := jdk6
if jv == “7” {
jdk = jdk7
}
if jdk.update != ju {
fmt.Println("Local JDK NOT up-to-date: you have ", jj, ", Oracle has ", jdk.Ver)
} else {
fmt.Println("Local JDK up-to-date: you have ", jj, “, equals to Oracle, which has”, jdk.Ver)
}
}`

Nur weiss ich jetzt nicht wie der Teil mit dem Regex geht, welches alle möglichen URL-Variationen ermittelt und diese dann vergleicht.
Hoffe jemand kann mir hier helfen.

Schau dir mal [JAPI]Pattern[/JAPI] und [JAPI]Matcher[/JAPI] an, evtl sind die group()-Methoden von zweiterem das was du sucht.

Gruß

Ja klar das schon klar :smiley:
Nur will ich ja die URL’s scannen und weis halt nicht on ich was wichtiges beachten muss wenn ich über alle Möglichkeiten „iterieren“ will.

Das Go-Skript scheint noch aus der Zeit zu sein, als es ein Java6 zum laden gab. Also auf dieser Seite.

Ich habs mal nach Java portiert und dabei ist das herausgekommen.

import java.net.URL;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.*;

public class Updater {

    private static class Java{
	String version;
	String update;
	public String toString(){
	    return String.format("%su%s", version, update);
	}
	public boolean equals(Object o){
	    if(o != null && o.getClass() == Java.class){
		Java j = (Java) o;
		return j.version == version && j.update == update; 
	    } 
	    return false;
	}
    }
    
    private static Pattern p = Pattern.compile("<h3 id=\"javasejdk\">Java SE (\\d+)u(\\d+)</h3>");
    private static Pattern pCL = Pattern.compile("java version \"\\d+.(\\d+).0_(\\d+)\"");

    public static Java installedJava() throws Exception {
	Process child = Runtime.getRuntime().exec("java -version");
	Scanner scanner = new Scanner(child.getErrorStream());
	while(scanner.hasNextLine()){
	    String l = scanner.nextLine();
	    Matcher m = pCL.matcher(l);
	    if(m.find()){
		Java j = new Java();
		j.version = m.group(1);
		j.update = m.group(2);
		return j;
	    }
	}
	return null;
    }

    public static Java fromOracle() throws Exception {
	URL url = new URL("http://www.oracle.com/technetwork/java/javase/downloads/index.html");
	Scanner scanner = new Scanner(url.openStream());

	while(scanner.hasNextLine()){
	    String line = scanner.nextLine();
	    Matcher m = p.matcher(line);
	    
	    while(m.find()){
		Java j = new Java();
		j.version = m.group(1);
		j.update = m.group(2);
		return j;
	    }
	    
	}
	return null;
    }
    
    public static void main(String[] args) throws Exception {
	Java installed = installedJava();
	Java fromOracle = fromOracle();
	
	System.out.printf("Installed Java	%s%nAvailable Java	%s%n",installed,fromOracle);
    }
}

Funktioniert das Script nicht mehr, dann hat sich was auf der Page geändert, was wohl mit einer neuen Version einhergeht. Dann kann auch das Script aktualisiert werden.

Nach einiger Arbeit habe ich es auch geschafft, nur hat sich die Seite echt geändert denn das GO Pattern iat nicht mehr aktuel u d die Updates werdeb nicht mehr angezeigt, sondern nur noch jdk7(anstatt jdk7_40)

Und danke :smiley: