@@ -16,43 +16,65 @@ package main
1616import (
1717 "bufio"
1818 "encoding/json"
19+ "flag"
1920 "fmt"
2021 "io"
2122 "log"
2223 "net/http"
24+ _url "net/url"
2325 "os"
26+ "strings"
2427
2528 "github.com/dyatlov/go-opengraph/opengraph"
2629)
2730
28- func printHelp () {
29- fmt .Printf ("Usage: %s <url>\n " , os .Args [0 ])
30- os .Exit (0 )
31- }
31+ const appVersion = "1.0.1"
3232
3333func main () {
34+ version := flag .Bool ("v" , false , "prints current opengraph version" )
35+ url := flag .String ("url" , "" , "fetch url and extract OpenGraph info from there" )
36+ flag .Parse ()
37+
38+ if * version {
39+ fmt .Println (appVersion )
40+ return
41+ }
42+
43+ // allow url to be provided without flag too, by default
44+ if * url == "" && flag .NArg () == 1 {
45+ * url = flag .Arg (0 )
46+ }
47+
48+ if * url != "" {
49+ u , err := _url .ParseRequestURI (* url )
50+ if err != nil {
51+ log .Fatalf ("Error parsing url: %s\n " , err )
52+ } else if ! strings .HasPrefix (u .Scheme , "http" ) {
53+ log .Fatal (u .Scheme )
54+ log .Fatalf ("URL should have http(s) protocol: %s\n " , * url )
55+ }
56+ }
57+
3458 var reader io.Reader
3559
36- if len (os .Args ) == 2 {
37- url := os .Args [1 ]
38- resp , err := http .Get (url )
60+ if * url != "" {
61+ resp , err := http .Get (* url )
3962 if err != nil {
40- log .Fatalf ("Error while fetching url %s: %s" , url , err )
63+ log .Fatalf ("Error while fetching url %s: %s" , * url , err )
4164 }
4265
4366 reader = resp .Body
4467
4568 defer resp .Body .Close ()
46- } else if len ( os . Args ) == 1 {
69+ } else {
4770 fi , _ := os .Stdin .Stat ()
4871 if (fi .Mode () & os .ModeCharDevice ) == 0 {
4972 // pipe
5073 reader = bufio .NewReader (os .Stdin )
5174 } else {
52- printHelp ()
75+ flag .Usage ()
76+ return
5377 }
54- } else {
55- printHelp ()
5678 }
5779
5880 og := opengraph .NewOpenGraph ()
0 commit comments