レンダリングされたoneboxなしで、調理済みの投稿を取得するルートはありますか?

外部の Facebook Instant Article 生成器のために、レンダリングされた onebox を含まない、調理済みの HTML 投稿が必要です。

そのような投稿用のルートや API エンドポイントは既に存在しますか?

「いいね!」 1

これは役立つかもしれません GitHub - discourse/raw-post-button · GitHub

「いいね!」 1

adopilot さん、ごフィードバックをいただきありがとうございます。詳しく教えていただけますでしょうか。

これは、生の投稿を表示するためのコンポーネントのようです。

当社は、onebox を含まずに調理済みの投稿をレンダリングする機能を探しています。

申し訳ありません。最初は生記事が必要だと思い込んでいましたが、後で間違いだったことに気づき、すでに投稿されていたことがわかりました。

「いいね!」 1

誰かいますか?これはいかようにも実現できますか?

@Terrapop さん

リクエストされたユーザーエージェント文字列が FB ボットのユーザーエージェント文字列と一致する場合、One Box の DOM 要素を非表示(または削除)するプラグインを作成することも可能です。

お役に立てれば幸いです。

「いいね!」 1

HTMLを後処理する必要があります。調理済みの投稿には、すでにすべてのワンボックスが展開されたHTMLが含まれています。

「いいね!」 2

それがまさに問題の核心です。調理済みポストにはワンボックスが含まれており(元のメディアリンクは含まれておらず、raw 形式にのみ元のリンクがあります)、これらを Facebook IA の有効な形式に変換することができません。

Iframely は、スタンドアロンリンクから IA 有効な IFRAME を生成します。raw ポストを使用して PHP の Markdown パーサー(Markdown-It for PHP)と Iframely をスタンドアロンリンクに適用しようとしましたが、Discourse の Markdown パースははるかに多くの処理を行います。Discourse が Markdown に対して行うすべての「魔法」を再現したくありません。そのため、調理済みポストを取得しつつ、ワンボックスがパースされていない状態(それらを Iframely で後処理するため)で取得できる方法を模索しています。

現在の手法では、単純なポストに対しては機能します。つまり、raw をベースとして PHP の Markdown-It で HTML に変換し、Iframely で IA 有効なメディアカード(ワンボックスは該当しません)を生成し、その HTML を Facebook IA 用の HTML に変換して FB PHP SDK を介して送信します。しかし、Discourse は Markdown パースに対して多くの追加ルールを適用するため、できれば Discourse から直接パースされた HTML を取得しつつ、ワンボックスだけを除くような方法があれば理想的です。

「いいね!」 1

Discourse 外で投稿を生成する必要はありません。該当するメソッドをモンキーパッチし、onebox の生成部分を除くだけで済みます。大まかなアイデアです。

「いいね!」 2

Discourse 全体の投稿整形の動作を変更したくはありませんが、ワンボックス(oneboxes)を含まない整形済み投稿を生成するエンドポイント(API)が必要です(ただし、元の単独リンクは ahrefs として残します)。

「いいね!」 1

DOM 要素を非表示にするか削除するだけです。これは非常に簡単な作業です。

  1. ユーザーエージェント文字列を Ruby でマッチさせ、一致したらブール値を設定する。
  2. JavaScript でそのブール値が true の場合、DOM 要素を非表示にする。

これは、開発者が DOM 要素を表示したくない(または削除したい)場合に使用する「標準的な」方法です。


**注:

Ruby の ‘gon’ gem を使えば、Ruby 変数を JavaScript に渡すのが非常に簡単になりますが、私は Rails アプリでのみ使用しており、スタックに EmberJS が含まれている場合は使ったことがありません(いずれにせよ、Ruby 変数を JS に渡す方法は多数あります)。