東坡下載:內(nèi)容最豐富最安全的下載站!

幫助|文件類型庫(kù)|最新更新|下載分類|排行榜

上傳下載服務(wù)器軟件遠(yuǎn)程監(jiān)控網(wǎng)絡(luò)相關(guān)主頁(yè)瀏覽主頁(yè)制作電子郵件網(wǎng)站優(yōu)化網(wǎng)絡(luò)儲(chǔ)存常用瀏覽器迅雷百度云盤

首頁(yè)網(wǎng)絡(luò)軟件上傳下載 → Easyicon圖標(biāo)批量下載工具 1.0 綠色免費(fèi)版【源碼+教程】

Easyicon圖標(biāo)批量下載工具

Easyicon圖標(biāo)批量下載工具1.0 綠色免費(fèi)版【源碼+教程】

  • 大小:106KB
  • 語(yǔ)言:中文
  • 平臺(tái):WinAll
  • 更新:2016-04-07 20:35
  • 等級(jí):
  • 類型:上傳下載
  • 網(wǎng)站:暫無(wú)
  • 授權(quán):免費(fèi)軟件
  • 廠商:
  • 產(chǎn)地:國(guó)產(chǎn)軟件
好用好玩 50%(0)
坑爹 坑爹 50%(0)
軟件介紹軟件截圖相關(guān)軟件軟件教程網(wǎng)友評(píng)論下載地址

很多程序員需要各種各樣的圖標(biāo),而easyicon.net圖標(biāo)網(wǎng)是很多人的選擇,怎樣批量下載上面的圖標(biāo)呢?小編今天帶來(lái)的Easyicon圖標(biāo)批量下載工具就能幫你批量下載easyicon的圖標(biāo),下面有詳細(xì)的下載教程,還有源碼供各位程序猿參考!

easyicon.net是提供★超過(guò)五十萬(wàn)個(gè)★PNG、ICO、ICNS格式圖標(biāo)搜索、圖標(biāo)下載服務(wù)。

Easyicon圖標(biāo)批量下載詳細(xì)教程

一、需求分析

在平時(shí)的程序開發(fā)中,為了快速搭建較為美觀的用戶界面,經(jīng)常要下載一些圖標(biāo)作為按鈕、控件等的外觀,甚至需要自己動(dòng)手制作一些特定的圖標(biāo)或圖片。自己動(dòng)力,不得不說(shuō)需要一定的技術(shù)和審美功底;下載,又得到網(wǎng)上到處找,找到一套適合主題、色彩、尺寸、美觀大方的圖標(biāo)還真是一件不容易的事。

幸好,網(wǎng)上有很多專門下載圖標(biāo)的網(wǎng)站,常用的有:

http://www.easyicon.net/

https://www.iconfinder.com/

http://www.haotu.net/

http://www.iconpng.com/

http://findicons.com/

http://www.flaticon.com/

http://www.iconspedia.com/

http://icones.pro/

這些網(wǎng)站各有各的優(yōu)點(diǎn),共同點(diǎn)是都包含大量圖標(biāo),我個(gè)人比較喜歡在EasyIcon上去搜索,下載,也很喜歡它的網(wǎng)址。它有優(yōu)點(diǎn)有:

(1)支持中英文搜索。EasyIcon支持中文和英文的搜索,當(dāng)然,它的原始圖標(biāo)名稱還是英文,只不過(guò)在搜索前,利用百度翻譯API將中文翻譯成英文,再進(jìn)行搜索。

(2)用戶體驗(yàn)好。很多網(wǎng)址在進(jìn)行瀏覽時(shí),都是需要點(diǎn)擊"下一頁(yè)"之類的按鈕,而它支持鍵盤快捷鍵,而且體驗(yàn)效果還不錯(cuò);它的界面、文字啊也比較活潑,比如按熱度排序,它優(yōu)雅的稱其為"拋頭露面的優(yōu)先"。

(3)保持更新。作為寫代碼的,我們最害怕開源的東西不再更新了,EasyIcon圖標(biāo)更新頻率還算將就。

