RSSポーリング:YouTubeチャンネルフィードから動画の説明を読み取る

複数のYouTubeチャンネルをRSSポーリングを使用してフォーラムのカテゴリにインポートしています。各トピックには動画URLが設定され、プレイヤーにワンボックス表示されますが、動画の説明は投稿に反映されません。多くの動画では、説明部分が実際のコンテンツ(ルート、場所、ギア、リンクなど)を占めており、メンバーからはその情報が必要とされています。

YouTubeチャンネルのフィードはMedia RSS拡張機能付きのAtom形式であり、各エントリには<media:group><media:description>内に完全な説明が含まれており、<media:thumbnail>も付随しています。RSS Pollingはrss gem(0.3.3、Gemfile.lock#L614)を使用してフィードを解析しますが、このgemにはMedia RSSモジュールがないため、これらの要素はFeedItemが参照する前に破棄されます。その結果、YouTubeのアイテムはURLのみの状態にフォールバックします(feed_item.rb#L17-L23)。

以下の対応があると助かります:

  1. YouTubeエントリに対してmedia:description(およびmedia:thumbnail)を読み取る。
  2. インポートされた投稿内で、動画の下に説明を含めるためのフィード単位またはサイト全体のオプションを提供する。

現在、ポーリング時にフィードXMLを再読み込みする小さなコンパニオンプラグイン(discourse-rss-onebox)でこの処理を行っています。これは当フォーラムのトピック間で機能していますが、RSS Pollingの内部実装に依存しており、コア機能として実装される方がシンプルかつ堅牢になるはずです。

「いいね!」 2

「rss」gemはMedia RSS拡張に対応していますか?対応している場合、そのMedia拡張へのサポートを追加して「rss」gemをアップグレードするPull Requestのレビューとマージに喜んで対応します :+1:

「いいね!」 2

確認済み:いいえ。Discourseがバンドルしているバージョン(0.3.3)も、ruby/rssの現在のmaster(0.3.4)も、Media RSSモジュールを持っていません。同梱されているのはcontent、Dublin Core、image、iTunes、slash、syndication、taxonomy、trackbackのみで、media:*要素は無視されます。したがって、gemのアップグレードだけでは解決しません。

考えられる方法としては、以下の2つがあります。

  1. ruby/rssのアップストリームにMedia RSSモジュールを追加する(iTunesモジュールと同様のアプローチで)、その後、こちらのgemのバージョンを上げる。
  2. RSS Polling内でNokogiriを使って生XMLからmedia:descriptionを読み取る。フェッチ段階ではパース前にXMLがすでに取得されているため、gemの変更は不要です。現在のコンパニオンプラグインはこの方式を採用しており、YouTubeチャンネルとの組み合わせでも安定して動作しています。

オプション2の方が変更範囲が小さいように思えます。この方向性でPRを送ってよろしいですか?

「いいね!」 2