|
C# มา โหลด โน่น โหลดนี่กันเถอะ (โปรแกรมดาวน์โหลดด้วย C#) |
C# มา โหลด โน่น โหลดนี่กันเถอะ ผมเองเป็นคนชอบโหลบ ทั้ง หนัง เพลง การ์ตูนต่างๆ ดังนั้น ผมจึงมักที่จะเขียนโค้ดสำหรับไว้โหลด โน่น โหลดนี่เสมอ โดยใช้หลักการของ System.Text.RegularExpressions
วันนี้จะมาอธิบายโค้ด ง่ายๆ สำหรับนักโหลด ครับ
ไฟล์ที่ต้องใช้
1.https://mega.nz/#!YF53lapT!fmjfm4v4taJ83hvJC6vBS1SdmM5o2LezKV3gqth2yiQ
2.http://regexhero.net/tester/
3. เว็บสำหรับที่ต้องการโหลด
ควรมีพื้นฐาน Regular Expressions ซักหน่อยก็ดีนะครับจะช่วยได้เยอะ ก็อ่านมันจาก regex hero นี่แหละครับ เอาพอถูๆไถๆไปก่อน
ซึ่งถ้าฝึก regex บ่อยๆจะช่วยได้มากกว่า string เยอะครับ
ยิ่งถ้าผนวกกับ ienumerable ได้ก็ยิ่งช่วยได้เยอะ
ตัวอย่างจะเป็น เว็บ
https://www.iconfinder.com/
สำหรับโหลดรูป นะครับ
เบื้องต้นผมจะลองค้นแบบปกติก่อน
https://www.iconfinder.com/search/?q=C#&price=free
เพื่อค้นหาคำว่า C# และ ค้นรูป free ด้วย นะครับ
หามุมว่างๆ คลิกขวาเลือก view page source เพื่อดูโค้ด html
โค้ดก็ประมาณนี้ครับ
http://view-source:https://www.iconfinder.com/search/?q=C#&price=free
ทีนี้ก็เปิด regex hero ขึ้นมา จากนั้นก็ก๊อบทั้งหมดของ html ไปใส่ครับ
ความมันส์ มันเริ่มจากตรงนี้ครับ
เพราะ เราจะต้อง หา Regular pattern เพื่อดึง ลิงค์ที่ต้องการออกมา
สามารถศึกษา Regular pattern ได้ใน
https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expression-language-quick-reference
ผมจะดึงไฟล์ .png ออกมานะครับ
ผมลองใส่ (https://.*?\.png)
สรุป ว่า เราได้ลิงค์มาแล้วนะครับ(ง๊ายง่าย)
ถ้ายังไม่ได้ก็เล่น regex ไปเรื่อยๆ จนกว่าจะได้ตามชอบใจละครับ
แต่ผมก็มักคิดง่ายๆ ถ้าจะโหลด ไฟล์ png ก็แค่ ใส่(*.?\.png)
อธิบายตามความรู้หางอึ่งของผมนะครับ
() คือการสร้าง group ขึ้นมา เพราะเวลาเรียกไปใช้ เราจะเรียกไปเป็น callection ที่ชื่อว่า MatchCollection
แล้วมันก็จะเรียกเป็น group[]
*.? ก็คือ อักขระ อะไรก็ได้ จะเป็นตัวหนังสือ ตัวเลขสัญลักษณ์ ได้หมด
\.png . เป็นเงื่อนไขใน Regular pattern หมายถึงอะไรก็ได้ แต่ถ้าเราจะใช้มัน หรืออะไรที่เป็นเงื่อนไข หรือ อักขระเงื่อนไขใน Regular pattern แล้ว เราจะต้อง เพิ่ม \ ข้างหน้า เช่น เราจะใช้ () ถ้าเราจะพิมพ์แค่() Regular มันจะแบ่ง group ให้เราดังนั้เราต้องพิมพ์ว่า \(\) เพื่อที่จะหาค่า () นั่นเอง
ในกรณีที่อยากค้นทั้งไฟล์ .png และ .jpg ก็ต้องใช้แบบนี้ครับ
\.[pngj]{3,}
[pngj] คือดูค่าใน [] ซึ่งก็คือ pngj และ {} เป็นการบอกจำนวน ซึ่ง {3,} หมายถึง อย่างน้อย 3 จำนวน
เช่น png pgn npg jpg ....
{} ผมมีหลักการใช้ง่ายๆคือ
{n,} > จำนวน n ขึ้นไป
{n,m} > จำนวน n ถึง m
เช่น [pngje]{3,4} มันจะคลุมทั้ง .jpg(3 ตัว) และ .jpeg(4 ตัว)
เรื่องนี้ มั่วๆไปเดียวก็ชินไปเองครับ ผมก็งูๆปลาๆ ไปเหมือนกัน
พอเราเล่นกับ regexจนสาแก่ใจแล้ว เราก็ คลิกที่ .net เพื่อดูโค้ด
ผมลบ target string ออกไป เพื่อให้เห็นโค้ดชัดเจนขึ้นครับ
หลักๆที่เราได้คือ
Code (C#)
string strRegex = @"(https://.*?\.png)";
//คือ pattern หรือ รูปแบบ สำหรับ Regex
Regex myRegex = new Regex(strRegex, RegexOptions.None);
เป็นการเรียกใช้ Regex
foreach (Match myMatch in myRegex.Matches(strTargetString))
{
if (myMatch.Success)
{
// Add your code here
}
}
เป็น for loop สำหรับ ดึงข้อมูลออกมาใช้ครับ
จะเขียนโค้ด สั้นๆ แบบนี้ก็ได้
Code (C#)
foreach (Match myMatch in new Regex(@"(https://.*?\.png)", RegexOptions.None).Matches(strTargetString))
{
}
ในกรณีความจุน้อยๆแบบนี้ เราสามารถ WebClient ในการโหลดได้ครับ
Code (C#)
public static void LoadFByWebClient(string link, string file)
{
using (WebClient webClient = new WebClient())
{
try
{
webClient.DownloadFileAsync(new Uri(link), file);
System.Threading.Thread.Sleep(100);
}
catch { }
}
}
แต่ถ้าเยอะๆ ควรใช้ IDM จะเหมาะกว่า(เกินซัก 10 mb ขึ้นไป)
Code (C#)
public static void LoadByIDM(string link, string file)
{
string IDMpath = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\DownloadManager", "ExePath", true).ToString();
System.Diagnostics.Process.Start(IDMpath, "/a /n /d " + link + " /f \"" + file + "\"");
System.Threading.Thread.Sleep(500);
}
เมื่อเราได้ for loop มาแล้ว ก็โหลดเลยครับ
Code (C#)
foreach (Match myMatch in new Regex(@"(https://.*?\.png)", RegexOptions.None).Matches(strTargetString))
{
LoadFByWebClient(myMatch.Groups[1].Value,@“C:\_load\” + System.IO.Path.GetFileName(_myMatch.Groups[1].Value));
}
ยังไม่จบครับ เรายังต้องทำให้ง่ายโดยการแปลงจาก url ให้เป็น โค้ดhtml ซะก่อน
public static string getHTML(string url)
{
string html = "";
try
{
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(url.Trim());
System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)request.GetResponse();
System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream());
html = sr.ReadToEnd();
sr.Close();
response.Close();
}
catch { }
return html;
}
ดังนั้นโค้ดมันก็จะประมาณนี้ครับ
Code (C#)
string html = TorServices.NetWorkTOR.getHTML("https://www.iconfinder.com/search/?q=C#&price=free");
//แปลงจาก url ให้เป็น html
foreach (Match myMatch in new Regex(@"(https://.*?\.png)", RegexOptions.None).Matches(html))
{
LoadFByWebClient(myMatch.Groups[1].Value,@"C:\_load\" +System.IO.Path.GetFileName(myMatch.Groups[1].Value));
}
แทนที่เราจะค้นแค่ C# อย่างเดียว เราก็ทำให้มันค้นได้หลายๆคำ โดยใช้ list<> และ ForEach
แบบนี้
Code (C#)
new List<string>() { "C#", "lab", "Chemistry", "test", "metal","lern","book","man","animal","food" }
.ForEach(cri =>
{
string html = TorServices.NetWorkTOR.getHTML("https://www.iconfinder.com/search/?q=" +cri+ "&price=free");
foreach (Match myMatch in new Regex(@"(https://.*?\.png)", RegexOptions.None).Matches(html))
{
TorServices.NetWorkTOR.LoadFByWebClient(myMatch.Groups[1].Value,@"C:\_load\" +System.IO.Path.GetFileName(myMatch.Groups[1].Value));
}
});
|
|
|
|
|
|
|
|
By : |
TOR_CHEMISTRY
|
|
Article : |
บทความเป็นการเขียนโดยสมาชิก หากมีปัญหาเรื่องลิขสิทธิ์ กรุณาแจ้งให้ทาง webmaster ทราบด้วยครับ |
|
Score Rating : |
|
|
Create Date : |
2019-04-23 |
|
Download : |
No files |
|
Sponsored Links |
|
|
|
|
|
|