(4)打包下載,有時(shí),我們下載的圖標(biāo)不只一個(gè),可以使用它的打包下載功能。(但此功能有一定的限制,如每一次打包下載有數(shù)量限制,且下載尺寸、格式等不便設(shè)置,這也是為什么要重新寫一個(gè)批量下載工具的原因。)

所以,總結(jié)下來(lái),我們需要一個(gè)程序,實(shí)現(xiàn)批量下載不同格式、尺寸的圖標(biāo)到本地,以便于搜索和利用。

二、方案設(shè)計(jì)

1.瀏覽器下載圖標(biāo)

設(shè)計(jì)方案并不是直接就想出來(lái),還是要根據(jù)實(shí)際來(lái)一點(diǎn)一點(diǎn)地分析、確定。我們用瀏覽器來(lái)下載一個(gè)圖標(biāo)試一試。

目標(biāo):http://www.easyicon.net/iconsearch/iconset:fatcowhosting-icons/

在這個(gè)網(wǎng)址里,包含2000個(gè)(40頁(yè))不同尺寸和格式和圖標(biāo)。fatcowhosting-icons就是這些圖標(biāo)集合的分類名稱。

單擊第一個(gè)圖標(biāo),進(jìn)入其他詳細(xì)頁(yè)面:http://www.easyicon.net/530832-Zoom_Selection_icon.html,這里我們可以看到很多參數(shù)信息。

點(diǎn)擊PNG圖標(biāo)下載,我們下載這個(gè)圖標(biāo)。(這一次的下載,就是以后代碼中最內(nèi)層循環(huán)的一段代碼。)我們看到了真實(shí)的下載地址:http://download.easyicon.net/png/530832/32/

只要我們有這個(gè)下載網(wǎng)址,無(wú)論在哪個(gè)瀏覽器或自定義程序,都可以進(jìn)行下載。

2.分析下載地址

來(lái)看每一頁(yè)的地址:

http://www.easyicon.net/iconsearch/iconset:fatcowhosting-icons/1/

fatcowhosting-icons表示圖標(biāo)集合名稱,1表示頁(yè)數(shù)

那我們來(lái)分析一下這個(gè)地址:http://download.easyicon.net/png/530832/32/

這個(gè)下載地址可分解為:固定部分+格式+圖標(biāo)編號(hào)+尺寸

再來(lái)看一下,下載需要的參數(shù):下載地址+文件保存路徑+文件名稱

綜合分析可以看出,圖標(biāo)的格式、尺寸、文件保存路徑可以由用戶指定,現(xiàn)在關(guān)鍵是缺少圖標(biāo)編號(hào)和文件名稱。

假如我們已經(jīng)知道了圖標(biāo)編號(hào),并將下載網(wǎng)址輸入到瀏覽器的地址欄中提交,瀏覽器可自動(dòng)識(shí)別出下載的文件名稱,這是為何?說(shuō)明用戶向服務(wù)器提交這個(gè)地址后,服務(wù)器返回了一些消息,其中就包括文件名稱,所以,通過(guò)某種編程方式(后面會(huì)提到,暫不用著急去查詢),可以獲取到文件名稱。

好了,現(xiàn)在唯一缺少的主是圖標(biāo)編號(hào)了。通過(guò)觀察網(wǎng)站的其他圖標(biāo),可以發(fā)現(xiàn)這些編號(hào)都是連接的,比如530832是Zoom_Selection_icon的編號(hào),而530831是Zoom_Refresh的編號(hào);再看圖標(biāo)fatcowhosting-icons集合的每一頁(yè)都是50個(gè)(最后一頁(yè)除外),我們是不可以根據(jù)每一個(gè)圖標(biāo)和最后一個(gè)圖標(biāo)的編號(hào)來(lái)獲取這個(gè)圖標(biāo)集合的所有編號(hào)?答案是肯定的。

那我們?cè)趺磥?lái)獲取第一個(gè)和最后一個(gè)的編號(hào)?如果我們又通過(guò)某種技術(shù)手段獲取到這兩上編號(hào)了……等等,如果能獲取這兩個(gè)編號(hào)了,為什么不獲取直接獲取所有編號(hào)呢?是的,通過(guò)網(wǎng)頁(yè)抓取的某種方法應(yīng)該可以獲取所有編號(hào)。

