すぱこーRSSフィード用のライブラリ、すぱーダ(SPADA:すぱこーRSSリーダー)が完成しました!

お知らせ

SPADAシリーズは2022年1月をもちまして、開発を終了いたしました。
2016年冬のリリースよりご愛顧いただき、誠にありがとうございました。

なお、ソースコードは引き続きGitHub上でアーカイブしていますので、開発の参考になれば幸いです。

こんにちはー!ニアです。

先日のプロ生勉強会のLTでちょっと紹介した、プログラミング生放送のすぱこーRSSフィードを読み込む.NETクラスライブラリ「すぱーダ(SPADA)」こと、すぱこーRSSリーダーができました。

URLまたはそれを指定したXmlReaderオブジェクトを指定するだけで、簡単にすぱこーRSSフィード(http://pronama.azurewebsites.net/spaco-feed/)を読み込むことができます。XML名前空間の設定やXmlReaderで読み込む時の複雑な処理は全てこのすぱーダにお任せください!

また、LINQを使って必要なアイテムだけを抽出することもできます。

【追記】クロスプラットフォーム向けのエクすぱーダ(X-SPADA)とユニバーサルWindows向けのユニすぱーダ(Uni-SPADA)を追加しました。

1. ダウンロードとインストール方法

以下のリンクからzipファイルダウンロードし、解凍します。

Down

【追記】NuGetパッケージも作成しました。NuGetパッケージマネージャーからダウンロードできます。

  • すぱーダ : https://www.nuget.org/packages/Chronoir_net.SPADA/
  • エクすぱーダ : https://www.nuget.org/packages/Chronoir_net.XSPADA/
  • ユニすぱーダ : https://www.nuget.org/packages/Chronoir_net.UniSPADA/

ターゲットプラットフォーム

  • すぱーダ : .NET Framework 4.0
  • エクすぱーダ : .NET Framework 4.5、Xamarin.Android、Xamarin.iOS、Windows 8.x用ストアアプリ、Windows Phone 8.1(Silverlightには非対応)
  • ユニすぱーダ : ユニバーサルWindows(Build 10240以上)

また、すぱーダはオープンソースです。ソースコードはGitHub上にアップしています。

GitHub : https://github.com/Nia-TN1012/SPADA

DLLファイルをアセンブリ参照に追加するか、ソースファイルをプロジェクトに追加します。

asm

2. 使い方

ライブラリのドキュメントはこちらです -> すぱーダ: Main Page

すぱーダは すぱこーRSSフィードを読み込む SpacoRSSReaderクラス とすぱこーの各話データを格納する SpacoRSSItemクラス の2つで構成されています。

Chronoir_net.SPADA

2.1. すぱこーRSSフィードの読み込み

SpacoRSSReader.Load( string )メソッドで、すぱこーRSSフィードのURLを指定して読み込みます(内部でLINQ to XMLを用いています)。

または、SpacoRSSReader.Load( XmlReader )メソッドで、XmlReaderオブジェクトを指定して読み込むことも可能です(こちらの方が高速です)。

読み込みに成功すると、コンテンツのデータを格納したSpacoRSSReaderオブジェクトが返ります。

using Chronoir_net.SPADA;
using System.Xml;	// XmlReader経由で読み込む場合

SpacoRSSReader srr1 = SpacoRSSReader.Load( "http://pronama-api.azurewebsites.net/feed/spaco" );
// ...

// または

using( XmlReader xr = XmlReader.Create( "http://pronama-api.azurewebsites.net/feed/spaco" ) ) {
	SpacoRSSReader srr2 = SpacoRSSReader.Load( xr );
	// ...
}

2.2. 各話のデータの列挙

SpacoRSSReader.ItemsプロパティからLINQを使って、各話のデータを列挙することができます。

// 単純な列挙
foreach( SpacoRSSItem item in srr.Items ) {
	// ...
}

// 今日から起算して過去2ヶ月分のみを抽出
var srr_rc2 = srr.Items.Where( _ => _.PubDate >= DateTime.Now.AddMonths( -2 ) );

2.3. すぱこーRSSフィードのデータと対応しているプロパティ

channel要素とSpacoRSSReaderクラス

RSSフィード内の要素 概要 すぱーダ内のプロパティ データ型
title 作品のタイトル Title string
link リンク Link string
description 作品の説明 Description string
pubDate 最新話の公開日 PubDate DateTime
image バナー画像のURL BannerURL string
dc:creator 作成者 Author string
item 各話のデータのコレクション Items IEnumerable
<SpacoRSSItem>

item要素とSpacoRSSItemクラス

RSSフィード内の要素 概要 すぱーダ内のプロパティ データ型
title タイトル Title string
dc:creator 作成者 Author string
link 作品のURL Link string
pubDate 公開日 PubDate DateTime
description あらすじ Description string
dcncl:volume 話数 Volume int
dc:modified 更新日 ModifiedDate DateTime
p:isAvailable 利用可能 IsAvailable bool
media:content 漫画画像のURL MediaURL string
media:thumbnail サムネイル画像のURL ThumbnailURL string
guid ID ID string

3. サンプルプログラム

using System;
using System.Collections.Generic;
using System.Xml;
using System.Linq;

using Chronoir_net.SPADA;

class Program {

	static void Main( string[] args ) {
		try {
			// すぱーダで、すぱこーRSSフィードの読み込みます。
			SpacoRSSReader srr = null;
			// XMLReaderクラス経由ですぱこーRSSフィードを読み込みます。
			using( XmlReader xr = XmlReader.Create( "http://pronama-api.azurewebsites.net/feed/spaco" ) ) {
				srr = SpacoRSSReader.Load( xr );
			}
			Console.WriteLine( "完了!" );

			// すぱこーRSSフィードのチャンネル情報を取得します。
			Console.WriteLine( $"タイトル : {srr.Title}" );
			Console.WriteLine( $"概要 : {srr.Description}" );
			Console.WriteLine( $"最新話公開日 : {srr.PubDate}" );
			Console.WriteLine( $"リンク : {srr.Link}" );

			// 各話のデータを取得します。
			Console.WriteLine( "\n各話の情報" );
			foreach( var item in srr.Items ) {
				Console.WriteLine( $"◆ 第{item.Volume}話" );
				Console.WriteLine( $" タイトル : {item.Title}" );
				Console.WriteLine( $" 作者 : {item.Author}" );
				Console.WriteLine( $" 公開日 : {item.PubDate}" );
				Console.WriteLine( $" リンク : {item.Link}" );
			}

		}
		catch( Exception ex ) {
			Console.WriteLine( $"\nエラー : {ex.Message}" );
		}
	}
}

それでは、See you next!

コメント

タイトルとURLをコピーしました