[PowerShell] | |||||||||
PowerShellで外部のRSSフィードを取得する
|
|||||||||
|
解説 |
RSS(RDF Site Summary)は名前のとおり、サイト・コンテンツのサマリ情報(主に新着記事情報やニュースなど)を配信するための標準的かつ有効な手段だ。スパム・メールのはんらんなどによって、メール・ニュースなどの媒体による情報配信の効果が薄れつつある昨今、スパムとは無縁なRSSの重要性はますます高まっているともいえるだろう(RSSに関する詳細は、Insider.NETフォーラムの「サイトの更新情報を提供する標準言語RSS」などを参照)。
本稿では、このRSSフィードをPowerShellスクリプト経由で取得し、必要な情報を抽出、HTML形式に整形したうえで、テキスト・ファイルに保存する方法について紹介する。
操作方法 |
*注意 |
PowerShellを利用するには、あらかじめシステムにユーザー自身がインストールしておく必要があります。具体的なインストール方法については「PowerShellをインストールする」を参照してください。 |
手順1――テキスト・エディタでPowerShellのコードを入力する
まずはテキスト・エディタ(メモ帳でも何でもよい)を開き、以下のコードを入力してほしい。なお「#〜」で始まる行は、コードの意味を解説するためのコメント部分なので、省略してもよい。コメントには、スクリプトの簡単な説明を入れておいた。
|
|
※ サンプル・ファイルRssFeed.ps1をダウンロードするには、ここをクリックしてください。 |
PowerShellスクリプトの実行ファイルは拡張子「.ps1」とする必要がある。ファイル名自体はなんでも構わないが、ここでは「RssFeed.ps1」という名前で保存しておこう。
コード全体の流れについてはリスト内のコメントをご覧いただくとして、ここで注目してほしいのは、以下の2点だ。
■1.ネットワーク上のリソースを取得するのはWebClientクラスの役割
インターネット上のコンテンツ(ここではRSSフィード)を取得するのは、.NET Frameworkで提供されているWebClientクラス(System.Net名前空間)の役割だ(WebClientクラスについては、TIPS「PowerShellを使って指定したファイルをインターネットからダウンロードする」参照)。
本サンプル・プログラムでは、WebClientクラスのDownloadDataメソッドを利用して、指定されたURLからRSSフィードを取得している。DownloadDataメソッドは取得したデータをバイト配列として返すので、Encodingクラス(System.Text名前空間)のGetStringメソッドで、指定された文字エンコーディングに従って、文字列に変換する必要がある。Encodingオブジェクトは、EncodingクラスのGetEncodingメソッドで取得することが可能である。
この時点で、例えば次のような文字列が取得できているはずである。
<?xml version="1.0" encoding="Shift_JIS" ?> |
■2.XMLデータを手軽に扱えるxmlプリミティブ型
上のリストを見ても分かるように、RSSフィードはXML(eXtensible Markup Language)形式で記述されたデータである。もっともPowerShellではデフォルトでxml型を用意しており、このようなXML文書をプログラム的に処理するのはさほど難しいことではない。
文字列として取得したXML文書をxml型に変換するには、先のコード内ののように文字列型からxml型にキャストを行うだけだ。これによって、文字列は内部的にパース(解析)されて、xml型として操作できるようになる。
xmlプリミティブ型によるXML文書の読み込み |
取得したxml型は内部的にドキュメント・ツリー構造として扱われるので、このツリー構造に沿ってオブジェクトのプロパティにアクセスすれば、それぞれの要素/属性にアクセスできる。
例えば<rdf:RDF>要素配下の1番目の<item>要素の<title>要素にアクセスしたければ、
$rss.RDF.item[0].title |
のように記述すればよいし、同じく<item>要素のrdf:about属性にアクセスしたければ、
$rss.RDF.item[0].about |
と記述すればよい。要素/属性名を指定する際には、名前空間プレフィックス(要素、属性名のコロンより前の部分)は除かなければならない点に注意していただきたい。
以上を理解した上でもう一度サンプル・コードを見てみると、ここでは
<rdf:RDF>要素配下の<item>要素群を取り出し、これをforeachループで順番に処理。ループ内では、<item>要素配下の<title>/<link>/<description>要素をそれぞれ取得し、リストに整形 |
としているというわけだ。
なおここではRSS 1.0を前提にコードを記述しているが、RSSはバージョンによってフォーマットが大きく異なる。異なるバージョンのRSSフィードを読み込む場合には、読み込みのコードも変更する必要があるので注意してほしい。
ちなみにRSS 1.0の主要な要素については、Insider.NETフォーラムの「データベースからRSSフィード情報を生成するには?」を参照していただきたい。
手順2――PowerShellのスクリプト・コードを実行する
ScriptControl.ps1を実行するには、PowerShellのプロンプトを開いた上で、以下のようにコマンドを実行すればよい(カレント・フォルダにスクリプトが保存されているものとする*)。第1引数は取得したいRSSフィードのURL、第2引数はフィードの文字エンコーディングである。
PS > ./RssFeed.ps1 http://www.wings.msn.to/contents/rss.php Shift_JIS > c:\rss.html |
* PowerShellでスクリプト・ファイルを実行する場合には、あらかじめいくつかの設定を行っておく必要がある。詳細については、「Windows PowerShellコマンド&スクリプティング入門(後編)」も参照していただきたい。 |
これによって、Rssfeed.ps1で取得したRSSフィードは、rss.htmlに保存される。これをブラウザから開いて、次のような結果が確認できれば成功だ。
取得したRSSフィードのファイルをブラウザで表示したところ |
この記事と関連性の高い別の記事
- 新着サポート技術情報を効率的にチェックする方法(TIPS)
- PCとスマホで使っていたGoogleリーダーをFeedlyへ移行する(TIPS)
- GoogleリーダーのRSSフィード情報をバックアップする(TIPS)
- WSHからXMLファイルの設定情報を読み込む(TIPS)
- FrontPage 2003をXMLエディタとして利用する(TIPS)
このリストは、デジタルアドバンテージが開発した自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
「Windows TIPS」 |
- Azure Web Appsの中を「コンソール」や「シェル」でのぞいてみる (2017/7/27)
AzureのWeb Appsはどのような仕組みで動いているのか、オンプレミスのWindows OSと何が違うのか、などをちょっと探訪してみよう - Azure Storage ExplorerでStorageを手軽に操作する (2017/7/24)
エクスプローラのような感覚でAzure Storageにアクセスできる無償ツール「Azure Storage Explorer」。いざというときに使えるよう、事前にセットアップしておこう - Win 10でキーボード配列が誤認識された場合の対処 (2017/7/21)
キーボード配列が異なる言語に誤認識された場合の対処方法を紹介。英語キーボードが日本語配列として認識された場合などは、正しいキー配列に設定し直そう - Azure Web AppsでWordPressをインストールしてみる (2017/7/20)
これまでのIaaSに続き、Azureの大きな特徴といえるPaaSサービス、Azure App Serviceを試してみた! まずはWordPressをインストールしてみる
|
|