3.畫一個(gè)簡(jiǎn)單的流程圖

下面是使用億圖圖示專家V7.9繪制流程圖:

4.寫一個(gè)簡(jiǎn)單的接口

分析了這么久,寫一個(gè)簡(jiǎn)單的接口來(lái)理一下我們的思路。(C#)

private string[] FileType;  //文件格式private int[] FileSize;     //文件大小private string FilePath;    //文件保存路徑private int TotalPages;     //圖標(biāo)總頁(yè)數(shù)//獲取圖標(biāo)總頁(yè)數(shù)private int GetTotalPages(string iconsURL) { }//獲取當(dāng)前頁(yè)的編號(hào)private string[] GetIDs(string pageURL){}private bool DownICO(string[] fileType, int[] fileSize, int totalPages){    //一層:遍歷每一頁(yè)    for (int i = 0; i < totalPages; i++)    {        //獲取當(dāng)前頁(yè)所有編號(hào)        string[] strIDs = GetIDs("PagesURL");        //兩層:遍歷每一個(gè)編號(hào)        for (int j = 0; j < strIDs.Length; j++)        {            //三層:遍歷每一種尺寸            for (int k = 0; k < fileSize.Length; k++)            {                //四層:遍歷每一種格式                for (int m = 0; m < filePath.Length; m++)                {                    //生成下載鏈接                    string downURL = "http://download.easyicon.net/格式/編號(hào)/尺寸/";                    Down(this.FilePath, downURL);                    //其他操作……                }            }//4        }//3    }//2}//1//下載每一個(gè)圖標(biāo)private bool Down(string filePath,string downURL){}

5.關(guān)鍵問題

下面是代碼中使用的關(guān)鍵問題的解決方案:

(1)如果一切參數(shù)都能找到,用哪個(gè)類或方法來(lái)下載?System.Net.WebClient的DownloadFile方法。

(2)怎樣獲取圖標(biāo)總頁(yè)數(shù)?根據(jù)觀察網(wǎng)頁(yè),每一頁(yè)都有"個(gè)圖標(biāo),翻X頁(yè)可看完",X即為總頁(yè)數(shù),通過(guò)抓取網(wǎng)頁(yè)字符串即可;

(3)怎樣獲取每一頁(yè)所有圖標(biāo)的編號(hào)?當(dāng)然還是通過(guò)網(wǎng)頁(yè)抓取。如下圖,通過(guò)審查元素,可以看到每一個(gè)圖標(biāo)的編號(hào)和名稱。

(4)怎樣獲取下載圖標(biāo)的名稱?有兩種方式,一是網(wǎng)頁(yè)內(nèi)容抓;二是通過(guò)根據(jù)服務(wù)返回的信息來(lái)提取。

三、編程實(shí)現(xiàn)

編程比較簡(jiǎn)單,下面是網(wǎng)頁(yè)操作的兩個(gè)比較核心的函數(shù)(第一次抓取網(wǎng)頁(yè),不知道這樣好不好)

第一個(gè)函數(shù),是通過(guò)網(wǎng)頁(yè)地址來(lái)獲取網(wǎng)頁(yè)代碼的。

/// <summary>/// 根據(jù)URL獲取網(wǎng)頁(yè)代碼/// </summary>/// <param name="strURL">URL地址</param>/// <returns>網(wǎng)頁(yè)代碼字符串</returns>public static string GetHtmlString(string strURL){    Uri uri = new Uri(strURL);    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);    HttpWebResponse response = (HttpWebResponse)request.GetResponse();    Stream stream = response.GetResponseStream();    string strHtml = "";    if (stream != null)    {        StreamReader sr = new StreamReader(stream);        strHtml = sr.ReadToEnd();        sr.Close();        stream.Close();        response.Close();    }    return strHtml;}

第二個(gè)函數(shù)主要是根據(jù)向服務(wù)器提交圖標(biāo)的下載鏈接,獲取返回的headers信息,這些信息里就包含了圖標(biāo)的名稱。

/// <summary>/// 根據(jù)URL獲取headers信息/// </summary>/// <param name="URL">URL地址</param>/// <returns>headers信息列表</returns>public static Dictionary<string, string> GetHeaders(string URL){    Dictionary<string, string> headerList = new Dictionary<string, string>();    WebRequest webRequestObject =HttpWebRequest.Create(URL);    WebResponse responseObject =webRequestObject.GetResponse();    foreach (string headerKey in responseObject.Headers)    {        headerList.Add(headerKey, responseObject.Headers[headerKey]);    }    responseObject.Close();    return headerList;}

問題一:驗(yàn)證碼問題

編程其實(shí)并不是那么一蹴而就,或多或少會(huì)遇到一些之前沒有想到的問題

其中遇到最大的問題是驗(yàn)證問題。如果大量下載圖標(biāo)(第一次達(dá)166個(gè)圖標(biāo))時(shí),向服務(wù)器提交下載地址時(shí),它會(huì)彈出驗(yàn)證窗口,下面是用webBrowser控件得到的結(jié)果。

這是另外一個(gè)網(wǎng)頁(yè)http://www.easyicon.net/api/captcha/captcha.php返回的結(jié)果

解決:一開始的解決思路是去抓包,獲取提交鏈接和內(nèi)容,就像其他程序讓用戶打碼一樣;后來(lái)我就得反正是要打碼,還不如讓用戶直接看到這個(gè)頁(yè)面(當(dāng)然,這樣的界面顯示很粗糙,實(shí)際上應(yīng)該去獲取這個(gè)圖標(biāo),并將這個(gè)圖標(biāo)顯示在用戶面前),于是用了webBrowser控件;接下來(lái),需要一個(gè)輸入,然后提交:輸入采用了VB中的InputBox,這樣更方便,不需要去暫停線程,提交就是用HtmlElement的GetAttribute來(lái)獲取提交按鈕,用InvokeMember方法來(lái)執(zhí)行。

問題二:程序假死問題

下載量過(guò)多,程序界面肯定會(huì)假死,用戶體驗(yàn)十分不好。需要新建線程,但要注意新線程與主線程之間的控件信息交互問題。

解決:下面是用委托來(lái)實(shí)現(xiàn)向ListBoxAdv添加下載返回的消息的函數(shù)。

delegate void SetValueCallback(ListBoxAdv lstA,string log);private void SetPropertyValue(ListBoxAdv lstA,string log){    if (lstA.InvokeRequired)    {        SetValueCallback d = new SetValueCallback(SetPropertyValue);        lstA.Invoke(d, new object[] { lstA,log });    }    else    {        lstA.Items.Add(log);        lstA.SetSelected(lstA.Items.Count-1,true);        lstA.SelectedIndex=lstA.Items.Count - 1;    }}

調(diào)用:

SetPropertyValue(lstAdv, "消息……”);

問題三:下載失敗問題

并不是所有圖標(biāo)都能正常下載,即使多次反復(fù)下載,它容易出現(xiàn),下載結(jié)果只有25字節(jié)大小的圖標(biāo)(重復(fù)下載也無(wú)效),可能是因?yàn)榫W(wǎng)速的原因。

解決:遍歷所有25字節(jié)的圖標(biāo),刪除后重新下載(當(dāng)然也需要耗時(shí))。

四、成果展示

主界面

下載的圖標(biāo)

我測(cè)試下載了png 32的圖標(biāo),約8000多個(gè),本地和云盤都有,文件以編號(hào)+名稱命名,通過(guò)編號(hào),我可以再?gòu)墓倬W(wǎng)下載到其他需要的圖標(biāo),通過(guò)名稱可以搜索到需要的圖標(biāo)。

PC官方
安卓官方手機(jī)版
IOS官方手機(jī)版

Easyicon圖標(biāo)批量下載工具截圖

下載地址

Easyicon圖標(biāo)批量下載工具 1.0 綠色免費(fèi)版【源碼+教程】

熱門評(píng)論
最新評(píng)論
發(fā)表評(píng)論 查看所有評(píng)論(0)
昵稱:
表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)

編輯推薦

報(bào)錯(cuò)

請(qǐng)簡(jiǎn)要描述您遇到的錯(cuò)誤,我們將盡快予以修正。

轉(zhuǎn)帖到論壇
輪壇轉(zhuǎn)帖HTML方式

輪壇轉(zhuǎn)帖UBB方式