Unverified Commit 964ae168 authored by MHZ's avatar MHZ Committed by GitHub

feat: support YouTube video thumbnail in link preview (#4427)

parent f17774cb
package httpgetter package httpgetter
import ( import (
"fmt"
"io" "io"
"net" "net"
"net/http" "net/http"
...@@ -53,6 +54,7 @@ func GetHTMLMeta(urlStr string) (*HTMLMeta, error) { ...@@ -53,6 +54,7 @@ func GetHTMLMeta(urlStr string) (*HTMLMeta, error) {
// TODO: limit the size of the response body // TODO: limit the size of the response body
htmlMeta := extractHTMLMeta(response.Body) htmlMeta := extractHTMLMeta(response.Body)
enrichSiteMeta(response.Request.URL, htmlMeta)
return htmlMeta, nil return htmlMeta, nil
} }
...@@ -151,3 +153,14 @@ func validateURL(urlStr string) error { ...@@ -151,3 +153,14 @@ func validateURL(urlStr string) error {
return nil return nil
} }
func enrichSiteMeta(url *url.URL, meta *HTMLMeta) {
if url.Hostname() == "www.youtube.com" {
if url.Path == "/watch" {
vid := url.Query().Get("v")
if vid != "" {
meta.Image = fmt.Sprintf("https://img.youtube.com/vi/%s/mqdefault.jpg", vid)
}
}
}
}
...@@ -54,6 +54,9 @@ const Link: React.FC<Props> = ({ text, url }: Props) => { ...@@ -54,6 +54,9 @@ const Link: React.FC<Props> = ({ text, url }: Props) => {
{linkMetadata.description && ( {linkMetadata.description && (
<p className="mt-1 w-full text-sm leading-snug opacity-80 line-clamp-3">{linkMetadata.description}</p> <p className="mt-1 w-full text-sm leading-snug opacity-80 line-clamp-3">{linkMetadata.description}</p>
)} )}
{linkMetadata.image && (
<img className="mt-1 w-full h-32 object-cover rounded" src={linkMetadata.image} alt={linkMetadata.title} />
)}
</div> </div>
) )
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment