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.")
}

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

(0)

相关推荐

  • django通过ajax发起请求返回JSON格式数据的方法

    本文实例讲述了django通过ajax发起请求返回JSON格式数据的方法.分享给大家供大家参考.具体实现方法如下: 这是后台处理的: def checkemail(request): user = None if request.POST.has_key('email'): useremail = request.POST['email'] result = {} user = User.objects.filter(useremail__iexact = useremail) if user:

  • 利用Golang解析json数据的方法示例

    本文主要给大家介绍的是关于Golang解析json数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 使用 Golang 解析 json 数据,这种 json 格式是对象的数组,官方文档有一个示例: var jsonBlob = []byte(`[ {"Name": "Platypus", "Order": "Monotremata"}, {"Name": "Quoll

  • 关于go语言载入json可能遇到的一个坑

    问题简介 Go语言是一个简单却蕴含深意的语言,大家都知道go语言标准库汇总内置了对 json 文件的处理,非常方便,最近在写一个应用的时候,需要从 json 文件中载入 配置,由于是 go 新手,忽略一个细节,导致载入内容始终为空,下面话不多说,需要的朋友们一起来看看详细的介绍: 代码演示 代码是最好的说明载体 package config type config struct{ a string `json:"a"` b string `json:"a"` } f

  • Golang中使用JSON的一些小技巧分享

    前言 有的时候上游传过来的字段是string类型的,但是我们却想用变成数字来使用. 本来用一个json:",string" 就可以支持了,如果不知道golang的这些小技巧,就要大费周章了. 参考文章: JSON and struct composition in Go 临时忽略struct字段 type User struct { Email string `json:"email"` Password string `json:"password&qu

  • Go语言对JSON进行编码和解码的方法

    本文实例讲述了Go语言对JSON进行编码和解码的方法.分享给大家供大家参考.具体如下: json已成为不同平台间传送数据的最佳方式,Golang对json的支持非常好,代码如下: 复制代码 代码如下: package main import (     "fmt"     "encoding/json" ) func main() {     // json encode     j1 := make(map[string]interface{})     j1[&

  • python读取json文件并将数据插入到mongodb的方法

    本文实例讲述了python读取json文件并将数据插入到mongodb的方法.分享给大家供大家参考.具体实现方法如下: #coding=utf-8 import sunburnt import urllib from pymongo import Connection from bson.objectid import ObjectId import logging from datetime import datetime import json from time import mktime

  • Go语言中转换JSON数据简单例子

    Go语言转换JSON数据真是非常的简单. 以EasyUI的Demo为例,将/demo/datagrid/datagrid_data1.json 拷贝到$GOPATH/src目录: JSON.go: 复制代码 代码如下: package main import (         "encoding/json"         "fmt"         "io/ioutil" ) type product struct {         Pro

  • Django返回json数据用法示例

    本文实例讲述了Django返回json数据用法.分享给大家供大家参考,具体如下: 1.前端.jQuery发送GET请求,并解析json数据.getJSON方法可参考这里. url = "http://example/?question=" + question + "&rand=" + Math.random(); $.getJSON(url, function(json){ answer = json.answer; alert(answer); });

  • 在Go语言程序中使用gojson来解析JSON格式文件

    gojson是快速解析json数据的一个golang包,你使用它可以快速的查找json内的数据 安装 go get github.com/widuu/gojson 使用简介 结构 复制代码 代码如下: type Js struct {     data interface{} } (1) func Json(data) *Js data为string类型,初始化Js结构,解析json并且return Js.data 复制代码 代码如下: json := `{"from":"e

  • 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" //"e

  • 利用Node.js批量抓取高清妹子图片实例教程

    前言 写了一个抓取图片的小玩意,分享一下. Github地址:https://github.com/focalhot/node.js-crawler (本地下载) 示例代码 //依赖模块 var fs = require('fs'); var request = require("request"); var cheerio = require("cheerio"); var mkdirp = require('mkdirp'); //目标网址 var url =

  • 深入分析WPF客户端读取高清图片卡以及缩略图的解决方法详解

    在Ftp上传上,有人上传了高清图片,每张图片大约2M.如果使用传统的BitmapImage类,然后绑定 Source 属性的方法,有些电脑在首次会比较卡,一张电脑10秒,4张大约会卡40秒. 所以我先异步的下载图片,得到downloadFileStream对象,然后绑定到BitmapImage类上.例如:System.Windows.Controls.Image photo = new Image{    Width = 100,    Height = 100,    Margin = new

  • R语言绘图技巧导出高清图方法

    上一次小仙同学分享了 facet violin plot的画法,最后还卖了个关子,给大家留了个悬念.科研文章的插图通常要求比较高,不仅要精准地展示出数据,选对图表类型,还需要简洁优美(?翻译成人话就是,同样的数据能不能多“卖”几分,就看图够不够高大上啦).小仙同学在画图的时候遇到的一个问题就是,RStudio直接导出的图,怎么这么不清晰?为什么教程里别人的图都那么清晰呢?这时候可能就有同学就会说,这还不简单,直接导出矢量图不就可以了吗? 我们来看下,RStudio可以导出的图片格式有这么几种,小

  • 详解Python静态网页爬取获取高清壁纸

    前言 在设计爬虫项目的时候,首先要在脑内明确人工浏览页面获得图片时的步骤 一般地,我们去网上批量打开壁纸的时候一般操作如下: 1.打开壁纸网页 2.单击壁纸图(打开指定壁纸的页面) 3.选择分辨率(我们要下载高清的图) 4.保存图片 实际操作时,我们实现了如下几步网页地址的访问:打开了壁纸的网页→单击壁纸图打开指定页面→选择分辨率,点击后打开最终保存目标图片网页→保存图片 在爬虫的过程中我们就尝试通过模拟浏览器打开网页的操作,一步步获得.访问网页.最后获得目标图片的下载地址,对图片进行下载保存到

  • 易语言解析音悦台MV提供超清下载地址的代码

    音悦台MV地址解析 此功能需要加载精易模块5.6 .版本 2 .支持库 exui .支持库 EThread .程序集 窗口程序集_启动窗口 .程序集变量 标清, 文本型 .程序集变量 高清, 文本型 .程序集变量 超清, 文本型 .子程序 _按钮EX1_左键单击 按钮EX2.可视EX = 假 按钮EX3.可视EX = 假 按钮EX4.可视EX = 假 .判断开始 (编辑框EX1.内容 = "") 信息框EX (, "告警 :", , "先输入MV地址才能解

  • go语言实现抓取高清图片

    看到有很多python 的,然后写了个go 的,可以抓取高清图片 getp.go 复制代码 代码如下: package main import (     "io/ioutil"     "log"     "net/http"     "os"     "regexp"     "strconv"     "strings"     "sync"

  • Python爬虫利用多线程爬取 LOL 高清壁纸

    目录 页面分析 抓取思路 数据采集 程序运行 总结 前言: 随着移动端的普及出现了很多的移动 APP,应用软件也随之流行起来. 最近又捡起来了英雄联盟手游,感觉还行,PC 端英雄联盟可谓是爆火的游戏,不知道移动端的英雄联盟前途如何,那今天我们使用到多线程的方式爬取 LOL 官网英雄高清壁纸. 页面分析 目标网站:英雄联盟 官网界面如图所示,显而易见,一个小图表示一个英雄,我们的目的是爬取每一个英雄的所有皮肤图片,全部下载下来并保存到本地. 次级页面 上面的页面我们称为主页面,次级页面也就是每一个

  • 详解Android_性能优化之ViewPager加载成百上千高清大图oom解决方案

    一.背景 最近做项目需要用到选择图片上传,类似于微信.微博那样的图片选择器,ContentResolver读取本地图片资源并用RecyclerView+Glide加载图片显示就搞定列表的显示,这个没什么大问题,重点是,点击图片进入大图浏览,比如你相册有几百张图片,也就意味着在ViewPager中需要加载几百个view,况且手机拍出来的图片都是1-2千万左右像素的高清大图(笔者手机2千万像素 也就是拍照出来的照片3888*5152),大小也有5-7个兆,ViewPager滑动不了十几张就oom了,

  • js读取json文件片段中的数据实例

    在html中利用js读取动态网站从服务器端返回的数据进行显示 1.js.html 页面 需要引入 执行jquery的js文件 <HTML> <HEAD> <META name=Generator content=EditPlus> <META name=Author content=""> <META name=Keywords content=""> <META name=Description c

随机推荐