a simple url shortener in Go (check it out at qurl.org)
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 

86 lignes
1.5 KiB

package main
import (
"encoding/json"
"fmt"
"git.binarythought.com/cdramey/qurl/obj"
"git.binarythought.com/cdramey/qurl/storage"
"net"
"os"
"time"
)
type qurljson struct {
ID uint64 `json:"id"`
IP string `json:"ip"`
Browser string `json:"browser"`
URL string `json:"url"`
Date struct {
Date int64 `json:"$date"`
} `json:"date"`
}
func loadjson(stor storage.Storage, filename string) error {
file, err := os.Open(filename)
if err != nil {
return fmt.Errorf("Error opening %s: %s", filename, err.Error())
}
defer file.Close()
var qj []qurljson
decoder := json.NewDecoder(file)
err = decoder.Decode(&qj)
if err != nil {
return fmt.Errorf("Error parsing %s: %s", filename, err.Error())
}
fmt.Printf("Parsing %d qurls.. \n", len(qj))
var max uint64 = 0
var count uint64 = 0
for _, e := range qj {
if e.ID > max {
max = e.ID
}
q := &obj.QURL{
ID: e.ID,
URL: e.URL,
}
if e.Date.Date > 0 {
q.Created = time.Unix((e.Date.Date / 1000), 0)
}
if e.IP != "" {
q.IP = net.ParseIP(e.IP)
}
if e.Browser != "" {
q.Browser = e.Browser
}
err := q.CheckValid()
if err != nil {
fmt.Printf("\n%s\nValidation failure: %s\n", q.URL, err.Error())
continue
}
err = stor.AddQURL(q)
if err != nil {
return fmt.Errorf("AddQURL() Database error: %s", err.Error())
}
count++
if (count % 100) == 0 {
fmt.Printf("*")
}
}
err = stor.SetQURLSequence(max)
if err != nil {
return fmt.Errorf("Error setting sequence: %s", err.Error())
}
fmt.Printf("\nDone!\n")
return nil
}