Probleme mit Thumbnails von Soundcloud und YouTube Oneboxes

Wir nutzen Topic List Previews (legacy) mit Kacheln auf unserer Hauptseite. Gestern mussten wir unsere Instanz aus Gründen neu aufsetzen, die nichts mit TPL zu tun hatten. Wir waren über die Änderung des Thumbnail-Hintergrundsystems im Discourse-Kern informiert und wussten, dass ein Upgrade Probleme mit Thumbnails verursachen könnte. Dennoch musste es getan werden. :slight_smile:

Wie auch immer: Nach dem Neuaufsetzen (inklusive des Postgres-Upgrades) waren alle Thumbnails von Oneboxes verschwunden. Kein Problem, wir haben alle Beiträge neu gebacken, und die meisten Thumbnails tauchten wieder auf (gut), aber nicht alle (interessant und schlecht). Wir haben ein paar Mal mehr neu gebacken, nur zur Sicherheit, doch es gibt noch einige Beiträge, die auf der Hauptseite kein Thumbnail erhalten, obwohl die Oneboxes auf der Themen-Seite einwandfrei dargestellt werden.

Bisher haben wir zwei Muster festgestellt:

  • Soundcloud-Oneboxes werden problemlos dargestellt, aber das Thumbnail fehlt systematisch („Thumbnail auswählen

Wie besprochen, ist die Logik für die Erstellung von Vorschaubildern nun im Kern integriert.

Was TLP früher tun musste, ist größtenteils nicht mehr erforderlich.

Zur Referenz lauten die Kernkriterien für die Einbeziehung wie folgt:

  def extract_images_for_post
    # alle Bilder mit einem src-Attribut
    @doc.css("img[src]") -
    # abzüglich Emojis
    @doc.css("img.emoji") -
    # abzüglich Bilder innerhalb von Zitaten
    @doc.css(".quote img") -
    # abzüglich Onebox-Sitesymbole
    @doc.css("img.site-icon") -
    # abzüglich Onebox-Avatare
    @doc.css("img.onebox-avatar") -
    # abzüglich kleiner Onebox-Bilder (große Bilder sind .aspect-image-full-size)
    @doc.css(".onebox .aspect-image img")
  end

aus discourse/lib/cooked_post_processor.rb at main · discourse/discourse · GitHub

TLP passt dies leicht an, aber nur, um die Kriterien zu lockern. Ich würde diese Überschreibung gerne vollständig entfernen, wenn möglich:

  def extract_images_for_post
    # alle Bilder mit einem src-Attribut
    @doc.css("img[src]") -
    # abzüglich Emojis
    @doc.css("img.emoji") -
    # abzüglich Bilder innerhalb von Zitaten
    @doc.css(".quote img") -
    # abzüglich Onebox-Sitesymbole
    @doc.css("img.site-icon") -
    # abzüglich Onebox-Avatare
    @doc.css("img.onebox-avatar") #Breitere Kriterien als Discourse Core
  end

aus https://github.com/paviliondev/discourse-topic-previews/blob/master/lib/cooked_post_processor_edits.rb

Wie Sie sehen, reduziere ich die Anzahl der Ausschlüsse, indem ich kleine Onebox-Bilder zulasse, wie vom Kern definiert.

Anstatt dies in TLP zu pflegen, wäre es gut, Konsens und Parität über die Anwendungsfälle hinweg zu erreichen, damit ich dies überhaupt nicht im Plugin pflegen muss.

Dies ist auch für Sie relevant, @Arkshine

Danke @merefield, das ist sehr informativ.

Ich möchte nur sagen, dass die vorherige Thumbnail-Erstellung für Soundcloud-Oneboxes hervorragende Ergebnisse lieferte, und dieser Regression ist für eine auf Musik fokussierte Seite wie unsere wirklich störend. :slight_smile:

Es macht mir nichts aus, wenn wir hier und da ein YouTube-Thumbnail verpassen.

Ich bin gespannt, wie sich das weiterentwickeln wird. Ich stimme zu, dass das Ziel darin besteht, die Thumbnail-Erstellung im Discourse-Kern fein abzustimmen, um den besten gemeinsamen Nenner zwischen den vielen Anforderungen und Wünschen zu finden. Danke an alle, die daran arbeiten.

Auf den ersten Blick glaube ich nicht, dass es sich um eine YouTube-Onebox handelt. Ich vermute, jemand hat einen rohen YouTube-Einbettungscode im Beitrag verwendet. Wenn du ihn in eine Onebox umwandelst, sollte der Thumbnail funktionieren.

Hat das früher mit dem alten TLP-Plugin funktioniert? Soundcloud-Oneboxes sind Iframes, daher kann ich mir kaum vorstellen, wie wir ein Thumbnail-Bild daraus extrahieren könnten, selbst wenn wir unsere Auswahlkriterien aktualisieren. @merefield, hatte TLP irgendwo eine spezifische Logik für Soundcloud?

Ja, es gab eine benutzerdefinierte Logik rund um Oneboxes, die jedoch nicht ausschließlich für SoundCloud galt:

    if @has_oneboxes
      cooked = PrettyText.cook(@post.raw)

      if img
        ## Wir benötigen etwas Spezifischeres, um das Bild zu identifizieren
        img_id = img
        src = img.attribute("src").to_s
        img_id = src.split('/').last.split('.').first if src
      end

      prior_oneboxes = []
      Oneboxer.each_onebox_link(cooked) do |url, element|
        if !img || (img && cooked.index(element).to_i < cooked.index(img_id).to_i)
          html = Nokogiri::HTML::fragment(Oneboxer.cached_preview(url))
          prior_oneboxes = html.css('img')
        end
      end

      if prior_oneboxes.any?
        prior_oneboxes = prior_oneboxes.reject do |html|
          class_str = html.attribute('class').to_s
          class_str.include?('site-icon') || class_str.include?('avatar')
        end

        if prior_oneboxes.any? && validate_image_for_previews(prior_oneboxes.first)
          img = prior_oneboxes.first
        end
      end
   end

Dies wurde entfernt, um die Kernlogik zu verwenden.

Ah, mir ist nicht eingefallen, den Quellcode zu prüfen. :slight_smile:

Es war eine Onebox, aber die URL hatte ein zusätzliches Argument:

https://www.youtube.com/watch?v=4T6J-K8_yk4&list=PLluPQLh1xzlL2agiCCQFClcsutli90Qnz

Ich habe sie in die normale URL geändert:

https://www.youtube.com/watch?v=4T6J-K8_yk4

Es gab keine sofortige Änderung. Auch nach dem Neuaufbau des HTML gab es keine unmittelbare Veränderung, aber als ich Sidekiq überprüfte, sah ich einen geplanten, damit verbundenen Job. Nach vier Minuten geduldigem Warten ist die Miniaturansicht jetzt verfügbar und wird auf der Hauptseite angezeigt. Vielen Dank @david für so eine schnelle Antwort, und das noch am Sonntag!

Auf jeden Fall. Leider habe ich keinen Screenshot gemacht. Auf der Hauptseite wurde das Bild links neben der Onebox angezeigt.

Interessant, ich werde mir das nächste Woche ansehen. Ich denke, es sollte trotzdem funktionieren, auch mit einem zusätzlichen Argument.

Ah, ich verstehe, du hast also das Onebox-Vorschau-HTML extrahiert und daraus Thumbnails gewonnen. Für Soundcloud liefert das ein Thumbnail :+1:

Ja, das basiert auf @angus’ herrlichem Hack :D! Ich übernehme keine Verantwortung! Funktioniert aber gut.

UPDATE: Tatsächlich lüge ich, auch meine Fingerabdrücke sind überall darauf zu finden! Ich habe einen Teil dieses Codes so lange her geschrieben, dass ich ihn vergessen hatte, 2015!

Das sind beide knifflige Probleme, und ich denke, vorerst werden wir das Verhalten so belassen. Vielleicht können wir in Zukunft einige Verbesserungen einbringen. Ich habe ein paar #feature-Themen erstellt, um den Fortschritt zu verfolgen.

Zur YouTube-Differenz siehe:

Zum SoundCloud-Problem siehe:

Ich hatte das gleiche Problem mit YouTube-Links im Stil von https://youtu.be/. Nachdem ich sie in den Stil https://www.youtube.com/watch?v= geändert habe, hat es wieder funktioniert.

Das ist seltsam. Könntest du diese spezifischen YouTube-Links hier teilen? Beide Formate sollten funktionieren.

Vielleicht hätte auch ein erneutes Rendern funktioniert.
Aber es scheint in den Versionen weiterzuleben:

Ich habe den Link auf den alten zurückgesetzt, aber jetzt wird alles ordentlich gerendert. Ich vermute, das lag an einem Renderfehler nach dem Beta-6-Update.