示例#1
0
// === 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], "&nbsp;", " ", -1) // des &nbsp; 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
}
示例#2
0
// === 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 !"
}
示例#3
0
// === 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)
}
示例#4
0
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)
}
示例#5
0
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)
}