最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

go語言讀取json并下載高清妹子圖片

 更新時間:2015年03月20日 14:29:54   投稿:hebedich  
前面我們介紹了使用python下載高清妹子圖,作為程序猿,我們當(dāng)然不能只會一種語言,今天我們就來使用go語言來讀取API來下載妹子圖吧,有需要的宅男們可以參考下。

學(xué)了一天golang,一邊看文檔一邊寫的go讀取分析json并下載圖片
json api為愛壁紙HD mac 1920x1200版本,高清妹子圖

總結(jié):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    // 設(shè)置超時時間
  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)
  }
  //根據(jù)URL文件名創(chuàng)建文件
  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() {
  //檢查并創(chuàng)建臨時目錄
  if ! isDirExist(DataRoot) {
    os.Mkdir(DataRoot, 0755);
    fmt.Println("dir %s created", DataRoot)
  }
  //生成一個數(shù)據(jù)序列,用來獲取分頁
  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下的所有數(shù)據(jù)
      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.")
}

以上就是本文的全部內(nèi)容了,希望大家能夠喜歡。

相關(guān)文章

  • golang 執(zhí)行命令行的實現(xiàn)

    golang 執(zhí)行命令行的實現(xiàn)

    本文主要介紹了golang 執(zhí)行命令行的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 關(guān)于golang中死鎖的思考與學(xué)習(xí)

    關(guān)于golang中死鎖的思考與學(xué)習(xí)

    本文主要介紹了關(guān)于golang中死鎖的思考與學(xué)習(xí),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • go語言更高精度的Sleep實例解析

    go語言更高精度的Sleep實例解析

    這篇文章主要為大家介紹了go語言更高精度的Sleep實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • 簡單了解Go語言中函數(shù)作為值以及函數(shù)閉包的使用

    簡單了解Go語言中函數(shù)作為值以及函數(shù)閉包的使用

    這篇文章主要介紹了簡單了解Go語言中函數(shù)作為值以及函數(shù)閉包的使用,是golang入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • go實現(xiàn)一個內(nèi)存緩存系統(tǒng)的示例代碼

    go實現(xiàn)一個內(nèi)存緩存系統(tǒng)的示例代碼

    本文主要介紹了go實現(xiàn)一個內(nèi)存緩存系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-10-10
  • Go中時間與時區(qū)問題的深入講解

    Go中時間與時區(qū)問題的深入講解

    go語言中如果不設(shè)置指定的時區(qū),通過time.Now()獲取到的就是本地時區(qū),下面這篇文章主要給大家介紹了關(guān)于Go中時間與時區(qū)問題的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • RabbitMq如何做到消息的可靠性投遞

    RabbitMq如何做到消息的可靠性投遞

    現(xiàn)在的一些互聯(lián)網(wǎng)項目或者是高并發(fā)的項目中很少有沒有引入消息隊列的。 引入消息隊列可以給這個項目帶來很多的好處,這篇文章主要為大家介紹了RabbitMq如何做到消息的可靠性投遞,有需要的朋友可以借鑒參考下
    2022-12-12
  • 詳解如何在Golang中實現(xiàn)CORS(跨域)

    詳解如何在Golang中實現(xiàn)CORS(跨域)

    很多時候,需要允許Web應(yīng)用程序在不同域之間(跨域)實現(xiàn)共享資源,本文將簡介跨域、CORS的概念,以及如何在Golang中如何實現(xiàn)CORS,文中有詳細的示例代碼,需要的朋友可以參考下
    2023-10-10
  • golang時間處理工具箱now的使用詳解

    golang時間處理工具箱now的使用詳解

    這篇文章主要介紹了golang時間處理工具箱now的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用golang,感興趣的朋友可以了解下
    2021-02-02
  • golang 隨機數(shù)的兩種方式

    golang 隨機數(shù)的兩種方式

    本文主要介紹了golang 隨機數(shù)的兩種方式,一種是偽隨機,另一種是真隨機,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07

最新評論

巍山| 白城市| 布尔津县| 郴州市| 济阳县| 犍为县| 乐业县| 哈尔滨市| 息烽县| 克东县| 岳普湖县| 庐江县| 渝中区| 准格尔旗| 桃园市| 丰城市| 楚雄市| 葫芦岛市| 白朗县| 三江| 巧家县| 蓬安县| 旌德县| 沙河市| 措勤县| 集贤县| 洛隆县| 城固县| 文成县| 延安市| 利辛县| 青海省| 富锦市| 千阳县| 新巴尔虎左旗| 东至县| 丘北县| 门源| 宝兴县| 大城县| 池州市|