From d4012764f71c40225e26334132d78400b182a8ea Mon Sep 17 00:00:00 2001 From: j502647092 Date: Sat, 25 Jul 2015 18:07:54 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitattributes | 63 +++++ .gitignore | 156 +++++++++++ AliCPM.sln | 32 +++ AliKeywordSearch.csproj | 99 +++++++ Config.cs | 55 ++++ Frm_Main.Designer.cs | 278 +++++++++++++++++++ Frm_Main.cs | 167 ++++++++++++ Frm_Main.resx | 449 +++++++++++++++++++++++++++++++ HttpHelper.cs | 326 ++++++++++++++++++++++ Program.cs | 21 ++ Properties/AssemblyInfo.cs | 36 +++ Properties/Resources.Designer.cs | 63 +++++ Properties/Resources.resx | 117 ++++++++ Properties/Settings.Designer.cs | 26 ++ Properties/Settings.settings | 7 + app.config | 3 + icon.ico | Bin 0 -> 17798 bytes 17 files changed, 1898 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 AliCPM.sln create mode 100644 AliKeywordSearch.csproj create mode 100644 Config.cs create mode 100644 Frm_Main.Designer.cs create mode 100644 Frm_Main.cs create mode 100644 Frm_Main.resx create mode 100644 HttpHelper.cs create mode 100644 Program.cs create mode 100644 Properties/AssemblyInfo.cs create mode 100644 Properties/Resources.Designer.cs create mode 100644 Properties/Resources.resx create mode 100644 Properties/Settings.Designer.cs create mode 100644 Properties/Settings.settings create mode 100644 app.config create mode 100644 icon.ico diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1bc915c --- /dev/null +++ b/.gitignore @@ -0,0 +1,156 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.sln.docstates + +# Build results + +[Dd]ebug/ +[Rr]elease/ +x64/ +build/ +[Bb]in/ +[Oo]bj/ + +# Enable "build/" folder in the NuGet Packages folder since NuGet packages use it for MSBuild targets +!packages/*/build/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +*_i.c +*_p.c +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.log +*.scc + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +*.ncrunch* +.*crunch*.local.xml + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.Publish.xml + +# NuGet Packages Directory +## TODO: If you have NuGet Package Restore enabled, uncomment the next line +#packages/ + +# Windows Azure Build Output +csx +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.[Pp]ublish.xml +*.pfx +*.publishsettings + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file to a newer +# Visual Studio version. Backup files are not needed, because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +App_Data/*.mdf +App_Data/*.ldf + + +#LightSwitch generated files +GeneratedArtifacts/ +_Pvt_Extensions/ +ModelManifest.xml + +# ========================= +# Windows detritus +# ========================= + +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Mac desktop service store files +.DS_Store diff --git a/AliCPM.sln b/AliCPM.sln new file mode 100644 index 0000000..8b8abf9 --- /dev/null +++ b/AliCPM.sln @@ -0,0 +1,32 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.21005.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AliKeywordSearch", "AliKeywordSearch.csproj", "{118BA2B4-EB09-4A14-A7AA-6C4350B63DC2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {118BA2B4-EB09-4A14-A7AA-6C4350B63DC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {118BA2B4-EB09-4A14-A7AA-6C4350B63DC2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {118BA2B4-EB09-4A14-A7AA-6C4350B63DC2}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {118BA2B4-EB09-4A14-A7AA-6C4350B63DC2}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {118BA2B4-EB09-4A14-A7AA-6C4350B63DC2}.Debug|x86.ActiveCfg = Debug|Any CPU + {118BA2B4-EB09-4A14-A7AA-6C4350B63DC2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {118BA2B4-EB09-4A14-A7AA-6C4350B63DC2}.Release|Any CPU.Build.0 = Release|Any CPU + {118BA2B4-EB09-4A14-A7AA-6C4350B63DC2}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {118BA2B4-EB09-4A14-A7AA-6C4350B63DC2}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {118BA2B4-EB09-4A14-A7AA-6C4350B63DC2}.Release|x86.ActiveCfg = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/AliKeywordSearch.csproj b/AliKeywordSearch.csproj new file mode 100644 index 0000000..8f0f3d1 --- /dev/null +++ b/AliKeywordSearch.csproj @@ -0,0 +1,99 @@ + + + + + Debug + AnyCPU + {118BA2B4-EB09-4A14-A7AA-6C4350B63DC2} + WinExe + Properties + AliKeywordSearch + AliKeywordSearch + v3.5 + 512 + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + + + icon.ico + + + + + + + + + + + + + + + + + Form + + + Frm_Main.cs + + + + + + Frm_Main.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + SettingsSingleFileGenerator + Settings.Designer.cs + + + True + Settings.settings + True + + + + + + + + \ No newline at end of file diff --git a/Config.cs b/Config.cs new file mode 100644 index 0000000..f059228 --- /dev/null +++ b/Config.cs @@ -0,0 +1,55 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; + +namespace AliKeywordSearch +{ + class Config + { + protected string fileName; + public Config(string fileName) + { + this.fileName = fileName; + } + + //将List转换为TXT文件 + public void WriteListToTextFile(List list) + { + //创建一个文件流,用以写入或者创建一个StreamWriter + FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write); + StreamWriter sw = new StreamWriter(fs); + sw.Flush(); + // 使用StreamWriter来往文件中写入内容 + sw.BaseStream.Seek(0, SeekOrigin.Begin); + for (int i = 0; i < list.Count; i++) sw.WriteLine(list[i]); + //关闭此文件t + sw.Flush(); + sw.Close(); + fs.Close(); + } + + //读取文本文件转换为List + public List ReadTextFileToList() + { + FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); + List list = new List(); + StreamReader sr = new StreamReader(fs); + //使用StreamReader类来读取文件 + sr.BaseStream.Seek(0, SeekOrigin.Begin); + // 从数据流中读取每一行,直到文件的最后一行 + string tmp = sr.ReadLine(); + while (tmp != null) + { + list.Add(tmp); + tmp = sr.ReadLine(); + } + //关闭此StreamReader对象 + sr.Close(); + fs.Close(); + return list; + } + } +} + diff --git a/Frm_Main.Designer.cs b/Frm_Main.Designer.cs new file mode 100644 index 0000000..b6597fd --- /dev/null +++ b/Frm_Main.Designer.cs @@ -0,0 +1,278 @@ +namespace EnAliKeywordSearch +{ + partial class Frm_Main + { + /// + /// 必需的设计器变量。 + /// + private System.ComponentModel.IContainer components = null; + + /// + /// 清理所有正在使用的资源。 + /// + /// 如果应释放托管资源,为 true;否则为 false。 + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows 窗体设计器生成的代码 + + /// + /// 设计器支持所需的方法 - 不要 + /// 使用代码编辑器修改此方法的内容。 + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Frm_Main)); + this.SearchView = new System.Windows.Forms.DataGridView(); + this.company = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.keyword = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.ResultView = new System.Windows.Forms.DataGridView(); + this.公司名称 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.关键词 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.排名 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.查询时间 = new System.Windows.Forms.DataGridViewTextBoxColumn(); + this.search = new System.Windows.Forms.Button(); + this.max = new System.Windows.Forms.TextBox(); + this.cnAli = new System.Windows.Forms.RadioButton(); + this.enAli = new System.Windows.Forms.RadioButton(); + this.label1 = new System.Windows.Forms.Label(); + this.state = new System.Windows.Forms.Label(); + this.saveout = new System.Windows.Forms.Button(); + this.readin = new System.Windows.Forms.Button(); + this.openFile = new System.Windows.Forms.OpenFileDialog(); + this.saveFile = new System.Windows.Forms.SaveFileDialog(); + this.backgroundWorker = new System.ComponentModel.BackgroundWorker(); + this.clearresult = new System.Windows.Forms.Button(); + this.clearsearch = new System.Windows.Forms.Button(); + ((System.ComponentModel.ISupportInitialize)(this.SearchView)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.ResultView)).BeginInit(); + this.SuspendLayout(); + // + // SearchView + // + this.SearchView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.SearchView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.company, + this.keyword}); + this.SearchView.Location = new System.Drawing.Point(12, 54); + this.SearchView.Name = "SearchView"; + this.SearchView.RowTemplate.Height = 23; + this.SearchView.Size = new System.Drawing.Size(843, 241); + this.SearchView.TabIndex = 0; + // + // company + // + this.company.HeaderText = "公司名称"; + this.company.Name = "company"; + this.company.Width = 300; + // + // keyword + // + this.keyword.HeaderText = "关键词(用英文逗号隔开)"; + this.keyword.Name = "keyword"; + this.keyword.Width = 500; + // + // ResultView + // + this.ResultView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; + this.ResultView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { + this.公司名称, + this.关键词, + this.排名, + this.查询时间}); + this.ResultView.Location = new System.Drawing.Point(12, 322); + this.ResultView.Name = "ResultView"; + this.ResultView.RowTemplate.Height = 23; + this.ResultView.Size = new System.Drawing.Size(843, 460); + this.ResultView.TabIndex = 1; + // + // 公司名称 + // + this.公司名称.HeaderText = "公司名称"; + this.公司名称.Name = "公司名称"; + this.公司名称.Width = 300; + // + // 关键词 + // + this.关键词.HeaderText = "关键词"; + this.关键词.Name = "关键词"; + this.关键词.Width = 200; + // + // 排名 + // + this.排名.HeaderText = "排名"; + this.排名.Name = "排名"; + this.排名.Width = 150; + // + // 查询时间 + // + this.查询时间.HeaderText = "查询时间"; + this.查询时间.Name = "查询时间"; + this.查询时间.Width = 150; + // + // search + // + this.search.Location = new System.Drawing.Point(399, 9); + this.search.Name = "search"; + this.search.Size = new System.Drawing.Size(152, 36); + this.search.TabIndex = 2; + this.search.Text = "查 询 关 键 词"; + this.search.UseVisualStyleBackColor = true; + this.search.Click += new System.EventHandler(this.search_Click); + // + // max + // + this.max.Location = new System.Drawing.Point(112, 12); + this.max.Name = "max"; + this.max.Size = new System.Drawing.Size(83, 21); + this.max.TabIndex = 3; + this.max.Text = "20"; + // + // cnAli + // + this.cnAli.AutoSize = true; + this.cnAli.Enabled = false; + this.cnAli.Location = new System.Drawing.Point(303, 19); + this.cnAli.Name = "cnAli"; + this.cnAli.Size = new System.Drawing.Size(71, 16); + this.cnAli.TabIndex = 5; + this.cnAli.Text = "中文阿里"; + this.cnAli.UseVisualStyleBackColor = true; + this.cnAli.Visible = false; + // + // enAli + // + this.enAli.AutoSize = true; + this.enAli.Checked = true; + this.enAli.Location = new System.Drawing.Point(226, 19); + this.enAli.Name = "enAli"; + this.enAli.Size = new System.Drawing.Size(71, 16); + this.enAli.TabIndex = 6; + this.enAli.TabStop = true; + this.enAli.Text = "英文阿里"; + this.enAli.UseVisualStyleBackColor = true; + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(16, 16); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(89, 12); + this.label1.TabIndex = 7; + this.label1.Text = "最大查询页数: "; + // + // state + // + this.state.AutoSize = true; + this.state.Font = new System.Drawing.Font("宋体", 10.5F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134))); + this.state.Location = new System.Drawing.Point(96, 302); + this.state.Name = "state"; + this.state.Size = new System.Drawing.Size(37, 14); + this.state.TabIndex = 8; + this.state.Text = "状态"; + this.state.TextAlign = System.Drawing.ContentAlignment.TopCenter; + // + // saveout + // + this.saveout.Location = new System.Drawing.Point(777, 16); + this.saveout.Name = "saveout"; + this.saveout.Size = new System.Drawing.Size(75, 23); + this.saveout.TabIndex = 9; + this.saveout.Text = "导出数据"; + this.saveout.UseVisualStyleBackColor = true; + this.saveout.Click += new System.EventHandler(this.saveout_Click); + // + // readin + // + this.readin.Location = new System.Drawing.Point(615, 16); + this.readin.Name = "readin"; + this.readin.Size = new System.Drawing.Size(75, 23); + this.readin.TabIndex = 10; + this.readin.Text = "导入数据"; + this.readin.UseVisualStyleBackColor = true; + this.readin.Click += new System.EventHandler(this.readin_Click); + // + // openFile + // + this.openFile.FileName = "openFileDialog1"; + // + // clearresult + // + this.clearresult.Location = new System.Drawing.Point(14, 299); + this.clearresult.Name = "clearresult"; + this.clearresult.Size = new System.Drawing.Size(68, 20); + this.clearresult.TabIndex = 11; + this.clearresult.Text = "清除结果"; + this.clearresult.UseVisualStyleBackColor = true; + this.clearresult.Click += new System.EventHandler(this.clearresult_Click); + // + // clearsearch + // + this.clearsearch.Location = new System.Drawing.Point(696, 16); + this.clearsearch.Name = "clearsearch"; + this.clearsearch.Size = new System.Drawing.Size(75, 23); + this.clearsearch.TabIndex = 12; + this.clearsearch.Text = "清除数据"; + this.clearsearch.UseVisualStyleBackColor = true; + this.clearsearch.Click += new System.EventHandler(this.clearsearch_Click); + // + // Frm_Main + // + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.None; + this.ClientSize = new System.Drawing.Size(864, 794); + this.Controls.Add(this.clearsearch); + this.Controls.Add(this.clearresult); + this.Controls.Add(this.readin); + this.Controls.Add(this.saveout); + this.Controls.Add(this.state); + this.Controls.Add(this.label1); + this.Controls.Add(this.enAli); + this.Controls.Add(this.cnAli); + this.Controls.Add(this.max); + this.Controls.Add(this.search); + this.Controls.Add(this.ResultView); + this.Controls.Add(this.SearchView); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "Frm_Main"; + this.Text = "阿里排名查询软件 2015-7-25"; + this.Load += new System.EventHandler(this.Frm_Main_Load); + ((System.ComponentModel.ISupportInitialize)(this.SearchView)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.ResultView)).EndInit(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.DataGridView SearchView; + private System.Windows.Forms.DataGridView ResultView; + private System.Windows.Forms.Button search; + private System.Windows.Forms.TextBox max; + private System.Windows.Forms.DataGridViewTextBoxColumn 公司名称; + private System.Windows.Forms.DataGridViewTextBoxColumn 关键词; + private System.Windows.Forms.DataGridViewTextBoxColumn 排名; + private System.Windows.Forms.DataGridViewTextBoxColumn 查询时间; + private System.Windows.Forms.DataGridViewTextBoxColumn company; + private System.Windows.Forms.DataGridViewTextBoxColumn keyword; + private System.Windows.Forms.RadioButton cnAli; + private System.Windows.Forms.RadioButton enAli; + private System.Windows.Forms.Label label1; + private System.Windows.Forms.Label state; + private System.Windows.Forms.Button saveout; + private System.Windows.Forms.Button readin; + private System.Windows.Forms.OpenFileDialog openFile; + private System.Windows.Forms.SaveFileDialog saveFile; + private System.ComponentModel.BackgroundWorker backgroundWorker; + private System.Windows.Forms.Button clearresult; + private System.Windows.Forms.Button clearsearch; + + } +} + diff --git a/Frm_Main.cs b/Frm_Main.cs new file mode 100644 index 0000000..c940269 --- /dev/null +++ b/Frm_Main.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; +using AliKeywordSearch; + +namespace EnAliKeywordSearch +{ + public partial class Frm_Main : Form + { + public Frm_Main() + { + InitializeComponent(); + + backgroundWorker.ProgressChanged += backgroundWorker_ProgressChanged; + backgroundWorker.DoWork += backgroundWorker_DoWork; + backgroundWorker.RunWorkerCompleted += backgroundWorker_RunWorkerCompleted; + } + + private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + + } + + void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + + } + private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) + { + + } + + + void DoWork(object sender, DoWorkEventArgs e) + { + BackgroundWorker bw = sender as BackgroundWorker; + + } + + + private void search_Click(object sender, EventArgs e) + { + search.Enabled = false; + foreach (DataGridViewRow item in this.SearchView.Rows) + { + string cpy = item.Cells["company"].Value == null ? "" : item.Cells["company"].Value.ToString(); + string keys = item.Cells["keyword"].Value == null ? "" : item.Cells["keyword"].Value.ToString(); + if (cpy != "" && keys != "") + { + foreach (string key in keys.Split(',')) + { + int maxpage = this.ToInt(max.Text); + int index = this.ResultView.Rows.Add(); + this.ResultView.Rows[index].Cells["公司名称"].Value = cpy; + this.ResultView.Rows[index].Cells["关键词"].Value = key; + state.Text = "正在查询 " + cpy + " 的关键词 " + key; + Application.DoEvents(); + for (int i = 1; i <= maxpage; i++) + { + string url = string.Empty; + this.ResultView.Rows[index].Cells["排名"].Value = "正在查询第" + i + "页..."; + Application.DoEvents(); + if (enAli.Checked == true) + url = String.Format("http://www.alibaba.com/products/F0/{0}/{1}.html", key, i); + else + url = String.Format("http://s.1688.com/selloffer/offer_search.htm?keywords={0}&beginPage={1}", key, i); + string htmldoc = HttpHelper.Get(url); + if (string.IsNullOrEmpty(htmldoc)) + { + this.ResultView.Rows[index].Cells["排名"].Value = "网页抓取失败"; + break; + } + if (htmldoc.Contains(cpy)) + { + this.ResultView.Rows[index].Cells["排名"].Value = "第" + i + "页"; + break; + } + if (i == maxpage) + { + this.ResultView.Rows[index].Cells["排名"].Value = maxpage + "页以后"; + break; + } + Application.DoEvents(); + } + this.ResultView.Rows[index].Cells["查询时间"].Value = DateTime.Now.ToString(); + Application.DoEvents(); + } + } + Application.DoEvents(); + } + state.Text = "所有关键词查询完成!"; + search.Enabled = true; + } + + private int ToInt(String str) + { + int s = 0; + int.TryParse(str, out s); + return s; + } + + private void Frm_Main_Load(object sender, EventArgs e) + { + + } + #region 窗体事件 + private void saveout_Click(object sender, EventArgs e) + { + SaveFileDialog cpm = new SaveFileDialog(); + cpm.Filter = "查排名数据|*.cpm"; + if (cpm.ShowDialog() == DialogResult.OK) + { + List data = new List(); + foreach (DataGridViewRow item in this.SearchView.Rows) + { + string cpy = item.Cells["company"].Value == null ? "" : item.Cells["company"].Value.ToString(); + string keys = item.Cells["keyword"].Value == null ? "" : item.Cells["keyword"].Value.ToString(); + if (cpy != "" && keys != "") + data.Add(cpy + "|" + keys); + } + Config cfg = new Config(cpm.FileName); + cfg.WriteListToTextFile(data); + } + } + + private void readin_Click(object sender, EventArgs e) + { + OpenFileDialog cpm = new OpenFileDialog(); + cpm.Filter = "查排名数据|*.cpm"; + if (cpm.ShowDialog() == DialogResult.OK) + { + Config cfg = new Config(cpm.FileName); + List data = cfg.ReadTextFileToList(); + string cpy = string.Empty; + string keys = string.Empty; + foreach (string item in data) + { + string[] str = item.Split('|'); + if (str.Length == 2) + { + cpy = str[0]; + keys = str[1]; + int index = this.SearchView.Rows.Add(); + this.SearchView.Rows[index].Cells["company"].Value = cpy; + this.SearchView.Rows[index].Cells["keyword"].Value = keys; + } + } + } + } + + private void clearresult_Click(object sender, EventArgs e) + { + ResultView.Rows.Clear(); + } + + private void clearsearch_Click(object sender, EventArgs e) + { + SearchView.Rows.Clear(); + } + #endregion + } +} diff --git a/Frm_Main.resx b/Frm_Main.resx new file mode 100644 index 0000000..78c19b4 --- /dev/null +++ b/Frm_Main.resx @@ -0,0 +1,449 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + True + + + True + + + True + + + True + + + True + + + True + + + 17, 17 + + + 161, 17 + + + 262, 17 + + + + + AAABAAQAEBAAAAEACABoBQAARgAAADAwAAABACAAqCUAAK4FAAAgIAAAAQAgAKgQAABWKwAAGBgAAAEA + IACICQAA/jsAACgAAAAQAAAAIAAAAAEACAAAAAAAQAEAAAAAAAAAAAAAAAEAAAAAAAAAAAAA////AI1Q + CwDFdBsAxHARAMRxEQDDbg4AxHYeANSvhgASo/MAEaH0ABKi8wANofQAQKPgAL9qCwC+ZgAAvmQAAL9t + DgDRq4AAAprzAACZ8wABmvIAAJn0ADSc3gC9aAkAu2QAALxkAAC7YQAAvWsMANCqgAAAl/QAAJb0AACW + 9gAxmd8AumkQALplBQC6ZgUAumMFALttEwDPqoEAB5fyAAWW8wAGl/IABZb0ADeZ3gC/jlYAvIpQAL2K + TwC9iU4Av5FcAFKo4ABRp94AUqjfAFCn3wB0rtgAu3AeALlrFQC5axMAuWoSALViBQC0ZA0AsWYPAMVo + BwAXmPMAEpf2ABSY9gARl/cAQZvhALNkDACxXwIAsF8CALBgAwC2XwAAu14AALdgAAAGjPEAAov1AAOM + 9AABivUANJHfAK9jCwCtXQAArF4BALRYAAB6bVIASXycAEx6lQBYhKIAEZf4AAGH8wAAh/YAAIf1AACG + 9gAzjd8Aq2EKAKlcAACpWwAAplwCALJiDQBReJIAAIv/AACH/wAAg/QAAIX2AACE9QABhfQAAIT2ADOL + 3gCnXgsApFgAAKVYAACgWQUAK5LpAAOA8gABgvIAAIP3AACD9gAAgvQAAYP1AACB9gAziN4ApVwLAKJX + AACiWAAAnlgHABeT/wAEfvQABn3xAAd98AAFffEAAH31AAF99QAAfPYANIXeAKFbCwCfVQAAnlUAAJ1W + AwABevQAAHr1AAB49gAzgt8AnlgLAJxUAACbVQMAAnj0AAB29QABd/UAAHb2ADSA4ACdVwsAmVMAAJlS + AACYUwMAAnbzAAB29AABd/QAAHT1ADR/3wCbWAoAmFMCAAF19gAAc/YAAHL3ADV94QCISgAAh0kAAIdK + AwADaOAAAGbgAANn4AAAZOEANXXQALBsaQAoAAAAV2hpAGUAZQCcdGkAnHRpABQAAABXaGkASAcAABsA + AAAAAAAACAAAADAlIABoaXQAAKO0APBsaQAUCWgAQAAAADR4MgAUAAAAGwAAAAAAAAAKAAAAICAgACAg + NAAyMAAA9HRpAPR0aQAUAAAAMjIsAKAHAAAbAAAAAAAAAAsAAAAgICAAICAyACwzOACwbGkAsGxpACgA + AABXaGkAZQBlADR1aQA0dWkAFAAAAFdoaQDgBwAAGwAAAAAAAAAIAAAAMCUgAGhpdAAAo7QA8GxpABQJ + aABAAAAANHgyABQAAAAbAAAAAAAAAAoAAAAgICAAICA0ADIwAACMdWkAjHVpABQAAAAyMSwAOAgAABsA + AAAAAAAACwAAACAgIAAgIDIALDM4ALBsaQCwbGkAKAAAAFdoaQBlAGUAzHVpAMx1aQAUAAAAAqWlpqcA + AAAAAACoqaqrrJ+Xl5igAAAAAAAAoaKdo6SWl5iYmQAAAAAAAJqbnJ2ejo+Pj5AAAAAAAACRkpOUlYaH + iIeJAAAAAAAAiouKjI15ent7fAB9fn+AgYKCg4SFbG1tbm8AcHFycnN0dXZ3eF5fYF9hYhpkZWVmZ2hp + amtQUVFRUlMaVVZXWFlaW1xdREVFRkVHSElKAABLTE1OTzc4ODk6Ozw9PgAAP0BBQkMAAAAAAAAAAAAA + AAAAAAAAIhoaGhoaAAAAAAAoKSorLBgaGhoaGgAAAAAAHh4fICEOGhoaGhoAAAAAABMUFRYXGhoaGhoa + AAAAAAAJCgsMDQfgAAAH4AAAB+AAAAfgAAAH4AAABAAAAAQAAAAAAAAAAAAAAABgAAAAYAAA//8AAAPg + AAAD4AAAA+AAAAPgAAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAAAAAAAAAAlGU9/3tE + Bv9+QwD/fUIA/3pCAP96QwD/ekMA/3tCAP95QQD/ekEA/3pBAP95QQD/eUEA/3pAAP95SBL/AAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAC2TL/wRdyv8FXsr/BF7K/wJfyv8DXcv/BFzL/wRdy/8EX8z/BF7M/wNdy/8DXcv/A13M/wRb + x/9uiL7/rXY//5hUBv+VUwD/lFIA/5ZTAP+VUwD/llIA/5dSAP+WUgD/llIA/5ZSAP+UUgD/lVIA/5VR + AP+SVhL/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + 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 + 9v8AfPb/AH31/wB99f8Affb/AH32/wB99v8Affb/AH72/wB99v8Affb/AH32/wB+9v8AffX/AX31/wN5 + 7/9uk8//tXo+/6NZBv+jWAD/o1gA/6NYAf+iWAH/olkA/6NZAP+iWQD/olkA/6JYAP+jWAD/o1gB/6JX + AP+dWxH/AAAAAAAAAAAAAAAAAAAAAECe9f8AfPT/AH/1/wB/9v8Af/b/AH/2/wB+9v8Af/b/AH72/wB/ + 9v8Af/b/AH/2/wB/9v8Afvb/AH/2/wB/9v8Af/b/AH/2/wB/9v8Af/b/AH/2/wB/9v8Af/b/AH/2/wB/ + 9v8Af/X/AH/1/wF77/9ulM7/tno+/6RbBv+lWQD/pFgA/6RZAf+kWQH/pFgB/6RZAf+kWQH/pFkB/6RY + Af+kWAH/pFkB/6NYAP+dXBD/AAAAAAAAAAAAAAAAAAAAAECf9f8AfPX/AH/1/wB/9v8Af/b/AH/2/wB/ + 9v8AgPb/AH/2/wB/9v8Af/b/AH/2/wB/9v8Af/b/AH/2/wB/9v8Af/b/AID2/wCA9v8Af/b/AH/2/wB/ + 9v8Af/b/AID2/wB/9v8AgPb/AID2/wB87/9tlM7/t3o+/6VbBv+lWQD/pVgA/6RZAP+kWQD/pFkA/6VY + AP+lWQD/pVkA/6VZAP+lWQD/pVgA/6VZAP+fXRH/AAAAAAAAAAAAAAAAAAAAAECg9f8Af/X/AIL1/wCC + 9v8Agvb/AIL2/wCC9v8Agvb/AIL2/wCC9v8Agvb/AIL2/wCC9v8Agvb/AIL2/wCC9v8Agvb/AIL2/wCC + 9v8Agvb/AIL2/wCC9v8Agvb/AIL2/wCC9v8AgvX/AYH1/wJ97/9ulc7/t3s+/6ZbBP+lWQD/pVkA/6VZ + AP+lWQD/pVkA/6VZAP+mWQD/plkA/6ZZAP+mWQD/pVkA/6VZAP+gXhH/AAAAAAAAAAAAAAAAAAAAAECi + 9v8AgfT/AIP1/wCE9v8AhPb/AIT2/wCE9v8AhPb/AIT2/wCE9v8AhPb/AIT2/wCE9v8AhPb/AIT2/wCE + 9v8AhPb/AIT2/wCE9v8AhPb/AIT2/wCE9v8AhPb/AIT2/wCE9v8AhPX/AIT1/wF+7/9tlc3/t3s+/6db + Bf+mWgD/ploA/6daAP+nWwD/p1sA/6dbAP+nWwD/p1sA/6dbAP+nWwD/p1oA/6haAP+hWwr/AAAAAAAA + AAAAAAAAAAAAADaP2v8AhPf/AIX1/wCG9v8Ahvb/AIb2/wCG9v8Ahvb/AIX2/wCG9v8Ahvb/AIb2/wCG + 9v8Ahvb/AIb2/wCG9v8Ahvb/AIb2/wCG9v8Ahvb/AIb2/wCG9v8Ahvb/AIb2/wCG9v8Ahvb/AIb2/wCA + 7v9tmM7/uXs+/6hdBP+oXAD/qFwA/6hbAP+oWwD/qFsA/6hbAP+oWwD/qFsA/6hbAP+oWwD/qFsA/6db + AP+nWwD/pFgA/6NWAP+jVgD/oFkL/zOAwv8Ahvj/AIX1/wCF9v8Ahfb/AIX2/wCF9v8Ahvb/AIb2/wCF + 9v8Ahfb/AIX2/wCF9v8Ahfb/AIb2/wCG9v8Ahfb/AIX2/wCF9v8Ahfb/AIX2/wCF9v8Ahfb/AIb2/wCF + 9v8Ahfb/AIX2/wCB7v9tmM7/unw9/6ldBP+qXQD/ql0A/6pcAP+qXQD/ql0B/6pdAf+qXQH/ql0B/6pd + Af+qXQH/qV0A/6ldAP+rXgD/q14B/6tdAP+rXQD/qV8P/zSCw/8Ah/j/AIb1/wCG9f8Ahvb/AIb2/wCG + 9v8Ahvb/AIb2/wCG9v8Ahvb/AIX2/wCG9v8Ahvb/AIX2/wCG9v8Ahvb/AIb2/wCF9v8Ahfb/AIX2/wCF + 9v8Ahfb/AIb2/wCG9v8Ahfb/AIb2/wGB7v9tmc3/un49/6xeBv+sXgH/rF4B/6xeAf+tXgD/rV4A/6xe + Af+tXgH/rF8B/61eAP+tXgH/rV4B/61fAf+tXgH/rF4B/61eAf+sXgD/q18P/zWCw/8Ah/j/AIf1/wCH + 9f8Ah/X/AIf1/wCH9v8Ah/b/AIf2/wCH9v8Ahvb/AIb2/wCG9v8Ah/b/AIb2/wCG9v8Ahvb/AIb2/wCG + 9v8Ahvb/AIb2/wCG9v8Ahvb/AIb2/wCG9v8Ahvb/AIf2/wGC7v9tmM3/u30+/6xfBv+tXwH/rV4A/61e + AP+sXgD/rV4A/61eAf+tXgH/rV4A/61eAf+tXgD/rV4B/61eAP+tXgH/rV4B/61eAf+tXQH/q2AR/zOD + xf8Ah/r/AIf3/wCH9/8Ah/f/AIf3/wCH9/8Ah/f/AIf3/wCG9f8AhfX/AIT1/wCE9f8AhfT/AIf1/wCI + 9v8Ah/b/AIf2/wCH9v8AiPb/AIf2/wCH9v8AiPb/AIf2/wCH9v8AiPX/AIn2/wKD7v9tmc7/vH4+/61f + Bf+tXgD/rV4A/61eAP+tXgD/rV4A/61eAP+tXgD/rV4A/61eAP+uXgD/rV4A/65eAP+tXgD/rl4A/61e + AP+uXQH/rGAO/1eEnv80isr/NYnI/zWJyP81icj/NYrI/zSKyP81icf/NI3P/0Gl8P9DpvP/Qqbz/0Sm + 8v83oPP/BYn0/wCG9f8AiPb/AIj2/wCI9v8AiPb/AIj2/wCI9v8AiPb/AIj2/wCI9v8AiPX/AIj2/wGE + 7/9tms7/vYA+/7BgBP+wXgD/sF4A/69dAP+vXQD/sF0A/69dAP+wXQD/r10A/69dAP+wXQD/sF0A/7Bd + AP+vXQD/sF0A/7BdAP+wXgH/r14C/6piEP+pZRP/qWUT/6plE/+qZRP/qWUT/6llE/+qZBP/pnY//wAA + AAAAAAAAAAAAAAAAAAAAAAAADY/0/wCI9f8Aivb/AIr2/wCL9v8Aivb/AIr2/wCK9v8Aivb/AIr2/wCL + 9v8AivX/AIr2/wGF7v9tms7/vn4+/7BgBf+wXwD/sF4A/7BfAP+wXwD/sF8A/69fAP+wXwD/sF8A/7Bf + AP+wXwD/sF8A/7BfAP+wXwD/sF8A/7BfAP+wXwD/sF8A/7BfAP+wXwD/sF8A/7BfAP+wXgD/sF4A/7Bf + AP+wXAD/rW8v/wAAAAAAAAAAAAAAAAAAAAAAAAAAC5D0/wCJ9f8Aivb/AIr2/wCL9v8Ai/b/AIr2/wCK + 9v8Aivb/AIv2/wCK9v8Ai/X/AYr2/wGH7/9tm8//vn4+/7BfBf+xXwD/sV8A/7FgAP+xYAD/sWAA/7Fg + AP+wYAD/sWAA/7FgAP+xYAD/sWAA/7FgAP+xYAD/sWAA/7FgAP+xYAD/sWAA/7FgAP+xYAD/sWAA/7Fg + AP+xYAD/sWAA/7FfAP+wXgD/rXAw/wAAAAAAAAAAAAAAAAAAAAAAAAAADJD0/wCK9f8Ai/b/AIr2/wCL + 9v8Ai/b/AIr2/wCK9v8Aivb/AIv2/wCK9v8AivX/AIr2/wGI7/9tnM//wIA+/7NgBf+yXgD/sl4A/7Je + AP+yXgD/sl4A/7JeAP+yXgD/sl8A/7JfAP+yXgD/sV4A/7FeAP+yXgD/sl4A/7JeAP+yXgD/sl4A/7Je + AP+yXwD/sl8A/7JfAP+yXwD/sl4A/7JeAP+wXgD/rnEv/wAAAAAAAAAAAAAAAAAAAAAAAAAADJL0/wCL + 9f8AjPX/AIz2/wCM9f8AjPX/AIz1/wCM9f8AjPX/AIz2/wCM9v8AjPX/AIz1/wCI7v9tm87/v388/7Jf + A/+xXgD/sV0A/7JdAP+yXgD/s10A/7JdAP+zXgD/sl0A/7JdAP+yXgD/sl4A/7JeAP+yXQD/sl4A/7Je + AP+zXgD/sl4A/7JdAP+xXQD/sF4A/7FeAP+yXgD/sl0A/7JdAP+xXAD/rnAv/wAAAAAAAAAAAAAAAAAA + AAAAAAAACpH0/wCM9P8AjvT/AI70/wCO9f8AjvX/AI71/wCO9f8AjfT/AI70/wCO9P8AjvT/AI30/wCI + 7f9sm83/y5Vc/8B7Mf+/ey3/wHst/8B7LP/Aey3/wHou/8B6Lf/Beyz/wHss/8F8LP/BfCz/wXws/8B7 + LP/AfC3/wHwt/8B8LP/Aey3/wHou/8B6Lf/AfC3/wHwt/8B9Lf/AfCz/v3st/797LP+/eCz/vIdR/wAA + AAAAAAAAAAAAAAAAAAAAAAAANab0/yuj9f8spPT/LKP0/yuj9f8ro/X/K6L1/yyh9f8rovT/K6Pz/yyk + 9f8so/X/LKP0/yyf7/9/r9f/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvGQA/7xk + AP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY + 9P8AmPT/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xk + AP+8ZAD/vGQA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY + 9P8AmPT/AJj0/wCY9P8AmPT/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xk + AP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY + 9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xk + AP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJj0/wCY9P8AmPT/AJj0/wCY + 9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/vGQA/7xkAP+8ZAD/vGQA/7xk + AP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJj0/wCY + 9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/vGQA/7xk + AP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY + 9P8AmPT/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xk + AP+8ZAD/vGQA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY + 9P8AmPT/AJj0/wCY9P8AmPT/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xk + AP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY + 9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xk + AP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJj0/wCY9P8AmPT/AJj0/wCY + 9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/vGQA/7xkAP+8ZAD/vGQA/7xk + AP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/wAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJj0/wCY + 9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/vGQA/7xk + AP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/wAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY + 9P8AmPT/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xk + AP+8ZAD/vGQA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY + 9P8AmPT/AJj0/wCY9P8AmPT/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/7xk + AP+8ZAD/vGQA/7xkAP+8ZAD/vGQA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY + 9P8AmPT/AJj0/wCY9P8AmPT/AJj0/wCY9P8AmPT/AAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AA + AAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB//+AAAAAAAH//4AAAAAAAf//gAAAAAAB + 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 + 9vUAfvf5AH32+QB+9/kAfvf5AH73+QB/9/kAfvb6AH72/gB/9v8Af/b/AH/2/wB+9v8Af/X/AH71/wB/ + 9f8Ae/T/XY/Q/6xnHf+kWAH/o1cA/6NZAP+kWAD/pFgA/6RYAP+kWAD/pFcA/6BbCv0AAAAAAAAAAAAA + AAAajfT/AH70+QGC9f8AgfT/AIL1/wCC9f8AgvX/AIL1/wCC9f8AgvX/AIL1/wCC9v8AgvX/AIL2/wCB + 9f8AgfX/AIL1/wB99P9dkND/rWcc/6VZAf+lWAD/plkA/6VaAP+mWQD/ploA/6VaAP+mWQD/oloG/gAA + AAAAAAAAAAAAAA6I8/8AgvX9AIX1/wCE9P8AhPb/AIT1/wCF9f8AhPX/AIX1/wCF9f8Ahfb/AIX1/wCF + 9v8Ahfb/AIX1/wCE9f8AhfX/AID0/1yR0P+uaBv/qFwA/6hbAP+oWgD/qFsA/6hbAP+nWwD/qFsA/6da + AP+nWwD/p18K/7RaAf+MZjn/CIXy/wCE9P8AhPP/AIT0/wCE9P8AhfX/AYT2/wGE9f8AhfX/AIX1/wCF + 9f8AhPb/AIT1/wCE9v8Ahfb/AIX1/wCF9v8AgfT/XJTQ/7BpHP+rXQL/ql0A/6tdAP+rXQD/q10B/6td + AP+sXQD/q10A/6tdAP6pXQH7sFkA+4tnPfwHhvL/AIT0/gCE8/8AhfX+AIX1/wCE9P0AgvH6AIT2+gCD + 9voAhfb+AIX2/wCF9f8Ahfb/AIX2/wCF9f8AhfX/AIX1/wCC9P9dk8//sWod/6xeAv+sXQD/rF0A/6xd + AP+sXgD/q14A/61dAP+tXgD/rF0A/6teA/+yWwD/jWk+/w+L8/8HifX/CIn0/wiK9f8HifT/CY35/w2U + //8bh/P/FI3z/wCG9P8AhvX/AIb1/wCG9f8Ah/b/AIf1/wCG9f8Ah/X/AIP0/12U0P+0bBz/r14B/65c + AP+tXAD/rl0A/65dAP+uXQD/rl0A/69dAP+uXAD/rlwA/7BcAP+mYRL/im9F/4hvRf+Kb0X/iW9F/Ihv + SP8AAAAAAAAAAAAAAAAAAAAABYrz/gCH9P8Aifb/AIn0/wCI9f8AiPT/AIn0/wCJ9P8AhfP/XJbR/7Vs + Hf+wXwL/sF8A/7BfAP+vXgD/r2AA/7BfAP+wYAD/sGAA/7BgAP+wXwD/sGAA/7FfAP+2XQD/t10A/7Zd + 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 + + + \ No newline at end of file diff --git a/HttpHelper.cs b/HttpHelper.cs new file mode 100644 index 0000000..a3abdf1 --- /dev/null +++ b/HttpHelper.cs @@ -0,0 +1,326 @@ +using System; +using System.Collections; +using System.Diagnostics; +using System.IO; +using System.Net; +using System.Net.Security; +using System.Net.Sockets; +using System.Security.Authentication; +using System.Security.Cryptography.X509Certificates; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +/************************************************************************/ +/* Author:huliang + * Email:huliang@yahoo.cn + * QQ:12658501 + * 说明:转载请注明出处 +/************************************************************************/ + +namespace EnAliKeywordSearch +{ + public class HttpArgs + { + public string Url { get; set; } + public string Host { get; set; } + public int Port { get; set; } + public string Accept { get; set; } + public string Referer { get; set; } + public string Cookie { get; set; } + public string Data { get; set; } + public string UA { get; set; } + + } + + public static class HttpHelper + { + /// + /// 提交方法 + /// + enum HttpMethod + { + GET, + POST + } + + #region HttpWebRequest & HttpWebResponse + + /// + /// Get方法 + /// + /// 请求地址 + /// Cookies存储器 + /// 请求返回的Stream + public static string Get(string url) + { + HttpArgs args = ParseURL(url); + string strhtml = InternalSocketHttp(args, HttpMethod.GET); + return strhtml; + } + + /// + /// Post方法 + /// + /// 请求地址 + /// Post数据 + /// Cllkies存储器 + /// 请求返回的流 + public static string Post(string url, + byte[] bytes, + CookieContainer cookies, + Encoding encoding) + { + return null; + } + + /// + /// 根据Url得到host + /// + /// url字符串 + /// host字符串 + private static HttpArgs ParseURL(string strUrl) + { + HttpArgs args = new HttpArgs(); + + args.Host = ""; + args.Port = 80; + args.Referer = ""; + args.Cookie = ""; + args.Url = ""; + args.Accept = "text/html";//,application/xhtml+xml,application/xml,application/json;"; + args.UA = "Mozilla/5.0+(Compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html)"; + + //http://www.alibaba.com/products/Egg_Laying_Block_Machine/1.html + int iIndex = strUrl.IndexOf(@"//"); + if (iIndex <= 0) + return null; + //www.alibaba.com:80/products/Egg_Laying_Block_Machine/1.html + string nohttpurl = strUrl.Substring(iIndex + 2); + string address = nohttpurl; + iIndex = nohttpurl.IndexOf(@"/"); + if (iIndex > 0) + { + //www.alibaba.com:80 + address = nohttpurl.Substring(0, iIndex); + args.Url = nohttpurl.Substring(iIndex); + } + iIndex = nohttpurl.IndexOf(@":"); + if (iIndex > 0) + { + string[] tempargs = nohttpurl.Trim().Split(char.Parse(":")); + args.Host = tempargs[0]; + args.Port = int.Parse(tempargs[1]); + } + else + { + //www.alibaba.com:80 + args.Host = address; + args.Port = 80; + } + return args; + } + #endregion + + #region Socket + + public static string Get(HttpArgs args) + { + return InternalSocketHttp(args, HttpMethod.GET); + } + + public static string Post(IPEndPoint endpoint, + HttpArgs args) + { + return InternalSocketHttp(args, HttpMethod.POST); + } + + static string InternalSocketHttp(HttpArgs args, HttpMethod method) + { + + using (Socket sK = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)) + { + try + { + sK.Connect(args.Host, args.Port); + if (sK.Connected) + { + byte[] buff = ParseHttpArgs(method, args); + if (sK.Send(buff) > 0) + { + string html = ParseResponse(sK, args); + return html; + } + } + } + catch (Exception ex) + { + Console.WriteLine(ex.Message); + } + } + return null; + } + + private static string ParseResponse(Socket sK, HttpArgs args) + { + string header = ReadHeaderProcess(sK); + if (header.StartsWith("HTTP/1.1 400 Bad Request")) + { + return string.Empty; + } + if (header.StartsWith("HTTP/1.1 302")) + { + int start = header + .ToUpper().IndexOf("LOCATION"); + if (start > 0) + { + string temp = header.Substring(start, header.Length - start); + string[] sArry = Regex.Split(temp, "\r\n"); + args.Url = sArry[0].Remove(0, 10); + return Get(args); //注意:302协议需要重定向 + } + } + else if (header.StartsWith("HTTP/1.1 200")) //继续读取内容 + { + int start = header.ToUpper().IndexOf("CONTENT-LENGTH"); + int content_length = 0; + if (start > 0) + { + string temp = header.Substring(start, header.Length - start); + string[] sArry = Regex.Split(temp, "\r\n"); + content_length = Convert.ToInt32(sArry[0].Split(':')[1]); + if (content_length > 0) + { + byte[] bytes = new byte[content_length]; + if (sK.Receive(bytes) > 0) + { + return Encoding.Default.GetString(bytes); + } + } + } + else + { + //不存在Content-Length协议头 + return ParseResponse(sK); + } + } + return string.Empty; + } + + /// + /// 读取协议头 + /// + /// + /// + static string ReadHeaderProcess(Socket sK) + { + StringBuilder bulider = new StringBuilder(); + while (true) + { + byte[] buff = new byte[1]; + int read = sK.Receive(buff, SocketFlags.None); + if (read > 0) + { + bulider.Append((char)buff[0]); + } + string temp = bulider.ToString(); + if (temp.Contains("\r\n\r\n") || temp.Contains("")) + { + break; + } + } + return bulider.ToString(); + } + /// + /// 注意:此函数可能产生死循环 + /// + /// + /// + static string ParseResponse(Socket sK) + { + StringBuilder bulider = new StringBuilder(); + byte[] buff = new byte[1024]; + int len = sK.Receive(buff); + string temp = string.Empty; + while (len > 0) + { + byte[] reads = new byte[len]; + Array.Copy(buff, 0, reads, 0, len); + bulider.Append(Encoding.Default.GetString(reads)); + temp = bulider.ToString(); + if (temp.ToUpper().Contains("") || temp.Contains("\0")) + { + break; + } + len = sK.Receive(buff); + } + return temp; + } + #endregion + + #region Helper + + static byte[] ParseHttpArgs(HttpMethod method, HttpArgs args) + { + StringBuilder bulider = new StringBuilder(); + if (method.Equals(HttpMethod.POST)) + { + bulider.AppendLine(string.Format("POST {0} HTTP/1.1", args.Url)); + bulider.AppendLine("Content-Type: application/x-www-form-urlencoded"); + } + else + { + bulider.AppendLine(string.Format("GET {0} HTTP/1.1", args.Url)); + } + + bulider.AppendLine(string.Format("Host: {0}:{1}", args.Host, args.Port)); + + bulider.AppendLine("User-Agent: " + args.UA); + //"User-Agent: Mozilla/5.0+(Compatible;+Baiduspider/2.0;++http://www.baidu.com/search/spider.html)";Mozilla/5.0 (Windows NT 6.1; IE 9.0) + if (!string.IsNullOrEmpty(args.Referer)) + bulider.AppendLine(string.Format("Referer: {0}", args.Referer)); + + //bulider.AppendLine("Connection: close"); + + if (!string.IsNullOrEmpty(args.Accept)) + bulider.AppendLine(string.Format("Accept: {0}", args.Accept)); + + if (!string.IsNullOrEmpty(args.Cookie)) + bulider.AppendLine(string.Format("Cookie: {0}", args.Cookie)); + + if (method.Equals(HttpMethod.POST)) + { + bulider.AppendLine(string.Format("Content-Length: {0}\r\n", Encoding.Default.GetBytes(args.Data).Length)); + bulider.Append(args.Data); + } + else + { + bulider.Append("\r\n"); + } + + string header = bulider.ToString(); + return Encoding.Default.GetBytes(header); + } + #endregion + + } + + public class MilliTimer + { + private static double times { get; set; } + public static void start() + { + times = getTotalMilliseconds(); + } + + public static double getTimes() + { + return getTotalMilliseconds() - times; + } + + + public static double getTotalMilliseconds() + { + return DateTime.Now.Subtract(DateTime.Parse("1970-1-1")).TotalMilliseconds; + } + } +} \ No newline at end of file diff --git a/Program.cs b/Program.cs new file mode 100644 index 0000000..0fe3396 --- /dev/null +++ b/Program.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Windows.Forms; + +namespace EnAliKeywordSearch +{ + static class Program + { + /// + /// 应用程序的主入口点。 + /// + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Frm_Main()); + } + } +} diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..3374a48 --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// 有关程序集的常规信息通过以下 +// 特性集控制。更改这些特性值可修改 +// 与程序集关联的信息。 +[assembly: AssemblyTitle("EnAliKeywordSearch")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Microsoft")] +[assembly: AssemblyProduct("EnAliKeywordSearch")] +[assembly: AssemblyCopyright("Copyright © Microsoft 2015")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// 将 ComVisible 设置为 false 使此程序集中的类型 +// 对 COM 组件不可见。 如果需要从 COM 访问此程序集中的类型, +// 则将该类型上的 ComVisible 特性设置为 true。 +[assembly: ComVisible(false)] + +// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID +[assembly: Guid("d436c66a-3341-44b8-8ef1-c2307ea6cbd8")] + +// 程序集的版本信息由下面四个值组成: +// +// 主版本 +// 次版本 +// 生成号 +// 修订号 +// +// 可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值, +// 方法是按如下所示使用“*”: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/Resources.Designer.cs b/Properties/Resources.Designer.cs new file mode 100644 index 0000000..57d5df4 --- /dev/null +++ b/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.18444 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace AliKeywordSearch.Properties { + using System; + + + /// + /// 一个强类型的资源类,用于查找本地化的字符串等。 + /// + // 此类是由 StronglyTypedResourceBuilder + // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。 + // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen + // (以 /str 作为命令选项),或重新生成 VS 项目。 + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// 返回此类使用的缓存的 ResourceManager 实例。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AliKeywordSearch.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// 使用此强类型资源类,为所有资源查找 + /// 重写当前线程的 CurrentUICulture 属性。 + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Properties/Resources.resx b/Properties/Resources.resx new file mode 100644 index 0000000..af7dbeb --- /dev/null +++ b/Properties/Resources.resx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Properties/Settings.Designer.cs b/Properties/Settings.Designer.cs new file mode 100644 index 0000000..fd418d5 --- /dev/null +++ b/Properties/Settings.Designer.cs @@ -0,0 +1,26 @@ +//------------------------------------------------------------------------------ +// +// 此代码由工具生成。 +// 运行时版本:4.0.30319.18444 +// +// 对此文件的更改可能会导致不正确的行为,并且如果 +// 重新生成代码,这些更改将会丢失。 +// +//------------------------------------------------------------------------------ + +namespace AliKeywordSearch.Properties { + + + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "12.0.0.0")] + internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { + + private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); + + public static Settings Default { + get { + return defaultInstance; + } + } + } +} diff --git a/Properties/Settings.settings b/Properties/Settings.settings new file mode 100644 index 0000000..3964565 --- /dev/null +++ b/Properties/Settings.settings @@ -0,0 +1,7 @@ + + + + + + + diff --git a/app.config b/app.config new file mode 100644 index 0000000..2fa6e95 --- /dev/null +++ b/app.config @@ -0,0 +1,3 @@ + + + diff --git a/icon.ico b/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b7ec715a704e914a4e9d8b5dee56c8e0440da168 GIT binary patch literal 17798 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 literal 0 HcmV?d00001