首页 > 编程 > Golang > 正文

go语言读取json并下载高清妹子图片

2020-04-01 19:15:10
字体:
来源:转载
供稿:网友

前面我们介绍了使用python下载高清妹子图,作为程序猿,我们当然不能只会一种语言,今天我们就来使用go语言来读取API来下载妹子图吧,有需要的宅男们可以参考下。

学了一天golang,一边看文档一边写的go读取分析json并下载图片

json api为爱壁纸HD mac 1920x1200版本,高清妹子图

总结:go+json=shit

 

 
  1. package main 
  2. import ( 
  3. "fmt" 
  4. "io" 
  5. "io/ioutil" 
  6. "net/http" 
  7. "os" 
  8. "path/filepath" 
  9. "strconv" 
  10. //"encoding/json" 
  11. "strings" 
  12. "github.com/bitly/go-simplejson" 
  13. const ( 
  14. DataRoot = "./tmp/" // 存放封面图的根目录 
  15. TimeoutLimit = 10 // 设置超时时间 
  16. PageUrl = "http://api.lovebizhi.com/macos_v4.php?a=category&spdy=1&tid=3&order=hot&color_id=3&device=105&uuid=436e4ddc389027ba3aef863a27f6e6f9&mode=0&retina=0&client_id=1008&device_id=31547324&model_id=105&size_id=0&channel_id=70001&screen_width=1920&screen_height=1200&bizhi_width=1920&bizhi_height=1200&version_code=19&language=zh-Hans&jailbreak=0&mac=&p={pid}" 
  17. // 壁纸类型,有编号,长宽和URL 
  18. type Wallpaper struct { 
  19. Pid int 
  20. Url string 
  21. Width int 
  22. Height int 
  23. // 将图片下载并保存到本地 
  24. func SaveImage(paper *Wallpaper) { 
  25. res, err := http.Get(paper.Url) 
  26. defer res.Body.Close() 
  27. if err != nil { 
  28. fmt.Printf("%d HTTP ERROR:%s", paper.Pid, err) 
  29. return 
  30. //按分辨率目录保存图片 
  31. Dirname := DataRoot + strconv.Itoa(paper.Width) + "x" + strconv.Itoa(paper.Height) + "/" 
  32. if ! isDirExist(Dirname) { 
  33. os.Mkdir(Dirname, 0755); 
  34. fmt.Printf("dir %s created/n", Dirname) 
  35. //根据URL文件名创建文件 
  36. filename := filepath.Base(paper.Url) 
  37. dst, err := os.Create(Dirname + filename) 
  38. if err != nil { 
  39. fmt.Println("%d HTTP ERROR:%s", paper.Pid, err) 
  40. return 
  41. // 写入文件 
  42. io.Copy(dst, res.Body) 
  43. func isDirExist(path string) bool { 
  44. p, err := os.Stat(path) 
  45. if err != nil { 
  46. return os.IsExist(err) 
  47. else { 
  48. return p.IsDir() 
  49. func main() { 
  50. //检查并创建临时目录 
  51. if ! isDirExist(DataRoot) { 
  52. os.Mkdir(DataRoot, 0755); 
  53. fmt.Println("dir %s created", DataRoot) 
  54. //生成一个数据序列,用来获取分页 
  55. pow := make([]int, 2) 
  56. for i := range pow { 
  57. if (i > 0) { 
  58. url := strings.Replace(PageUrl, "{pid}", strconv.Itoa(i), -1); 
  59. fmt.Println(i, url); 
  60. response, err := http.Get(url) 
  61. if( err != nil) { 
  62. fmt.Println(err) 
  63. continue 
  64. body, _ := ioutil.ReadAll(response.Body) 
  65. js, err := simplejson.NewJson(body) 
  66. //遍历data下的所有数据 
  67. data := js.Get("data").MustArray() 
  68. for _, v := range data { 
  69. v := v.(map[string]interface{}) 
  70. for kk, vv := range v { 
  71. if(kk == "file_id") { 
  72. //这里 vv 是一个[]interface{} json.Number,不知道怎么取出值,这里用了比较傻的Sprintf 
  73. vv := fmt.Sprintf("%s", vv) 
  74. imgid,_ := strconv.Atoi(vv) 
  75. url := fmt.Sprintf("http://s.qdcdn.com/c/%d,1920,1200.jpg", imgid) 
  76. fmt.Println(kk, imgid, url); 
  77. paper := &Wallpaper{imgid, url, 1920, 1200} 
  78. SaveImage(paper); 
  79. fmt.Println("oh yes, all job done."

以上就是本文的全部内容了,希望大家能够喜欢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表