เอาโค้ด สำหรับโหลดตัวอย่างโปรเจค ใน https://github.com มาฝากเผื่อใครสนใจโหลดเก็บไว้ ครับ
พอดีเห็นว่าสะดวกในการศึกษา(หรือปล่าวก็ไม่รู้) นะครับ
เลยอยากเอาลองให้ใช้ดูบ้าง
Code (C#)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
using System.Threading;
using System.Text.RegularExpressions;
using System.Net;
namespace github_Project
{
public class frmGithubLoad:Form
{
private TextBox txtSearch;
private Button button1;
private Label label1;
private Button button2;
private Label label2;
private Label lblStatus;
private TextBox txtPath;
public frmGithubLoad()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.txtSearch = new System.Windows.Forms.TextBox();
this.button1 = new System.Windows.Forms.Button();
this.label1 = new System.Windows.Forms.Label();
this.button2 = new System.Windows.Forms.Button();
this.label2 = new System.Windows.Forms.Label();
this.txtPath = new System.Windows.Forms.TextBox();
this.lblStatus = new System.Windows.Forms.Label();
this.SuspendLayout();
//
// txtSearch
//
this.txtSearch.Location = new System.Drawing.Point(62, 49);
this.txtSearch.Name = "txtSearch";
this.txtSearch.Size = new System.Drawing.Size(179, 20);
this.txtSearch.TabIndex = 3;
this.txtSearch.Text = "youtube";
//
// button1
//
this.button1.Location = new System.Drawing.Point(379, 49);
this.button1.Name = "button1";
this.button1.Size = new System.Drawing.Size(57, 23);
this.button1.TabIndex = 2;
this.button1.Text = "Run";
this.button1.UseVisualStyleBackColor = true;
this.button1.Click += new System.EventHandler(this.button1_Click);
//
// label1
//
this.label1.AutoSize = true;
this.label1.Location = new System.Drawing.Point(25, 23);
this.label1.Name = "label1";
this.label1.Size = new System.Drawing.Size(31, 13);
this.label1.TabIndex = 4;
this.label1.Text = "path:";
//
// button2
//
this.button2.Location = new System.Drawing.Point(379, 21);
this.button2.Name = "button2";
this.button2.Size = new System.Drawing.Size(57, 23);
this.button2.TabIndex = 5;
this.button2.Text = "...";
this.button2.UseVisualStyleBackColor = true;
this.button2.Click += new System.EventHandler(this.button2_Click);
//
// label2
//
this.label2.AutoSize = true;
this.label2.Location = new System.Drawing.Point(12, 56);
this.label2.Name = "label2";
this.label2.Size = new System.Drawing.Size(44, 13);
this.label2.TabIndex = 6;
this.label2.Text = "Search:";
//
// txtPath
//
this.txtPath.Location = new System.Drawing.Point(62, 21);
this.txtPath.Name = "txtPath";
this.txtPath.Size = new System.Drawing.Size(311, 20);
this.txtPath.TabIndex = 7;
this.txtPath.Text = "D:\\Github Project";
//
// lblStatus
//
this.lblStatus.AutoSize = true;
this.lblStatus.Location = new System.Drawing.Point(62, 121);
this.lblStatus.Name = "lblStatus";
this.lblStatus.Size = new System.Drawing.Size(40, 13);
this.lblStatus.TabIndex = 9;
this.lblStatus.Text = "Status:";
//
// frmGithubLoad
//
this.ClientSize = new System.Drawing.Size(651, 218);
this.Controls.Add(this.lblStatus);
this.Controls.Add(this.txtPath);
this.Controls.Add(this.label2);
this.Controls.Add(this.button2);
this.Controls.Add(this.label1);
this.Controls.Add(this.txtSearch);
this.Controls.Add(this.button1);
this.Name = "frmGithubLoad";
this.Load += new System.EventHandler(this.frmGithubLoad_Load);
this.ResumeLayout(false);
this.PerformLayout();
}
private void button2_Click(object sender, EventArgs e)
{
using (FolderBrowserDialog fol = new FolderBrowserDialog())
{
if (fol.ShowDialog() == DialogResult.OK)
{
txtPath.Text = fol.SelectedPath;
}
}
}
private async void button1_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txtPath.Text.Trim()) || string.IsNullOrEmpty(txtSearch.Text.Trim()))
{
MessageBox.Show("เอ๋อเร๋อ");return;
}
await Task.Run(() =>
{
// List<Task> tasks = new List<Task>();
for (int i = 1; i < 101; i++)
{
/* tasks.Add(Task.Run(() =>
{*/
//C# จะใช้ C%23 นะขอรับ
string Url = ("https://github.com/search?l=C%23&p=" + i + "&q=" + txtSearch.Text + "&type=Repositories");
this.Invoke(new Action(() => this.Text = Url));
List<string> urls = GetLinkByURL(Url, @""(https://github.com/.*?/.*?)"");
if (urls.Count > 0)
{
urls.ForEach( l =>
{
string file = GetValueByURL(l, @"href=""/(.*?\.zip)"">");
string linkLoad = "https://github.com/" + file;
lblStatus.Invoke(new Action(() => lblStatus.Text = linkLoad));
if (!string.IsNullOrEmpty(file))
{
using (WebClient webClient = new WebClient())
{
try
{
//ถ้าชอบโหลดแบบเยอะ พร้อมกันก็ใช้ DownloadFileAsync แต่ถ้าชอบ เนิบๆ ช้าๆ แบบผมก็ใช้ DownloadFile
webClient.DownloadFile(new Uri(linkLoad), RenameFileDup(txtPath.Text + "\\" + file.Replace("/","_")));
System.Threading.Thread.Sleep(2000);
}
catch { }
}
}
Thread.Sleep(3000);
}
);
}
// }));
Thread.Sleep(2000);
}
// Task.WaitAll(tasks.ToArray());
Thread.Sleep(2000);
lblStatus.Invoke(new Action(() => lblStatus.Text = "complete..."));
});
}
#region TORNetwork 555
string getHTML( string url)
{
string _url = url;
string html = "";
try
{
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(_url.Trim());
request.UserAgent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Chrome/27.0.1453 Safari/537.36";
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;
}
List<string> GetLinkByURL( string url, string pattern)
{
List<string> lst = new List<string>();
lst.AddRange(Regex.Matches(getHTML(url), pattern)
.OfType<Match>()
.Select(m => m.Groups[1].Value)
.ToList<string>());
return lst;
}
string GetValueByURL( string url, string pattern)
{
string _value;
try
{
_value = new Regex(pattern, RegexOptions.None).Matches(getHTML(url))[0].Groups[1].Value;
}
catch { _value = ""; }
return _value;
}
string RenameFileDup(string _File)
{
string stg = _File;
string fol = Path.GetDirectoryName(_File);
if (!Directory.Exists(fol)) Directory.CreateDirectory(fol);
if (File.Exists(_File))
{
int i = 1;
do
{
stg = fol + "\\" + Path.GetFileNameWithoutExtension(_File) + "_" + i + Path.GetExtension(_File);
i++;
} while (File.Exists(stg));
}
return stg;
}
#endregion
private void frmGithubLoad_Load(object sender, EventArgs e)
{
}
}
}
ที่แน่ๆ ตัวโค้ดเอง จะให้ความรู้ในเรื่อง
1. List
2. Task await/async Thread
3. WebClient DownloadFile
4. Regex
5. lambda expression
ซึ่งจากที่ลองเล่นดู ผมว่ามีประโยชน์ เยอะดี ครับTag : .NET, Win (Windows App), C#, VS 2012 (.NET 4.x), VS 2013 (.NET 4.x), VS 2015 (.NET 4.x)
Date :
2020-05-05 17:23:32
By :
lamaka.tor
View :
802
Reply :
13
เขียน C# มาตั้งหลายปี ทำได้แค่นี้เองเหรอ
Date :
2020-05-11 17:27:39
By :
หน้าฮี
Code (JavaScript)
$.fn.dataTable.render.wlsdate = function () { // เขียนเพิ่มโดย หน้าหี
return function (data, type, row) {
if (type === 'display') {
let str = wls.Date.JsonDate2String(data); // cast jsondate to real string date
return str;
}
return data; // Search, order and type can use the original data
};
};
$.fn.dataTable.render.wlsNumber = function () { // เขียนเพิ่มโดย หน้าหี
return function (data, type, row) {
if (type === 'display') {
let str = accounting.formatNumber(data, DECIMAL_PLACE_PRICE); //DECIMAL_PLACE_PRICE อ่านมาจากฐานข้อมูล ตาราง aeiouERP
return str;
}
return data; // Search, order and type can use the original data
};
};
Date :
2020-05-11 17:30:44
By :
หน้าฮี
wls ความหมายคือ
S = Slow Ass Fuck/Slow As Fuck.
Date :
2020-05-11 17:35:48
By :
หน้าฮี
ปัญญา มีแค่นี้เองเหรอ
ปล. ไม่ได้ด่า แต่อยากเตือนสติ
Date :
2020-05-11 17:42:22
By :
หน้าฮี
นายเห็นความอหังการ ของเราหรือยัง เราเขียน Andriod/IOS ได้หมดแหละ
และยิ่งเป็นเวปนะ หะหมอยเด็ก
นับประสาอะไรกับ Windows Application
C# ของนาย มันหะหมอย เด็กฯฯฯ
ปล. เราเป็นคนอ่อนหวาน เราเป็นคนโอบอ้อมอารีย์ นะ จะบอกให้
Date :
2020-05-12 05:38:53
By :
หน้าฮี
+55555
อย่าไปคิดอะไรมาก ธรรมชาติดีที่สุด
Date :
2020-05-12 05:41:11
By :
หน้าฮี
ตอบความคิดเห็นที่ : 1 เขียนโดย : หน้าฮี เมื่อวันที่ 2020-05-11 17:27:39
รายละเอียดของการตอบ ::
มันก็ได้แค่นี้แหละครับ
นานๆจะได้จับที ช่วงนี้ มีอะไรเปลี่ยนเยอะ ทั้ง ISO 17025 ที่อัพเวอร์ เป็น 2017 ในไทยก็ประกาศใช้จริงๆจังก็ 2018-2019
ก็ต้องรื้อ sop ใหม่หมด
ไหนจะ AWWA ที่เปลี่ยน ก็ต้องมาทำ MV ใหม่ หา Uncer ใหม่
method validate มีการอัพใหม่ ก็ต้องมาทำ MV ใหม่ หา Uncer ใหม่
พอแก้ sop แก้ WI เรียบร้อยก็ต้องมาแก้โปรแกรมอีก
จัดฐานข้อมูลให้สอดคล้องกับ ISO 17025 2017 ทั้งการเฝ้าระวัง ความเสี่ยง และ ถือโอกาศ อัพโปรแกรมนิดๆหน่อยๆ
เลยไม่ค่อยได้จับ ด้านนี้จริงๆจังๆซักกะทีเลยครับ
แต่หลักๆที่ผมหมกหม่นน่าจะเป็นเรื่องนี้ละมั้งครับ(5555)
Code (C#)
//https://www.nuget.org/packages/iTextSharp/5.5.13.1?_src=template
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.pdf.qrcode;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace LoadAndLoadByTOR
{
public class doujin_th
{
private string Pattern_Picture = @"src=""(https?://hentaithai.com/image/.*?\.jpg)"" alt=";
private string Pattern_Title = @"<title>(.*?)</title>";
private string DirectoryLoad = @"E:\Pic\doujin_th";
public void DowndoadAll()
{
Action<string, string> CreatePDF = (fol, filepdf) =>
{
if (!System.IO.Directory.Exists(fol)) return;
List<string> files = System.IO.Directory.GetFiles(fol, "*.*", System.IO.SearchOption.TopDirectoryOnly).ToList<string>();
if (files.Count < 0) System.IO.Directory.Delete(fol);
if (files.Count > 0 && !System.IO.File.Exists(filepdf))
{
try
{
Document document = new Document();
PdfWriter.GetInstance(document, new FileStream(filepdf, FileMode.Create));
document.Open();
files.ForEach(p =>
{
iTextSharp.text.Image pic = iTextSharp.text.Image.GetInstance(p);
pic.ScalePercent((((document.PageSize.Width / pic.Width) * 100) - 5));
document.Add(pic);
document.NewPage();
});
document.Close();
Thread.Sleep(50000);
System.IO.Directory.Delete(fol, true);
}
catch { }
Thread.Sleep(5000);
}
};
Func<string, string> FileName = (file) =>
{
string _file = file;
foreach (char c in "~\"#%&*:<>?/\\{|}.".ToCharArray())
{
_file = _file.Replace(c.ToString(), "");
}
return _file;
};
Action<string , int , int , string > _DownloadFileCompleted = (link, completecount, lstCount, fol) =>
{
if (completecount >= lstCount)
{
Thread.Sleep(3000);
Task.Run(() => CreatePDF(fol, DirectoryLoad + "\\" + System.IO.Path.GetFileName(fol) + ".pdf"));
}
};
Func<string, string> getHTML = (url) =>
{
string _url = url;
string html = "";
try
{
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(_url.Trim());
request.UserAgent = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google Page Speed Insights) Chrome/27.0.1453 Safari/537.36";
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;
};
Func<string, string, List<string>> GetLinkByURL = (url, pattern) =>
{
List<string> lst = new List<string>();
lst.AddRange(Regex.Matches(getHTML(url), pattern)
.OfType<Match>()
.Select(m => m.Groups[1].Value)
.ToList<string>());
return lst;
};
Func<string, string, string> GetValueByURL = (url, pattern) =>
{
string _value;
try
{
_value = new Regex(pattern, RegexOptions.None).Matches(getHTML(url))[0].Groups[1].Value;
}
catch { _value = ""; }
return _value;
};
Action<string> loadPicturebyURL =async (url) =>
{
await Task.Run(() =>
{
string Url = url;
int completeUrl = 0;
List<string> LinkPictures = GetLinkByURL(Url, Pattern_Picture);
string title = new Regex(@"(&.*?;)", RegexOptions.None).Replace(GetValueByURL(Url, Pattern_Title), "").Replace("\t", "").Replace("\r", "").Trim();
// MessageBox.Show(url + "\n" + title + "\n" + LinkPictures.Count);
if (LinkPictures.Count > 0)
{
if (FileName(title) == "")
title = System.IO.Path.GetFileName(Url);
string fol = DirectoryLoad + "\\" + FileName(title);
if (System.IO.File.Exists(DirectoryLoad + "\\" + System.IO.Path.GetFileName(fol) + ".pdf"))
{
_DownloadFileCompleted(Url, LinkPictures.Count + 1, LinkPictures.Count, fol);
}
else
{
int i = 1;
Directory.CreateDirectory(fol);
LinkPictures.ForEach(link =>
{
string FileLoad = fol + "\\" + "_" + i.ToString("000") + ".jpg";
if (!System.IO.File.Exists(FileLoad))
{
using (WebClient wc = new WebClient())
{
wc.DownloadFileCompleted += new AsyncCompletedEventHandler((s, e) =>
{
completeUrl++;
_DownloadFileCompleted(Url, completeUrl, LinkPictures.Count, fol);
Thread.Sleep(2000);
i++;
});
wc.DownloadFileAsync(new Uri(link), FileLoad);
Thread.Sleep(2000);
}
}
else
{
Thread.Sleep(1000);
completeUrl++;
_DownloadFileCompleted(Url, completeUrl, LinkPictures.Count, fol);
i++;
}
});
}
}
});
};
Task.Run(() =>
{
for (int i = 0; i < 50000; i++)
loadPicturebyURL("https://doujin-th.com/forum/index.php?topic=" + i + ".0");
});
}
}
}
Date :
2020-05-13 08:38:01
By :
lamaka.tor
แต่หลักๆที่ผมหมกหม่นน่าจะเป็นเรื่องนี้ละมั้งครับ(5555)
รุ้จักไหม? Native/Nativeed
Date :
2020-05-13 23:00:51
By :
หน้าฮี
C# มันไม่ได้เหนือไปกว่า C++
Date :
2020-05-13 23:02:18
By :
หน้าฮี
การเดินทางไปเชียงใหม่
บางคนวิ่งไป ก็ถึง
บางคนปั่นจักรยานไป ก็ถึง
บางคนขับ มอไซต์ ไปก็ถึง
บางคน ขับรถไปก็ถึง
บางคนขับเครื่องบินก็ยังถึง
Date :
2020-05-14 08:21:27
By :
lamaka.tor
ยอดเยี่ยมมากฯ @lamaka.tor พยัคย์
พยัคย์ ย่อม ไม่ ฆ่า พยัคย์
เสือ ย่อม ไม่ ฆ่า เสือ
หมาก็เช่นเดียวกัน
Date :
2020-05-20 20:49:46
By :
หน้าฮี
@lamaka.tor
นายเยี่ยมยอดมาก
Date :
2020-05-20 20:51:31
By :
หน้าฮี
ขอบคุณมากฯ เจ้าไพร พยัคย์ @lamaka.tor
Date :
2020-05-20 20:55:16
By :
หน้าฮี
Load balance : Server 03