欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

學了一天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)
  }
  //根據(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.")
}

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

相關文章

  • 深入了解Golang中的反射機制

    深入了解Golang中的反射機制

    反射是指在程序運行時動態(tài)地檢查和修改對象的能力,在Go語言中,通過反射可以在運行時檢查變量的類型、獲取結構體字段和方法的信息,以及動態(tài)調用方法等操作,本文將帶你深入了解Golang中的反射機制,感興趣的同學可以跟著小編一起來學習
    2023-05-05
  • 淺談Go中數(shù)字轉換字符串的正確姿勢

    淺談Go中數(shù)字轉換字符串的正確姿勢

    這篇文章主要介紹了淺談Go中數(shù)字轉換字符串的正確姿勢,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • GoLang bytes.Buffer基礎使用方法詳解

    GoLang bytes.Buffer基礎使用方法詳解

    Go標準庫中的bytes.Buffer(下文用Buffer表示)類似于一個FIFO的隊列,它是一個流式字節(jié)緩沖區(qū),我們可以持續(xù)向Buffer尾部寫入數(shù)據(jù),從Buffer頭部讀取數(shù)據(jù)。當Buffer內部空間不足以滿足寫入數(shù)據(jù)的大小時,會自動擴容
    2023-03-03
  • 深入理解golang chan的使用

    深入理解golang chan的使用

    本文主要介紹了golang chan的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • go 實現(xiàn)簡易端口掃描的示例

    go 實現(xiàn)簡易端口掃描的示例

    該功能實現(xiàn)原理很簡單,就是發(fā)送socket連接(IP+端口),如果能連接成功,說明目標主機開放了某端口。當要大量掃描端口時,就需要寫并發(fā)編程了。
    2021-05-05
  • go語言實現(xiàn)同步操作項目示例

    go語言實現(xiàn)同步操作項目示例

    本文主要介紹了go語言實現(xiàn)同步操作項目示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • 利用golang實現(xiàn)pdf中自動換行的表格

    利用golang實現(xiàn)pdf中自動換行的表格

    這篇文章主要給大家介紹了如何利用golang實現(xiàn)pdf中自動換行的表格,文中通過代碼示例給大家講解的非常詳細,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • Golang通脈之map詳情

    Golang通脈之map詳情

    這篇文章主要介紹了Golang通脈之map,Go語言中提供的映射關系容器為map,其內部使用散列表(hash)實現(xiàn),map 是一種無序的鍵值對的集合。map 最重要的一點是通過 key 來快速檢索數(shù)據(jù),key 類似于索引,指向數(shù)據(jù)的值 map 是一種集合,所以可以像迭代數(shù)組和切片那樣迭代它
    2021-10-10
  • GoLang?Time時間操作函數(shù)講解

    GoLang?Time時間操作函數(shù)講解

    在日常開發(fā)中,我們避免不了時間的使用,我們可能需要獲取當前時間,然后格式化保存,也可能需要在時間類型與字符串類型之間相互轉換等。本文將會對?Go?time?包里面的常用函數(shù)和方法進行介紹,需要的可以參考一下
    2023-01-01
  • 在Go中構建并發(fā)TCP服務器

    在Go中構建并發(fā)TCP服務器

    今天小編就為大家分享一篇關于在Go中構建并發(fā)TCP服務器的文章,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10

最新評論