Front-end: Angular 18
Back-end: Spring 2.4
Edytor treści: Quill 2.0.2
Potrzebuję dodać funkcjonalność, że kiedy użytkownik wklei link do jakiejś strony, to w tym miejscu pojawi się jej podgląd (miniaturka, tytuł, opis, adres). Jest tak na Facebooku, Teamsach, ale nie do końca. Jak na FB wkleicie kilka linków, to pojawi się podgląd tylko jednego. A tu jak user wklei 5 linków, to ma być 5 podglądów dokładnie w miejscu linku. User nie powinien móc ingerować w podgląd, więc klawisz Backscape usuwa cały podgląd.
Takie coś jest też w silnikach forów i na platformach blogowych, tylko z pamięci nie wymienię. Mógłbym się na nich wzorować.
Nie znalazłem takiej wtyczki do Quilla, ale nawet gdybym znalazł, to potrzebny jest do tego back-end ze względu na CORS.
Może ktoś się orientuje, czy giganci mają własne serwisy do pobierania metadanych, czy korzystają z zewnętrznych usług?
Chyba jedyna sensowna biblioteka to https://github.com/microlinkhq/metascraper ale pod JS, więc trzeba odpalić prosty serwer na NodeJS. Miejsca na kolejny serwis za bardzo już nie ma, na serwerze 12 GB żre ElasticSearch, resztę inne usługi, zostało 512 MB wolnej pamięci.
Czy ktoś kojarzy jakieś sensowne biblioteki dla Javy, które parsują OpenGraph / Twitter / tagi meta (bo nie każda strona używa OpenGraph)? Jeśli takiej nie ma, to napisanie takiej z użyciem jsoup (czy innego parsera HTML?) nie będzie trudne, lecz nie wiem, jak rozwiązać poniższe kwestie:
- Miniaturka - jeśli jest OpenGraph, to zazwyczaj jest link do miniaturki - przechowywać ją lokalnie (kwestie praw autorskich?) np. jako base64 czy
<img>powinien zawierać zewnętrzny src? A jeśli nie ma OpenGraph, to często są<meta>z wieloma wersjami miniaturek (dla iOS, dla Androida, dla różnych usług) i w wielu rozmiarach. Jak nie ma nawet tego, to zostaje chyba favicona. Wykonanie screenshota nie wchodzi w grę, bo wymaga zrenderowania całej strony. - Tytuł - jak nie ma OpenGraph, to bierzemy
<title> - Opis - jak nie ma OpenGraph, to można spróbować wyodrębnić jakiś fragment
- Typ pliku - jak user wklei link np. do pdf, do mp3, do avi, do innego formatu, to serwer nie powinien takiego pliku pobierać - czy w Javie da się to ogarnąć w ten sposób, że bierzemy nagłówki, ewentualnie sprawdzamy MIME, ale nie pobieramy zawartości? I wtedy zwracamy informację, że to plik PDF, a nazwa pliku plik.pdf.
- Bezpieczeństwo - to jest to pole do ataków na inne witryny i SSRF
- Czy bezpiecznie w edytorze tekstu konwertować link na HTML z podglądem i potem zapisać do bazy, czy metadane o linkach przechowywać gdzie indziej i potem renderować od nowa za każdym razem? Jak to jest rozwiązane w innych aplikacjach?
A może istnieje jakiś standard, że strona udostępni takie metadane przez CORS?