Sailor
(Peter Petrik)
1
複数の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)。
以下の対応があると助かります:
- YouTubeエントリに対して
media:description(およびmedia:thumbnail)を読み取る。
- インポートされた投稿内で、動画の下に説明を含めるためのフィード単位またはサイト全体のオプションを提供する。
現在、ポーリング時にフィードXMLを再読み込みする小さなコンパニオンプラグイン(discourse-rss-onebox)でこの処理を行っています。これは当フォーラムのトピック間で機能していますが、RSS Pollingの内部実装に依存しており、コア機能として実装される方がシンプルかつ堅牢になるはずです。
「いいね!」 3
zogstrip
(Régis HANOL)
2
「rss」gemはMedia RSS拡張に対応していますか?対応している場合、そのMedia拡張へのサポートを追加して「rss」gemをアップグレードするPull Requestのレビューとマージに喜んで対応します 
「いいね!」 3
Sailor
(Peter Petrik)
3
確認済み:いいえ。Discourseがバンドルしているバージョン(0.3.3)も、ruby/rssの現在のmaster(0.3.4)も、Media RSSモジュールを持っていません。同梱されているのはcontent、Dublin Core、image、iTunes、slash、syndication、taxonomy、trackbackのみで、media:*要素は無視されます。したがって、gemのアップグレードだけでは解決しません。
考えられる方法としては、以下の2つがあります。
- ruby/rssのアップストリームにMedia RSSモジュールを追加する(iTunesモジュールと同様のアプローチで)、その後、こちらのgemのバージョンを上げる。
- RSS Polling内でNokogiriを使って生XMLから
media:descriptionを読み取る。フェッチ段階ではパース前にXMLがすでに取得されているため、gemの変更は不要です。現在のコンパニオンプラグインはこの方式を採用しており、YouTubeチャンネルとの組み合わせでも安定して動作しています。
オプション2の方が変更範囲が小さいように思えます。この方向性でPRを送ってよろしいですか?
「いいね!」 3