a simple url shortener in Go (check it out at qurl.org)
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

86 linhas
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
}