🎉 Initial implementation using fyne v1
This commit is contained in:
8
internal/scraper/go.mod
Normal file
8
internal/scraper/go.mod
Normal file
@@ -0,0 +1,8 @@
|
||||
module gitmojiicons
|
||||
|
||||
go 1.15
|
||||
|
||||
require (
|
||||
github.com/PuerkitoBio/goquery v1.5.0
|
||||
golang.org/x/net v0.0.0-20190522155817-f3200d17e092 // indirect
|
||||
)
|
||||
14
internal/scraper/go.sum
Normal file
14
internal/scraper/go.sum
Normal file
@@ -0,0 +1,14 @@
|
||||
github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk=
|
||||
github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg=
|
||||
github.com/andybalholm/cascadia v1.0.0 h1:hOCXnnZ5A+3eVDX8pvgl4kofXv2ELss0bKcqRySc45o=
|
||||
github.com/andybalholm/cascadia v1.0.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190522155817-f3200d17e092 h1:4QSRKanuywn15aTZvI/mIDEgPQpswuFndXpOj3rKEco=
|
||||
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
81
internal/scraper/imagescraper.go
Normal file
81
internal/scraper/imagescraper.go
Normal file
@@ -0,0 +1,81 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/base64"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
)
|
||||
|
||||
type gitmojiEntry struct {
|
||||
Emoji string `json:"emoji"`
|
||||
Name string `json:"name"`
|
||||
}
|
||||
|
||||
type gitmojiData struct {
|
||||
Gitmojis []gitmojiEntry `json:"gitmojis"`
|
||||
}
|
||||
|
||||
const baseDir = "../../data/images"
|
||||
|
||||
func main() {
|
||||
os.RemoveAll(baseDir)
|
||||
os.MkdirAll(baseDir, 0755)
|
||||
|
||||
data := gitmojiData{}
|
||||
f, err := os.Open("../../data/gitmojis.json")
|
||||
if err != nil {
|
||||
log.Fatal("cannot open data:", err)
|
||||
}
|
||||
err = json.NewDecoder(f).Decode(&data)
|
||||
f.Close()
|
||||
if err != nil {
|
||||
log.Fatal("cannot decode gitmojis:", err)
|
||||
}
|
||||
|
||||
resp, err := http.DefaultClient.Get("https://unicode.org/emoji/charts/emoji-list.html")
|
||||
if err != nil {
|
||||
log.Fatal("cannot get emoji list:", err)
|
||||
}
|
||||
if resp.StatusCode != http.StatusOK {
|
||||
log.Fatal("unexpected status getting emoji list:", resp.StatusCode)
|
||||
}
|
||||
doc, err := goquery.NewDocumentFromReader(resp.Body)
|
||||
resp.Body.Close()
|
||||
if err != nil {
|
||||
log.Fatal("cannot parse emojis:", err)
|
||||
}
|
||||
|
||||
for _, entry := range data.Gitmojis {
|
||||
var er rune
|
||||
for _, r := range entry.Emoji {
|
||||
er = r
|
||||
break
|
||||
}
|
||||
src := findImage(doc, er)
|
||||
b, err := base64.StdEncoding.DecodeString(src)
|
||||
if err != nil {
|
||||
log.Println("cannot decode image for ", entry.Name, ": ", err)
|
||||
continue
|
||||
}
|
||||
f, err := os.Create(path.Join(baseDir, entry.Name + ".png"))
|
||||
if err != nil {
|
||||
log.Println("cannot create image for ", entry.Name, ": ", err)
|
||||
continue
|
||||
}
|
||||
f.Write(b)
|
||||
f.Close()
|
||||
}
|
||||
}
|
||||
|
||||
const imagePrefix = "data:image/png;base64,"
|
||||
|
||||
func findImage(doc *goquery.Document, emoji rune) string {
|
||||
src := doc.Find(fmt.Sprintf("img[alt='%s']", string(emoji))).AttrOr("src", "")
|
||||
return strings.TrimPrefix(src, imagePrefix)
|
||||
}
|
||||
Reference in New Issue
Block a user