プログラムソース
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の調べ方
- Chromeで対象サイトを開く
- Dev Tools起動(F12キー)
- 調べたい箇所(タイトル部分)にマウスカーソルを持ってゆく
- 右クリック→「Copy」→「Copy XPath」
で大体の構造が取得できます。
このXPathはそのままでは使えず、
- 配列番号を取り除く
- 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
を修正します。