壊れたリンクを確認するためのコンソールバイク-LinkInspector

画像
壊れたリンクや存在しないリンクを毎週チェックするサイトが必要でした。 30分間インターネットをサーフィンした後、まともなコンソールアプリケーションを見つけました(Windowsにサーバーがあるため、このタスクにTaskShedulerを使用したかったため)。 それらのすべてが支払われたことが判明した。 そして、私は自分自身にいくらかの自由時間を与えることができ、一見タスクが難しくないように思えたので、私は自分で書くことに決めました。

この実装であるWebSpiderに基づい構築することにしましたが、通常は最終的に行われるので、私は好きなようにほとんどすべてを書き直しました。

私は自分が必要なものの短いリストを作成し、少しずつタスクを削除しました:
挑戦する説明ステータス
すべてのリンクを再帰的に収集する1つのサイト内のすべてのページを調べて、すべてのリンクを収集します
Nリンクを確認主にデバッグ目的で、N個のリンクを確認した後に停止します
結果をファイルに保存TXTに保存
HTMLテンプレートを使用して結果を保存する読みやすくするために、フィルタリングとソート用のjqueryデータテーブルプラグインをねじ込みます
エラーのみを表示ファイルレポートに壊れたリンクを表示する
レポートファイルのアーカイブオプション7zipサポートを追加していない
結果をメールで送信コンソールメーラーサポートを追加するしていない
レポートにリダイレクトを表示するすべてのリダイレクトを正しく処理し、それらに関する情報をレポートに表示しますしていない
ロギングを追加Log4Netライブラリを追加するしていない
HTMLテンプレートの一般的なプロセス情報処理の開始時、終了時、およびhtmlテンプレートの他の一般情報を表示しますしていない
正しいリダイレクト処理を確認して構成するしていない
app.configのデフォルト構成ユーティリティにはパラメーターが多すぎるため、app.configからデフォルトの構成を作成する必要があると判断しましたしていない


プログラムは簡単に不名誉です:
1.入力は、コンテンツがダウンロードされるURIであり、正規表現を使用してコンテンツ内のリンクが検索されます。
public const string UrlExtractor = @"(?: href\s*=)(?:[\s""']*)(?!#|mailto|location.|javascript|.*css|.*this\.)(?<url>.*?)(?:[\s>""'])"; 

2.このサイトに関連する場合、見つかったすべてのリンクはハッシュテーブルに配置されます。キーは絶対URIであるため、重複はありません。
3.ハッシュテーブルからの各リンクに対して、リクエストを作成し、レスポンスを取得して、リターンステータスを読み取ります。
 public bool Process(WebPageState state) { state.ProcessSuccessfull = false; HttpWebRequest request = (HttpWebRequest) WebRequest.Create(state.Uri); request.Method = "GET"; WebResponse response = null; try { response = request.GetResponse(); if (response is HttpWebResponse) state.StatusCode = ((HttpWebResponse) response).StatusCode; else if (response is FileWebResponse) state.StatusCode = HttpStatusCode.OK; if (state.StatusCode.Equals(HttpStatusCode.OK)) { var sr = new StreamReader(response.GetResponseStream()); state.Content = sr.ReadToEnd(); if (ContentHandler != null) ContentHandler(state); state.ProcessSuccessfull = true; } } catch (Exception ex) { //   todo:   catch  } finally { if (response != null) { response.Close(); } } return state.ProcessSuccessfull; } 


他のすべては可愛さとエントロピーです。

おもしろいことから:コンソールパラメータの便利な解析のためにこのパッケージhttps://nuget.org/packages/ManyConsoleを使用しました。

その結果、パラメーターを処理するために必要なことは、ここでそのようなクラスを作成することだけです:

 public class GetTime : ConsoleCommand { public GetTime() { Command = "get-text"; OneLineDescription = "Returns the current system time."; } public override int Run() { Console.WriteLine(DateTime.UtcNow); return 0; } } 


PSそして結論として、私は自分自身のためにプロジェクトを書いているので、まだ進行中なので、github https://github.com/alexsuslin/LinkInspectorに追加しました

ああそうだ...まだ最終的に何が起こるかを視覚的にまだ見ている人、ここではコンソールにある:
D:\WORK\Projects\Own\LinkInspector\LinkInspector\bin\Debug>LinkInspector.exe -u www.google.com -n=10 -ff=html -e

Executing -u (Specify the Url to inspect for broken links.):

======================================================================================================
Proccess URI: www.google.com
Start At : 2011-12-21 04:56:09
------------------------------------------------------------------------------------------------------

0/1 : [ 2.98s] [200] : www.google.com
1/7 : [ 0.47s] [200] : accounts.google.com/ServiceLogin?hl=be&continue=http://www.google.by/
2/6 : [ 0.22s] [200] : www.google.com/preferences?hl=be
3/5 : [ 0.27s] [200] : www.google.com/advanced_search?hl=be
4/7 : [ 0.55s] [200] : www.google.com/language_tools?hl=be
5/341 : [ 0.21s] [200] : www.google.by/setprefs?sig=0_OmYw86q6Bd9tjRx1su-C4ZbrJUU=&hl=ru
6/340 : [ 0.09s] [200] : www.google.com/intl/be/about.html
7/361 : [ 0.30s] [200] : www.google.com/ncr
8/361 : [ 0.21s] [200] : accounts.google.com/ServiceLogin?hl=be&continue=http://www.google.com/advanced_search?hl=be
9/360 : [ 0.13s] [200] : www.google.com/webhp?hl=be
------------------------------------------------------------------------------------------------------
Pages Processed: 10
Pages Pending : 0
End At : 2011-12-21 04:56:14
Elasped Time : 0h 0m 5s 456ms
======================================================================================================


または、ここにHTMLテンプレートのレポートのスクリーンショットがあります
画像

PPSコンパイル済みバイナリを要求されました。ここにあります: Link Inspector 0.1 alphaをダウンロードしてください

Source: https://habr.com/ru/post/J135055/


All Articles