zoukankan      html  css  js  c++  java
  • 批量下载 Bing 墙纸

    cn.bing.com 的背景图片的质量还是很高的,值得下载。

    package main
    
    import (
    	"compress/gzip"
    	"fmt"
    	"io/ioutil"
    	"log"
    	"net/http"
    	"net/url"
    	"os"
    	"path"
    	"regexp"
    	"strings"
    )
    
    var (
    	httpc = &http.Client{}
    
    	regWallpaper = regexp.MustCompile(`http://s.cn.bing.net/az/hprichbg/rb/[a-zA-z0-9_-]*_1920x1080.jpg`)
    )
    
    //判断网页是否使用 gzip 压缩,如果是则进行解压
    func ungzipRespBody(resp *http.Response) (b []byte, err error) {
    	body := resp.Body
    	if strings.Contains(resp.Header.Get("Content-Encoding"), "gzip") {
    		body, err = gzip.NewReader(resp.Body)
    		if err != nil {
    			return nil, err
    		}
    	}
    	defer body.Close()
    
    	return ioutil.ReadAll(body)
    }
    
    func setHeaders(req *http.Request) {
    	req.Header.Set("Accept-Encoding", "gzip, deflate")
    	req.Header.Set("User-Agent", "Mozilla/5.0 (Ubuntu) Chrome/38.0.2125.122")
    }
    
    //获取页面
    func HttpGet(url string) ([]byte, error) {
    	req, err := http.NewRequest("GET", url, nil) //创建 request
    	if err != nil {
    		return nil, err
    	}
    	setHeaders(req)
    
    	resp, err := httpc.Do(req) //发送请求
    	if err != nil {
    		return nil, err
    	}
    
    	return ungzipRespBody(resp)
    }
    
    //下载文件
    func Downfile(url, target string) (err error) {
    	body, err := HttpGet(url)
    	if err != nil {
    		return err
    	}
    
    	return ioutil.WriteFile(target, body, os.ModePerm)
    }
    
    func main() {
    	body, err := HttpGet("http://cn.bing.com/HPImageArchive.aspx?format=js&idx=1&n=10")
    	if err != nil {
    		log.Panic(err)
    	}
    
    	wallpaper := regWallpaper.FindAll(body, -1)
    
    	for i, wpaper := range wallpaper {
    		wStr := string(wpaper)
    
    		u, err := url.Parse(wStr)
    		if err != nil {
    			log.Print(err)
    			continue
    		}
    		filename := path.Base(u.Path)
    
    		err = Downfile(wStr, filename)
    		if err != nil {
    			log.Print(err)
    			continue
    		}
    
    		fmt.Printf("%d. Downloaded %s
    ", i, filename)
    	}
    }
    
  • 相关阅读:
    mysql2redis
    butterknife简化android开发
    加速 Gradle 构建大型 Android 项目的方法[转]
    大型项目 Gradle 的常用库和版本管理[转]
    JVM调优
    CSDN上最火的android项目
    jOOQ
    Guava库
    Android 镜像地址[持续更新中]
    The server quit without updating PID file (mysql.pid)一次意外mysql停止运行备忘录
  • 原文地址:https://www.cnblogs.com/bing-l/p/4251669.html
Copyright © 2011-2022 走看看