指定したxmlを、Xpathを用いてRSSのitem要素まで読み込み、title link description要素等を抜き出してコンソールに出力したり、csvファイルに出力したりしている。
3.1実現した機能
ユーザーが指定したxml(ニュース系のサイトのものだと良い)から、ユーザーの指定した単語(例:コロナ 緊急事態宣言 逮捕 等)を含んでいる要素を取り出し、コンソールに出力、csvファイルにも出力する。
具体的な使い方としては、ExtractAnyWordFromXmlAndOutputToCsv.javaの171行目のwordに調べたい文字列、下のurl、url2に調べたいxml、siteName、siteName2に各自選んだサイトのわかりやすい題名(csvファイルの名前に使用)をいれる。
実行するとコンソールとcsvファイルに出力される。ファイル名は「” ユーザーの指定した単語””サイトの題名1”And”サイトの題名2”出力した時の年月日時刻.csv」となる。
URLは末尾がxml(RSS)でないと機能しない。
3.2 システムが利用するリソース
ユーザーが指定する者のため今回は例とする
名称: Yahoo!ニュース・トピックス - 国内
概要: Yahoo! JAPANのニュース・トピックスで取り上げている最新の見出しを提供しています。
利用目的:知りたいニュースの抽出
URL: https://news.yahoo.co.jp/topics/domestic?source=rss
形式: RSS
名称: NHKニュース
概要: 日本放送協会 NHKニュース
利用目的:知りたいニュースの抽出
URL: http://www3.nhk.or.jp/news/
形式: RSS
3.3 プログラムの構成
ExtractAnyWordFromXmlAndOutputToCsv.javaについて、DocumentでDOM ツリーの構築、ExtractAnyWordFromXmlAndOutputToCsvではFeedのURLをうけとるコンストラクタ、getItemListではユーザ指定の文字列を含むitem要素のリストを返し、mainでコンソールとcsvファイルの出力を行う。
Item.javaについて、toStringでこのitem要素の文字列表現を返す。コンソール出力用。
3.4 データ構造とアルゴリズム
getItemListでtitleかdescription要素にユーザの指定の文字列が含まれている場合のみitemListに追加するようにしたことで、ほかの不要なニュースを排除した。
3.5 その他の工夫点
コンソールに出力されるだけでは不便だと思ったため、csvファイルに出力することでデータをより扱いやすくした。
単にcsvファイルをエクセルで開くと文字化けしてしまうため、プログラムのほうから文字コードを指定したが、どうやらエクセルのほうに問題があるようで、正常にデータを見るにはエクセル→「データ」→「テキストまたはCSVから」でCSVファイルを指定してもらい、文字コードをUTF-8に変更する必要がある。
googleスプレッドシートで「ファイル」→「開く」からCSVファイルを指定すると文字化けせずに簡単に読み込むことができる。
ExtractAnyWordFromXmlAndOutputToCsv.javaのmainの中に、調べたい文字列、url等を入力。
今回の例として、
文字列:コロナ
URL :https://news.yahoo.co.jp/rss/categories/domestic.xml
URL2:https://www.nhk.or.jp/rss/news/cat0.xml
siteName:YahooNews
siteName2: NHK
とする。
4.2 実験結果
出力されたCSVファイル例を挙げた
知りたい情報を抜き出してくれる実用的なツールを作ることができた。
改良点としては、3つ以上のサイトを指定しできるようにしたり、コンソール画面で文字列やURLを指定したりできるようにすることが挙げられる。
5.2 実現方法
効率に関して、getItemListにてtitle、link等にitemNodeから入力した後に、
titleかdescriptionに指定のワードが含まれているもののみitemListに追加しているため、無駄な入力が行われることがあるため、効率は悪いように思える。