Skip to content

Instantly share code, notes, and snippets.

@ninnemana
Created October 24, 2014 19:28
Show Gist options
  • Save ninnemana/96667893c810e16d0886 to your computer and use it in GitHub Desktop.
Save ninnemana/96667893c810e16d0886 to your computer and use it in GitHub Desktop.
Aries Image Import
package main
import (
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"log"
"net/http"
"strconv"
"strings"
)
var (
ConnString = "root:@tcp(127.0.0.1:3306)/AriesAuto?parseTime=true&loc=America%2FChicago"
Postfixes = []string{"a", "b", "c", "d", "e", "f", "va", "vb", "vc", "vd", "ve", "vf"}
)
type Size struct {
ID int
Size string
Height int
Width int
Dimensions string
}
func main() {
sizes, err := GetAllSizes()
if err != nil {
panic(err)
}
parts, err := GetPartNumbers()
if err != nil {
panic(err)
}
db, err := sql.Open("mysql", ConnString)
if err != nil {
panic(err)
}
defer db.Close()
for partID, old := range parts {
for _, size := range sizes {
for _, postfix := range Postfixes {
path := fmt.Sprintf("http://www.curtmfg.com/masterlibrary/01ARIES/%s/images/%s_%s_%s.jpg", old, old, size.Dimensions, postfix)
if err := validateImage(path); err == nil {
// log.Println(fmt.Sprintf("insert into PartImages(sizeID, sort, path, height, width, partID) values(%d, '%s', '%s', %d, %d, %d)", size.ID, postfix, path, size.Height, size.Width, partID))
_, err := db.Exec(fmt.Sprintf("insert into PartImages(sizeID, sort, path, height, width, partID) values(%d, '%s', '%s', %d, %d, %d)", size.ID, postfix, path, size.Height, size.Width, partID))
if err != nil {
log.Println(err)
}
}
}
}
}
}
func validateImage(path string) error {
client := &http.Client{}
req, err := http.NewRequest("HEAD", path, nil)
if err != nil {
return err
}
resp, err := client.Do(req)
if err != nil {
return err
}
if resp.StatusCode != 200 {
return fmt.Errorf("error: %s doesn't exist", path)
}
return nil
}
func GetAllSizes() ([]Size, error) {
var sizes []Size
db, err := sql.Open("mysql", ConnString)
if err != nil {
return sizes, err
}
defer db.Close()
rows, err := db.Query("select sizeID, size, dimensions from PartImageSizes order by size")
if err != nil {
return sizes, err
}
defer rows.Close()
for rows.Next() {
var size Size
if err := rows.Scan(&size.ID, &size.Size, &size.Dimensions); err == nil {
dimArr := strings.Split(size.Dimensions, "x")
if len(dimArr) == 2 {
size.Width, _ = strconv.Atoi(dimArr[0])
size.Height, _ = strconv.Atoi(dimArr[1])
}
sizes = append(sizes, size)
}
}
return sizes, nil
}
func GetPartNumbers() (map[int]string, error) {
numbers := make(map[int]string, 0)
db, err := sql.Open("mysql", ConnString)
if err != nil {
return numbers, err
}
defer db.Close()
rows, err := db.Query("select partID, oldPartNumber from Part order by partID")
if err != nil {
return numbers, err
}
defer rows.Close()
for rows.Next() {
var old string
var partID int
if err := rows.Scan(&partID, &old); err == nil {
numbers[partID] = old
}
}
return numbers, nil
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment