🎉 Initial implementation using fyne v1

This commit is contained in:
2021-03-06 11:30:44 +01:00
commit 7ba3870676
75 changed files with 1577 additions and 0 deletions

8
internal/scraper/go.mod Normal file
View 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
View 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=

View 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)
}