欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-15 08:17:44
学了一天golang,一边看文档一边写的go读取分析json并下载图片 json api为爱壁纸hd mac 1920x1200版本,高清妹子图 总结:go+json=...

学了一天golang,一边看文档一边写的go读取分析json并下载图片
json api为爱壁纸hd mac 1920x1200版本,高清妹子图

总结:go+json=shit

package main
import (
  "fmt"
  "io"
  "io/ioutil"
  "net/http"
  "os"
  "path/filepath"
  "strconv"
  //"encoding/json"
  "strings"
  "github.com/bitly/go-simplejson"
)
const (
  dataroot   = "./tmp/" // 存放封面图的根目录
  timeoutlimit = 10    // 设置超时时间
  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}"
)
// 壁纸类型,有编号,长宽和url
type wallpaper struct {
  pid   int
  url   string
  width  int
  height  int
}
// 将图片下载并保存到本地
func saveimage(paper *wallpaper) {
  res, err := http.get(paper.url)
  defer res.body.close()
  if err != nil {
    fmt.printf("%d http error:%s", paper.pid, err)
    return
  }
  //按分辨率目录保存图片
  dirname := dataroot + strconv.itoa(paper.width) + "x" + strconv.itoa(paper.height) + "/"
  if ! isdirexist(dirname) {
    os.mkdir(dirname, 0755);
    fmt.printf("dir %s created\n", dirname)
  }
  //根据url文件名创建文件
  filename := filepath.base(paper.url)
  dst, err := os.create(dirname + filename)
  if err != nil {
    fmt.println("%d http error:%s", paper.pid, err)
    return
  }
  // 写入文件
  io.copy(dst, res.body)
}
func isdirexist(path string) bool {
  p, err := os.stat(path)
  if err != nil {
    return os.isexist(err)
  } else {
    return p.isdir()
  }
}
func main() {
  //检查并创建临时目录
  if ! isdirexist(dataroot) {
    os.mkdir(dataroot, 0755);
    fmt.println("dir %s created", dataroot)
  }
  //生成一个数据序列,用来获取分页
  pow := make([]int, 2)
  for i := range pow {
    if (i > 0) {
      url := strings.replace(pageurl, "{pid}", strconv.itoa(i), -1);
      fmt.println(i, url);
      response, err := http.get(url)
      if( err != nil) {
        fmt.println(err)
        continue
      }
      body, _ := ioutil.readall(response.body)
      js, err := simplejson.newjson(body)
      //遍历data下的所有数据
      data := js.get("data").mustarray()
      for _, v := range data {
        v := v.(map[string]interface{})
        for kk, vv := range v {
          if(kk == "file_id") {
            //这里 vv 是一个[]interface{} json.number,不知道怎么取出值,这里用了比较傻的sprintf
            vv := fmt.sprintf("%s", vv)
            imgid,_ := strconv.atoi(vv)
            url := fmt.sprintf("http://s.qdcdn.com/c/%d,1920,1200.jpg", imgid)
            fmt.println(kk, imgid, url);
            paper := &wallpaper{imgid, url, 1920, 1200}
            saveimage(paper);
          }
        }
      }
    }
  }
  fmt.println("oh yes, all job done.")
}

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