├── README.md └── download.go /README.md: -------------------------------------------------------------------------------- 1 | ## Install 2 | 3 | ``` 4 | go get github.com/dearplain/douding 5 | ``` 6 | 7 | ## Usage 8 | 9 | example 10 | ``` 11 | douding http://www.docin.com/p-931453357.html 12 | douding https://wenku.baidu.com/view/bb52fecf561252d381eb6e65.html 13 | ``` 14 | 15 | ## Online 16 | 17 | [在线看douding文档](http://dearplain.github.io) 18 | -------------------------------------------------------------------------------- /download.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "fmt" 6 | "io" 7 | "io/ioutil" 8 | "log" 9 | "net/http" 10 | "os" 11 | "regexp" 12 | "strings" 13 | ) 14 | 15 | type Jpgs struct { 16 | Zoom string 17 | Page int 18 | } 19 | 20 | func main() { 21 | if len(os.Args) <= 1 { 22 | fmt.Println("error: no url specified!") 23 | return 24 | } 25 | if strings.Contains(os.Args[1], "www.docin.com") { 26 | downDouding(os.Args[1]) 27 | } else if strings.Contains(os.Args[1], "wenku.baidu.com") { 28 | downWenkuPPT(os.Args[1]) 29 | } 30 | } 31 | 32 | func downWenkuPPT(url string) { 33 | 34 | regID := regexp.MustCompile("view/(.*).html") 35 | urls := regID.FindAllStringSubmatch(url, -1) 36 | 37 | docID := urls[0][1] 38 | getUrl := "https://wenku.baidu.com/browse/getbcsurl?doc_id=" + docID + "&pn=1&rn=99999&type=ppt" 39 | 40 | body, _ := downloadBuf(getUrl) 41 | 42 | regPages := regexp.MustCompile(`{"zoom":"(.*?)","page"`) 43 | pages := regPages.FindAllStringSubmatch(string(body), -1) 44 | 45 | os.Mkdir(docID, 0700) 46 | for i, p := range pages { 47 | p[1] = strings.Replace(p[1], "\\", "", -1) 48 | fmt.Println("downloading:", p[1]) 49 | body, _ := downloadBuf(p[1]) 50 | ioutil.WriteFile(docID+"/img"+fmt.Sprint(i)+".jpg", body, 0644) 51 | } 52 | fmt.Println("download complete! total:", len(pages)) 53 | } 54 | 55 | func downDouding(url string) { 56 | re := regexp.MustCompile("p-([0-9]*)") 57 | ss := re.FindStringSubmatch(url) 58 | 59 | id := ss[1] 60 | os.MkdirAll(id, 0700) 61 | for page := 1; ; page++ { 62 | buf, err := downloadBuf("http://211.147.220.164/index.jsp?file=" + id + 63 | "&width=800&pageno=" + fmt.Sprintf("%d", page)) 64 | if err != nil { 65 | fmt.Println(err) 66 | break 67 | } 68 | if len(buf) < 1024 { 69 | fmt.Println("download complete!") 70 | break 71 | } 72 | err = ioutil.WriteFile(id+"/"+fmt.Sprintf("%04d.jpg", page), buf, 0644) 73 | if err != nil { 74 | fmt.Println(err) 75 | break 76 | } 77 | } 78 | } 79 | 80 | func downloadBuf(url string) ([]byte, error) { 81 | var buffer bytes.Buffer 82 | if err := download(&buffer, url); err != nil { 83 | fmt.Println(err) 84 | return nil, err 85 | } 86 | return buffer.Bytes(), nil 87 | } 88 | 89 | func download(w io.Writer, url string) error { 90 | resp, err := http.Get(url) 91 | if err != nil { 92 | return err 93 | } 94 | defer resp.Body.Close() 95 | 96 | _, err = io.Copy(w, resp.Body) 97 | return err 98 | } 99 | 100 | func downloadA(url string) []byte { 101 | client := &http.Client{} 102 | 103 | req, err := http.NewRequest("GET", url, nil) 104 | if err != nil { 105 | log.Fatalln(err) 106 | } 107 | 108 | req.Header.Set("User-Agent", "Mozilla/5.0 (iPad; CPU OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1") 109 | 110 | resp, err := client.Do(req) 111 | if err != nil { 112 | log.Fatalln(err) 113 | } 114 | 115 | defer resp.Body.Close() 116 | body, err := ioutil.ReadAll(resp.Body) 117 | if err != nil { 118 | log.Fatalln(err) 119 | } 120 | 121 | return body 122 | } 123 | --------------------------------------------------------------------------------