えろびりねーまー | 自分で修正したい人向けの情報

もくじ(押すと各章に飛ぶ)

プログラムソース

GitHubから落とすかフォークしてください。

  • Microsoft Visual Studio 2022のソリューション形式です。
    解凍フォルダ直下のVideoTitleGetter.slnを開きます。
  • 必須ライブラリのHtml Agility Packも含めています(※)ので、VS2022で開けば即ビルドできます。
    (※…MITライセンスだから大丈夫のハズ)

新しいWebサービスに対応させるには

***Scraper.csを追加

Yugen.Tools.Web.Scraperディレクトリの中に各Webサービス用のスクレイパーがあります。
(全てIScraper.csを継承しています)

新しいWebサービスが現れたら、適当なファイルをコピって新しい***Scraper.csを作ってください。

以下、既存のGoogleScraper.csを例に説明します。

定数を修正

cUaNameに普遍的な(弾かれにくい)UA文字列を入れます。

cBaseURLにWebサービスのベースURLを入れます。

cFileNameListXPathに検索結果のファイル名に当たる部分のXPathを入れます。

備考:XPathの調べ方
  1. Chromeで対象サイトを開く
  2. Dev Tools起動(F12キー)
  3. 調べたい箇所(タイトル部分)にマウスカーソルを持ってゆく
  4. 右クリック→「Copy」→「Copy XPath」

で大体の構造が取得できます。

このXPathはそのままでは使えず、

  1. 配列番号を取り除く
  2. id/class指定によりデザイン変更に強くする

等の調整が必要です。

クエリURLを調整(GetFilenamesメソッド)

ソースの39行目、

var url = cBaseURL + "q=" + condition;

のように、クエリURL(GETメソッド)を完成させます。

POSTメソッドじゃないとダメな場合は…頑張ってgetFromWebなどを弄ってください。
(今の所、そういう所にブチ当たってない)

LINQ文の調整(GetFilenamesメソッド)

ソースの54行目、

var articles
  = htmlDoc.DocumentNode
    .SelectNodes(cFileNameListXPath)
    .Select(a => new
    {
      Title = a.FirstChild.InnerText.Trim(),
    });

cFileNameListXPathのXPathとTitle = a.FirstChild.InnerText.Trim()の右辺を調整しながら、Titleに動画タイトルが入るようにLINQ文を組み立てます。

まあ極端な話、このメソッドがタイトルの一覧(List<string>)さえ返せれば、中身はゴリゴリの文字走査ループだろうが正規表現を駆使しようが、手段は何でもいいです。

フォームの修正

Form1.csをデザイナーで開き、検索先のラジオボタンを増やします。

あわせて同フォームのselectScraper()サブルーチンにif文を追加します。

if (rbtSearchNyaaSi.Checked) return new NyaaSiScraper();
if (rbtSearchNyaa.Checked) return new NyaaPantsuScraper();
if (rbtSearchGoogle.Checked) return new GoogleScraper();

以上で、新サイトへの対応は終わりです。

バージョン番号の変更箇所

プロジェクトのプロパティ
→アプリケーション
→アセンブリ情報
→アセンブリバージョン/ファイルバージョン

にバージョン番号をセットします。

またはAssemblyInfo.csを修正します。

もくじ(押すと各章に飛ぶ)