chrispanag
(Christos Panagiotakopoulos)
1
こんにちは、皆様。
私のフォーラムの多くのユーザーが利用しているウェブサイト向けに、onebox 機能を拡張するプラグインを作成しました。
この onebox は、上記のウェブサイトから画像も表示します。ソースウェブサイトで画像が変更された際に onebox が壊れないように、画像をローカルに保存する方法はありますか?
そのような機能がフォーラムには存在していることは確認できましたが、私が作成したプラグインでそれをどのように利用すればよいか見つけることができませんでした。
あらかじめありがとうございます!
追伸:私が作成したプラグインの GitHub リポジトリはこちらです。コードへのフィードバックをいただければ大変嬉しく思います。
(NodeJS バックエンドのバックグラウンドから Ruby でのコーディングは初めてです。)
Onebox と Discourse は、追加のプラグインなしでネイティブにこの機能を実行します。
必要なことは、対象のウェブサイトが適切な og メタタグを生成することを確認するだけです。これを機能させたい場合は、Discourse ではなく対象のウェブサイトを修正する必要があります。
例:
BBC のウェブサイトは、各ページに対してこれらのメタタグを生成します。Discourse と Onebox は、site_name、image、description、title を取得して Onebox を生成します。
対象のウェブサイトがこの標準に従っていることを確認すれば、他に何も行う必要はありません。
これを行うことは理にかなっています。なぜなら、そうすれば他のプラットフォーム(例:Facebook)でのすべてのプレビューにも対応できるからです。
ただし、あなたがこのウェブサイトの管理権限を持っているか、影響を与えることができることを前提としていますが、これは大きな前提かもしれません!
これが不可能な場合は、Onebox 内でそのウェブサイトの独自性を認識し、適切なメタデータを取得するためにクロールする専用のエンジンを作成する必要があります。その作業には Nokogiri ライブラリが適切なツールです。
chrispanag
(Christos Panagiotakopoulos)
3
そうなんですよね 
残念ながらそうではありません
それに加えて、onebox の表示を少しカスタマイズしたいと考えています。デフォルトのエンジンを使用しているだけでは、それは不可能です。
しかし…
私はすでに onebox 拡張機能 を開発しました。これはすべての取得処理を行い、うまく動作しています!
問題はこれです:取得された画像がローカルに保存されることをどうやって保証できますか? プラグインに追加のコードを書く必要があると思われます。
探るべきいくつかのアプローチがあります:
Cooked Post Processor は、この処理を行うジョブをキューに追加します。詳細は以下をご覧ください:
ジョブのコードはこちらです:discourse/app/jobs/regular/pull_hotlinked_images.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub
ホットリンクされた画像を投稿に正常に復元し、画像が基準を満たしており、設定により外部画像のアップロードが有効になっている場合、これは機能するはずです。

基準はこちらです:discourse/lib/cooked_post_processor.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub
もしまだ動作していないが、onebox 内で外部画像が正常に表示されている場合、画像がアップロードされるための基準を満たしていないのではないかと推測されます。