• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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=categoryspdy=1tid=3order=hotcolor_id=3device=105uuid=436e4ddc389027ba3aef863a27f6e6f9mode=0retina=0client_id=1008device_id=31547324model_id=105size_id=0channel_id=70001screen_width=1920screen_height=1200bizhi_width=1920bizhi_height=1200version_code=19language=zh-Hansjailbreak=0mac=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.")
    }
    

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

    您可能感兴趣的文章:
    • Go语言中转换JSON数据简单例子
    • Go语言对JSON进行编码和解码的方法
    • 在Go语言程序中使用gojson来解析JSON格式文件
    • 使用Go语言解析动态JSON格式的方法
    • 详解Go语言RESTful JSON API创建
    • 关于go语言载入json可能遇到的一个坑
    • Go语言的JSON处理详解
    • 在Go语言中使用JSON的方法
    • Go语言结构体定义和使用方法
    • 浅谈Go语言中的结构体struct & 接口Interface & 反射
    • Go语言指针访问结构体的方法
    • go语言使用第三方包 json化结构体操作示例
    上一篇:GOLANG版的冒泡排序和快速排序分享
    下一篇:go语言制作端口扫描器
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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