天天看點

C#擷取bing每日一圖的圖檔及圖檔故事(IDE為VS Code .net core)BingImage

BingImage

擷取必應每日一圖及故事
  • 擷取圖檔api:http://cn.bing.com/HPImageArchive.aspx?format=js&idx=0&n=1
    • idx參數:指擷取圖檔的時間,0(指擷取當天圖檔),1(擷取昨天照片),2(擷取前天的圖檔),最多可擷取8天前的照片。
    • n參數:指擷取圖檔的數量,n=1,指擷取一張圖檔。
    • (也可以通過别的接口,比如:Bing 桌面 API
  • 如何将json資料轉化為對象見:c# getpost
  • 通路此url後傳回的json資料如下:
{
  "images":
  [
    {"startdate":"20190107",
      "fullstartdate":"201901071600",
      "enddate":"20190108",
      "url":"/az/hprichbg/rb/RainierDawn_ZH-CN9182470816_1920x1080.jpg",
      "urlbase":"/az/hprichbg/rb/RainierDawn_ZH-CN9182470816",
      "copyright":"瑞尼爾山國家公園,美國華盛頓州 (© Stephen Matera/Tandem Stills + Motion)",
      "copyrightlink":"http://www.bing.com/search?q=%E5%9B%BD%E5%AE%B6%E5%85%AC%E5%9B%AD&form=hpcapt&mkt=zh-cn",
      "title":"",
      "quiz":"/search?q=Bing+homepage+quiz&filters=WQOskey:%22HPQuiz_20190107_RainierDawn%22&FORM=HPQUIZ",
      "wp":false,
      "hsh":"c295f026b64b45e57248218481629f4e",
      "drk":1,
      "top":1,
      "bot":1,
      "hs":[]
      }],
      "tooltips":
      {
        "loading":"正在加載...",
        "previous":"上一個圖像",
        "next":"下一個圖像",
        "walle":"此圖檔不能下載下傳用作桌面。",
        "walls":"下載下傳今日美圖。僅限用作桌面桌面。"
        }
  }
           
  • 圖檔的位址即為:必應位址+image[0].url(本例為:http://cn.bing.com/az/hprichbg/rb/RainierDawn_ZH-CN9182470816_1920x1080.jpg)
  • 擷取圖檔,并儲存至本地。
    • 這裡使用HttpClient類的GetByteArrayAsync方法。将圖檔存儲為位元組數組檔案。
    byte[] photo=null;
    //擷取圖檔位元組串
    using(var httpClient=new HttpClient())
    {
        byte[] bt=await httpClient.GetByteArrayAsync(ImageUrl);
        photo=bt;
    }
               
    • 将位元組數組存儲為檔案。也可參照文章C# Stream 和 byte[] 之間的轉換(檔案流的應用)
    public void SaveImg(byte[] photobt)
    {
        //檢視圖檔是否已經下載下傳,path為路徑
        if(File.Exists(path))
        {
            return;
        }
        //創造圖檔
        using(FileStream fileStream=new FileStream(path,FileMode.Create))
        {
            BinaryWriter binaryWriter=new BinaryWriter(fileStream);
            //寫入圖檔資訊
            binaryWriter.Write(photobt);
        }
    }
               
    • 這就是下載下傳圖檔的步驟。
  • 擷取故事:https://cn.bing.com/cnhp/coverstory
  • 傳回的json資料:
    {
    "date":"January 08",
    "title":"一個國家的靈魂之地",
    "attribute":"美國,瑞尼爾山國家公園",
    "para1":"大多數人選擇在溫暖舒适的天氣裡來這兒,但冬天的淩冽和雪景會給這裡帶來另一種驚人的美。
    在華盛頓州的瑞尼爾山國家公園(Mount Rainier National Park),冬天是享受休閑冰雪活動的好時機。
    冬季的額外好處是,這時的國家公園沒有夏季那樣擁擠的人群。在大提頓山脈的雪地上,你很容易就能看
    到成群的麋鹿和其他野生動物。或者漫步在布賴斯峽谷白雪皚皚的峰頂(高聳的紅色岩石尖頂),此刻的你
    可能會覺得冬天才是參觀這個國家公園的最佳時間。今天的桌面便是我們拍到的公園中透過雲層的日出。",
    "para2":"",
    "provider":"© Stephen Matera/Tandem Stills + Motion",
    "imageUrl":"http://hpimges.blob.core.chinacloudapi.cn/coverstory/watermark_rainierdawn_zh-cn9182470816_1920x1080.jpg",
    "primaryImageUrl":"http://hpimges.blob.core.chinacloudapi.cn/coverstory/watermark_rainierdawn_zh-cn9182470816_1920x1080.jpg",
    "Country":"美國",
    "City":"瑞尼爾山國家公園",
    "Longitude":"-121.759415",
    "Latitude":"46.853148",
    "Continent":"北美洲",
    "CityInEnglish":"Mount Rainier National Park",
    "CountryCode":"US"
    }
               
  • 反序列化處理即可,json資料處理見:如何用API擷取天氣資訊
  • 詳細請看代碼。 ?
  • 代碼下載下傳:https://github.com/xiaoxianrou8/BingImage

繼續閱讀