Sfoglia il codice sorgente

Unpaginate all the (json) resources

Lucas Stadler 10 anni fa
parent
commit
640a4f7191
2 ha cambiato i file con 70 aggiunte e 0 eliminazioni
  1. 2 0
      go/unpaginate/.gitignore
  2. 68 0
      go/unpaginate/unpaginate.go

+ 2 - 0
go/unpaginate/.gitignore

@ -0,0 +1,2 @@
1
/unpaginate
2
/*.json

+ 68 - 0
go/unpaginate/unpaginate.go

@ -0,0 +1,68 @@
1
// `unpaginate` unpaginates json resources.
2
package main
3
4
import (
5
	"encoding/json"
6
	"flag"
7
	"fmt"
8
	"net/http"
9
	"os"
10
)
11
12
func main() {
13
	flag.Parse()
14
15
	if flag.NArg() != 1 {
16
		fmt.Printf("Usage: %s [flags] <url>\n", os.Args[0])
17
		flag.PrintDefaults()
18
		os.Exit(1)
19
	}
20
21
	url := flag.Arg(0)
22
	res, err := http.Get(url)
23
	if err != nil {
24
		fmt.Println(err)
25
		os.Exit(1)
26
	}
27
28
	decoder := json.NewDecoder(res.Body)
29
	_, err = decoder.Token()
30
	if err != nil {
31
		fmt.Println(err)
32
		os.Exit(1)
33
	}
34
35
	os.Stdout.WriteString("[\n")
36
37
	first := true
38
	for decoder.More() {
39
		if !first {
40
			os.Stdout.WriteString(", ")
41
		} else {
42
			first = false
43
		}
44
45
		var data interface{}
46
		err := decoder.Decode(&data)
47
		if err != nil {
48
			fmt.Println("decode:", err)
49
			os.Exit(1)
50
		}
51
52
		out, err := json.MarshalIndent(data, "  ", "  ")
53
		if err != nil {
54
			fmt.Println(err)
55
			os.Exit(1)
56
		}
57
58
		os.Stdout.Write(out)
59
	}
60
61
	_, err = decoder.Token()
62
	if err != nil {
63
		fmt.Println(err)
64
		os.Exit(1)
65
	}
66
67
	os.Stdout.WriteString("\n]")
68
}