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 + ") |")
+}