a simple url shortener in Go (check it out at qurl.org)
Du kannst nicht mehr als 25 Themen auswählen Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
 
 
 

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