簡単なファイルパーサーを作成します(初心者向け)

この記事では、サイトaimp.ruおよびgeekbrains.ruの例を使用して、簡単なパーサーを作成する方法を説明します。 この記事は、C#プログラミング言語の基本的な知識をすでに持ち、最初の「Hello world」をすでに作成している人を対象としています。



私は常にAimpオーディオプレーヤーが好きでした(いいえ、これは広告ではありません)が、組み込みのスキンが少なすぎるため、サイトに行き、スキンを見て、ダウンロードして、どのように見えるか試してみたくはありませんでした。 そのため、このサイトからスキンパーサーを作成することにしました。 サイトを少し見てみると、割り当てられたIDでスキンが順番に格納されていることに気付きました。 なぜなら 最近まで、私は1Cと小さなコマンドラインしか知らなかったので、二度考えずにコマンドラインで書くことにしました。 しかし、テスト中に、大量のファイルをダウンロードすると、まず、その部分が単純にダウンロードされず、次にRAMオーバーフローが発生する可能性があることがわかりました。 最後に、私はこのベンチャーをやめました。



少し前に、C#の勉強を始めて、少し練習するためにこの考えに戻ることにしました。 カットの下でこれを読んだもの。



開発には、開発環境のみが必要です。VisualStudioを使用しましたが、好みに応じて他のものを使用できます。



私はC#の基本的な概念を掘り下げることはせず、このためにさまざまな本が書かれており、無数のビデオが撮影されています。



最初に、Visual Studioを起動し、コンソールアプリケーションを作成します( フォームを作成するのが面倒なので、インターフェイスは必要ありません)。 開発環境は、プロジェクトテンプレートを準備します。 次のようなものが得られます。



using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication2 { class Program { static void Main(string[] args) { } } }
      
      





現在使用しないディレクティブを削除します。



 using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;
      
      





そして、使用するディレクティブを追加します。



 using System.Diagnostics; // ,     using System.Net; // ,    Web using System.Threading; // ,   
      
      





次に、 Mainメソッドで変数を宣言します。



 WebClient wc = new WebClient(); //       Web
      
      





Parsim Aimp Skins



次に、関数自体を記述します。



 static string DownloadSkinsForAimp(WebClient wc) { Console.WriteLine("Downloading began"); try { for (int i = 0; i <= 5; i++) { string id = "79" + i; string name = GetNameOfSkin(wc, id); // ,     string path = "aimp.ru/index.php?do=download&sub=catalog&id=" + id; try { //             Process.Start("chrome.exe", path); Console.WriteLine("Download " + name + " is succesfull!"); //  5 ,    ,      Thread.Sleep(5000); } catch { Console.WriteLine("Download" + name + "failed"); } } } catch { return "\nSomething went is wrong"; } return "\nDownloading complete"; }
      
      





すべてのスキンは、ブラウザ設定で指定されたディレクトリにダウンロードされます。 エラーのためにプログラムが「クラッシュ」しないように、 try / catch構造が必要です。 それらなしで行うことは可能でしたが。



GetNameOfSkin関数に気づいたかもしれません。 ダウンロードするスキンの名前を取得するために必要です。 あなたはそれなしで行うことができます、それは美しさのためだけに必要ですが、私たちはただ学習しているので、私たちはそれを書きます:



  static string GetNameOfSkin(WebClient wc, string id) { //    html  string html = wc.DownloadString("http://www.aimp.ru/index.php?do=catalog&rec_id=" + id); //        id      //     5    id string rightPartOfHtml = html.Substring(html.IndexOf(id) + 5); //         string name = rightPartOfHtml.Substring(0, rightPartOfHtml.IndexOf("<")).Replace(" ", "_"); //         return name; }
      
      





次に、 Mainメソッドで、ダウンロードを呼び出して実行する必要があります。



 Console.WriteLine(DownloadSkinsForAimp(wc)); //     ,  //       
      
      





Parsim証明書Geekbrains



サイト上の証明書は開いた形式で保存され、aimpスキンのようにサイトを通じてそれらを開くと、ダウンロードボタンをクリックして手動でのみダウンロードできます。 しかし、これはそうではなく、私たちはプログラマーです。



ここでは、 WebClientクラス、つまりそのDownloadFileメソッドが役立ちます。 ダウンロードするためのパスと保存するためのパスを彼に与えるだけで、彼は私たちのためにすべてをします。 それは簡単に聞こえます、やってみてください:



 static string DownloadCertificates(WebClient wc) { //   ,      string currentUser = Environment.UserName; Console.WriteLine("Downloading began"); try { for (int i = 0; i <= 5; i++) { try { //         '.pdf' wc.DownloadFile("https://geekbrains.ru//certificates//7075" + i + ".pdf", "c:\\users\\" + currentUser + "\\downloads\\7075" + i + ".pdf"); Console.WriteLine("Download certificate №7075" + i + " is succesfull"); } catch { Console.WriteLine("Download certificate №7075" + i + " is failed"); } } } catch { return "\nSomething went is wrong"; } return "\nDownloading certificates are complite!"; }
      
      





その後、まったく同じ方法でMainメソッドからこの関数を呼び出します。



一般に、これらの機能はどちらもまだ改善の余地がありますが、解析の最も基本的な機能に慣れるには非常に適していると思います。 これをすべて1つのプロジェクトにまとめるのが面倒です-GitHubへリンクです。



ご清聴ありがとうございました。これが誰かの役に立つことを願っています。



PS:geekbrainsを使用した証明書をダウンロードし、所有者の名前と姓を自分のものに変更して賞賛することができます。



PPS:Aimp Webサイトからダウンロードされたすべてのスキンは「.zip」形式で保存されます。必要に応じて、関数を変更して解凍できるようにすることができます。 追加して、Aimpスキンのあるフォルダーにすぐに転送されるようにすることもできます。



PPPS:この記事は情報提供のみを目的としており、広告キャラクターを掲載していません。



All Articles