// === Extraction prono func extractionProno(url string) string { // url := "http://www.lyonpremiere.com/Quinte-Dimanche-27-decembre-Vincennes_a11440.html" res, err := http.Get(url) rc.Check(err) body, err := ioutil.ReadAll(res.Body) res.Body.Close() rc.Check(err) // fmt.Printf("%s\n", string(body)) bdy := fmt.Sprintf("%s\n", body) tb := strings.Split(string(bdy), "\n") prono := "" for i := 0; i < len(tb); i++ { if strings.Contains(string(tb[i]), "PRONOSTICS GRATUITS") { if strings.Contains(string(tb[i]), "...") || strings.Contains(string(tb[i]), "meta") { continue } prono = strings.Replace(tb[i], "<br />", "|", -1) break } } strProno := "" tb = strings.Split(string(prono), "|") for i, j, sel := 0, 0, false; i < len(tb); i++ { item := strings.Replace(tb[i], " ", " ", -1) // des se proméne parfois item = strings.TrimSpace(item) if item != "" { j++ fmt.Printf("%2d = %s\n", j, item) if sel || strings.HasPrefix(item, "Quinté+") { strProno += (item + "\n") } if strings.HasPrefix(item, "Ma sélection") { sel = true } } } strProno += ("\n") return strProno }
// === Extraction url du prono du jour du site lyon 1ère (www.lyonpremiere.com) --> http://www.lyonpremiere.com/Quinte-Dimanche-27-decembre-Vincennes_a11440.html func urlProno(url string) string { res, err := http.Get(url) rc.Check(err) body, err := ioutil.ReadAll(res.Body) res.Body.Close() rc.Check(err) // fmt.Printf("%s\n", string(body)) bdy := fmt.Sprintf("%s\n", body) tb := strings.Split(string(bdy), "\n") for i := 0; i < len(tb); i++ { if strings.Contains(string(tb[i]), "/Quinte-") { // <a href="/Quinte-Lundi-28-decembre-Vincennes_a11441.html"> sp := strings.Split(string(tb[i]), "\"") // 0 1 2 fmt.Printf("%s\n", string(tb[i])) return (url + sp[1]) } } return "url non trouvée !" }
// === Ajout prono func ajoutProno(fPronos, prono string) { // open files r and w file, err := os.OpenFile(fPronos, os.O_APPEND|os.O_WRONLY, 0600) rc.Check(err) defer file.Close() if _, err = file.WriteString(prono); err != nil { panic(err) } fmt.Printf("Appended into file %s\n", fPronos) }
func main() { /* {"participants":[{"nom":"VOLUTE DE CLERMONT","numPmu":1,"age":6,"sexe":"FEMELLES","race":"TROTTEUR FRANCAIS", ... {"reunions":[{"timezoneOffset":7200000,"dateReunion":1441058400000,"numOfficiel":1,"numExterne":1,"nature":"DIURNE","hippodrome":{"code":"BRA", */ flag.Parse() fjson := flag.Arg(0) // 1st argument is the json file location max, _ := strconv.Atoi(flag.Arg(1)) // [nb max de lignes à extraire] if max == 0 { max = 99999 } fmt.Println("Traitement -> " + fjson) fmt.Println("Max lines = ", max) // Fichier de sortie suffixe .01.txt ftxt := strings.Replace(fjson, ".00.json", ".01.txt", 1) // 01 Code programme if ftxt == fjson { panic("Format fichier entrée non conforme (xxxx.00.json)") } fw, err := os.Create(ftxt) rc.Check(err) defer fw.Close() line := "" ecr := 0 jsonStream, err := ioutil.ReadFile(fjson) rc.Check(err) dec := json.NewDecoder(strings.NewReader(string(jsonStream))) for { t, err := dec.Token() if err == io.EOF { break } if err != nil { log.Fatal(err) } dec.UseNumber() line += fmt.Sprintf("%T: %v", t, t) /* if dec.More() { line += fmt.Sprintf(" (more)") } */ line += fmt.Sprintf("\n") _, err = fw.WriteString(line) rc.Check(err) line = "" ecr++ if ecr == max { line = fmt.Sprintf("-- Limite atteinte --\n") break } } // Informations programme _, err = fw.WriteString("*EOF\n") rc.Check(err) cmd := fmt.Sprintf("%v\n", os.Args) _, err = fw.WriteString(cmd) rc.Check(err) fin := fmt.Sprintf("-- %d Lignes >> %s", ecr, ftxt) _, err = fw.WriteString(fin) rc.Check(err) }
func main() { flag.Parse() f_in := flag.Arg(0) // 1st argument is the json file location EXTRACTIONobjet := "" // Soit Paramètre ou premier Objet du fichier obj1 := flag.Arg(1) // Objet à extraire if obj1 != "" { EXTRACTIONobjet = obj1 fmt.Println("Extraction -> " + obj1) } else { fmt.Println("Extraction -> Premier Objet du fichier") } // Fichier de sortie suffixe .02.txt f_out := strings.Replace(f_in, ".01.txt", ".02.txt", 1) // 02 Code programme if f_out == f_in { panic("Format fichier entrée non conforme (xxxx.01.txt)") } fw, err := os.Create(f_out) rc.Check(err) defer fw.Close() ecr := 0 content, err := ioutil.ReadFile(f_in) // Mise en table de avant-00 rc.Check(err) data := strings.Split(string(content), "\n") // --- Traitement data nomObjets := make([]string, 5) // [ participants, nom, xxxxx, wwwww] nivObjets=2 -> niveaux actifs nivObjets := 0 // RUBbre de niveaux actifs (nomObjets n'est jamais remis à zéro) nivArray := 0 // Niveaux [1 [2] [2] ] rangArray := 0 // +1 aprés premier { // json.Delim: { FIRSTitem := false // string: participants attendu := "" // RUB,VAL // json.Delim: [ STARTarray -> attendu STARTobjet + FIRSTitem = true // json.Delim: { STARTobjet -> +1 rangArray si FIRSTitem=true; attendu RUB ident := "" // Table nomObjets sous la forme xxx-yyyy-zzzzz // string: RUB for nl, line := range data { /* if nl == 50 { // Pour test break } */ if line == ENDfile { fmt.Println(ENDfile) break } tl := strings.Split(line, ": ") // string: participants typ := tl[0] // string val := tl[1] // participants fmt.Println(typ + " : " + val) fmt.Println("attendu = " + attendu) switch attendu { case RUB: if line != ENDobjet && line != STARTobjet && line != STARTarray && line != ENDarray { nomObjets[nivObjets] = val // robe | { | code | 001 | ... | } // attendu : nivObjets++ // 1 2 3 4 // 1 STARTobjet attendu = VAL // 2 RUB } // 3 VAL case VAL: // 4 ENDobjet if line != STARTobjet && line != STARTarray && line != ENDarray { if obj1 == "" { EXTRACTIONobjet = val obj1 = val fmt.Println("Extraction -> " + EXTRACTIONobjet) } // Ecriture ligne ident = strings.Join(nomObjets, "|") out := fmt.Sprintf("%02d|%05d|%s|%s|%s\n", rangArray, nl, ident, typ, val) _, err = fw.WriteString(out) rc.Check(err) out = "" ecr++ nivObjets-- attendu = RUB if nivArray > 1 { // Cas ... categories [ string: QUINTE_PLUS, string: NATIONAL ] attendu = VAL // RUB nivArray=2 VAL VAL } continue } default: fmt.Println(attendu) } switch line { case STARTobjet: if FIRSTitem { rangArray++ FIRSTitem = false } attendu = RUB case ENDobjet: switch nivObjets { case 0: FIRSTitem = true case 1: fmt.Println(nomObjets[1]) default: nomObjets[nivObjets] = "" nivObjets-- } attendu = VAL case STARTarray: nivArray++ // Si > 1 Tables de niveaux 2 attendu = RUB // Cas ... categories [ string: QUINTE_PLUS, string: NATIONAL ] if nivArray == 1 { // Objet1 attendu = STARTobjet FIRSTitem = true rangArray = 0 } case ENDarray: if nivArray == 1 && nomObjets[0] == EXTRACTIONobjet { fmt.Println("Fin objet -> " + EXTRACTIONobjet) attendu = ENDfile break } if nivArray > 1 { nivArray-- } else { nomObjets[nivObjets] = "" nivObjets = 0 attendu = "" FIRSTitem = false } } if attendu == ENDfile { break } } // Informations programme _, err = fw.WriteString("*EOF\n") rc.Check(err) cmd := fmt.Sprintf("%v\n", os.Args) _, err = fw.WriteString(cmd) rc.Check(err) fin := fmt.Sprintf("-- %d Lignes >> %s", ecr, f_out) _, err = fw.WriteString(fin) rc.Check(err) fmt.Println(fin) }