Discourse no produce tarjetas de Twitter grandes y más atractivas

Arriba: Cómo Discourse genera una llamada “mini tarjeta” que no es muy atractiva.

Abajo: Tarjeta grande de Twitter correcta.

Solución:

Por favor, cambia…

<meta name="twitter:card" content="summary" />

por

<meta name="twitter:card" content="summary_large_image">

en core.

Referencia:

3 Me gusta

Hola @Terrapop

No creo que eso sea una solución. A veces las imágenes son malas. Y las imágenes malas con summary_large_image son realmente malas.

Quizás una opción para que el usuario pueda cambiar summary por summary_large_image.

3 Me gusta

En mi caso, optaría por eso, ya que nos aseguramos de que las imágenes añadidas a los temas que tuiteamos en nuestra cuenta tengan un tamaño suficiente. Por lo que sé, Twitter recurre automáticamente a la versión pequeña si no proporcionas una imagen lo suficientemente grande, incluso cuando se especifica summary_large_image.

Aún mejor sería que las dimensiones de las imágenes fueran validadas por el núcleo y, según los tamaños mínimos requeridos, se utilizara summary o summary_large_image (mínimo 300x157) de forma automática.

Si eso no es posible en absoluto, estaría encantado de tener al menos la opción de usar summary_large_image en lugar de summary.

2 Me gusta

¿Existe alguna manera de sobrescribir el comportamiento de def crawlable_meta_data con un plugin sencillo?

En particular, nos gustaría cambiar:

elsif opts[:image].present?
      result << tag(:meta, name: 'twitter:card', content: "summary")
      result << tag(:meta, name: "twitter:image", content: opts[:image])

por

elsif opts[:image].present?
      result << tag(:meta, name: 'twitter:card', content: "summary_large_image")
      result << tag(:meta, name: "twitter:image", content: opts[:image])

ya que dependemos bastante de Twitter y de las tarjetas grandes para generar participación.

Soy bastante nuevo en Ruby, así que cualquier indicación en la dirección correcta sería muy apreciada.

Actualización: Aquí está el plugin.rb para quienes quieran parchar el núcleo debido a las imágenes pequeñas en Twitter:

after_initialize do
 reloadable_patch do |plugin|
  ApplicationHelper.module_eval do

    def crawlable_meta_data(opts = nil)
        opts ||= {}
        opts[:url] ||= "#{Discourse.base_url_no_prefix}#{request.fullpath}"

        if opts[:image].blank?
          twitter_summary_large_image_url = SiteSetting.site_twitter_summary_large_image_url

          if twitter_summary_large_image_url.present?
            opts[:twitter_summary_large_image] = twitter_summary_large_image_url
          end

          opts[:image] = SiteSetting.site_opengraph_image_url
        end

        # ¿Están disponibles el ancho y el alto?

        # Usar el esquema correcto para la imagen de opengraph/twitter
        opts[:image] = get_absolute_image_url(opts[:image]) if opts[:image].present?
        opts[:twitter_summary_large_image] =
          get_absolute_image_url(opts[:twitter_summary_large_image]) if opts[:twitter_summary_large_image].present?

        # Agregar etiquetas opengraph & twitter
        result = []
        result << tag(:meta, property: 'og:site_name', content: SiteSetting.title)

        if opts[:twitter_summary_large_image].present?
          result << tag(:meta, name: 'twitter:card', content: "summary_large_image")
          result << tag(:meta, name: "twitter:image", content: opts[:twitter_summary_large_image])
        elsif opts[:image].present?
          result << tag(:meta, name: 'twitter:card', content: "summary_large_image")
          result << tag(:meta, name: "twitter:image", content: opts[:image])
        else
          result << tag(:meta, name: 'twitter:card', content: "summary")
        end
        result << tag(:meta, property: "og:image", content: opts[:image]) if opts[:image].present?

        [:url, :title, :description].each do |property|
          if opts[property].present?
            content = (property == :url ? opts[property] : gsub_emoji_to_unicode(opts[property]))
            result << tag(:meta, { property: "og:#{property}", content: content }, nil, true)
            result << tag(:meta, { name: "twitter:#{property}", content: content }, nil, true)
          end
        end

        if opts[:read_time] && opts[:read_time] > 0 && opts[:like_count] && opts[:like_count] > 0
          result << tag(:meta, name: 'twitter:label1', value: I18n.t("reading_time"))
          result << tag(:meta, name: 'twitter:data1', value: "#{opts[:read_time]} mins 🕑")
          result << tag(:meta, name: 'twitter:label2', value: I18n.t("likes"))
          result << tag(:meta, name: 'twitter:data2', value: "#{opts[:like_count]} ❤")
        end

        if opts[:published_time]
          result << tag(:meta, property: 'article:published_time', content: opts[:published_time])
        end

        if opts[:ignore_canonical]
          result << tag(:meta, property: 'og:ignore_canonical', content: true)
        end

        result.join("\n")
      end

  end
 end
end

Pero sería mejor que hubiera una opción para esto en el futuro y que el núcleo evaluara los tamaños mínimos de imágenes de Twitter para usar summary_large_image o summary (para imágenes muy pequeñas) si un administrador activa una nueva configuración: “habilitar imágenes grandes de resumen de Twitter”.

6 Me gusta

Me gustaría saber si es posible cambiar el comportamiento actual de mostrar siempre summary_large_image por summary. Encontré esta publicación, pero parece que pide lo contrario; así que supongo que alguien ya lo habrá implementado… sin embargo, ¿es posible hacer lo inverso? ¿Existe alguna opción? He intentado buscar en la configuración de administración y no la encuentro.

1 me gusta

Para cualquiera que quiera esto (para usar siempre summary_large_image), he tomado el código de @Terrapop y lo he convertido en un plugin que puedes incluir:

- https://github.com/CubeCoders/discourse-twitter-large-card

Lo que realmente me gustaría hacer es algo similar a la tarjeta de Github que verás adjunta a esta publicación, una forma de generar automáticamente tarjetas dinámicas para un tema determinado. Ahora mismo, la tarjeta será la primera imagen de tamaño decente en la publicación. Por lo tanto, si creas una publicación que comience con una imagen, terminará usándola.

1 me gusta