diff --git a/weapon-md b/weapon-md new file mode 100755 index 0000000..a00935a Binary files /dev/null and b/weapon-md differ diff --git a/weapon-md.go b/weapon-md.go new file mode 100644 index 0000000..4c64505 --- /dev/null +++ b/weapon-md.go @@ -0,0 +1,79 @@ +package main + +import ( + "flag" + "fmt" + "golang.org/x/net/html" + "io" + "net/http" + "net/url" + "strings" +) + +/* +template +| [WebHackersWeapons](https://github.com/hahwul/WebHackersWeapons) | template | ![](https://img.shields.io/github/stars/hahwul/WebHackersWeapons) | ![](https://img.shields.io/github/languages/top/hahwul/WebHackersWeapons) | ![](https://img.shields.io/github/repo-size/hahwul/WebHackersWeapons)
![](https://img.shields.io/github/license/hahwul/WebHackersWeapons)
![](https://img.shields.io/github/forks/hahwul/WebHackersWeapons)
![](https://img.shields.io/github/watchers/hahwul/WebHackersWeapons) | +*/ + +func isTitleElement(n *html.Node) bool { + return n.Type == html.ElementNode && n.Data == "title" +} + +func traverse(n *html.Node) (string, bool) { + if isTitleElement(n) { + return n.FirstChild.Data, true + } + + for c := n.FirstChild; c != nil; c = c.NextSibling { + result, ok := traverse(c) + if ok { + return result, ok + } + } + + return "", false +} + +func GetHtmlTitle(r io.Reader) (string, bool) { + doc, err := html.Parse(r) + if err != nil { + panic("Fail to parse html") + } + + return traverse(doc) +} + +func main() { + repourl := flag.String("url", "", "github / gitlab / bitbucket url") + first := flag.Bool("isFirst", false, "if you add new type, it use") + flag.Parse() + if flag.NFlag() == 0 { + flag.Usage() + return + } + u, err := url.Parse(*repourl) + if err != nil { + panic(err) + } + + //fmt.Println(u.Path) + name := strings.Split(u.Path, "/")[2] + //fmt.Println(name) + desc := "asdf" + resp, err := http.Get(*repourl) + if err != nil { + panic(err) + } + defer resp.Body.Close() + + if title, ok := GetHtmlTitle(resp.Body); ok { + desc = strings.Split(string(title), ": ")[1] + } else { + println("Fail to get HTML title") + } + if *first { + fmt.Println("| Name | Description | Popularity | Language | Metadata |") + fmt.Println("| ---------- | :---------- | :----------: | :----------: | :----------: |") + } + fmt.Println("| [" + name + "](" + *repourl + ") | " + desc + " | ![](https://img.shields.io/github/stars" + u.Path + ") | ![](https://img.shields.io/github/languages/top" + u.Path + ") | ![](https://img.shields.io/github/repo-size" + u.Path + ")
![](https://img.shields.io/github/license" + u.Path + ")
![](https://img.shields.io/github/forks" + u.Path + ")
![](https://img.shields.io/github/watchers" + u.Path + ") |") +}