Bluesky renders no link card of its own. Its PDS never fetches the page behind a URL, so a post whose record has no app.bsky.embed.external shows the link as bare text; every client that shows a card builds it before posting. We only built one for YouTube, so every other link arrived on bluesky with nothing attached. preview.go now reads the Open Graph tags of an ordinary page and turns them into the same card: og:title and og:description, falling back to the twitter:* tags and then to <title> and meta description, with og:image fetched as the thumbnail. YouTube keeps its oEmbed path, which answers with the handful of fields a card needs rather than the megabyte of markup the watch page is. Only the head of a page is read, and parsing stops at <body>, since preview tags belong above it and a truncated page still yields what was read. Pages are decoded through x/net/html/charset rather than assumed to be UTF-8, which Japanese pages served as Shift_JIS are not. The thumbnail is resolved against the URL the body came from, so a relative og:image survives a redirect. Requests now name the bot in a User-Agent, which some sites want before serving preview tags at all. fetch grew a byte limit and now reports the media type and final URL its body came with, which is what the thumbnail needs to name and resolve itself. Checked against go.dev, Japanese Wikipedia and a YouTube video. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
66 lines
2.7 KiB
Modula-2
66 lines
2.7 KiB
Modula-2
module tweetdistributor
|
|
|
|
go 1.25.0
|
|
|
|
require (
|
|
github.com/bluesky-social/indigo v0.0.0-20250313000755-d9a74f690c90
|
|
github.com/bwmarrin/discordgo v0.28.1
|
|
golang.org/x/image v0.43.0
|
|
golang.org/x/net v0.23.0
|
|
)
|
|
|
|
require (
|
|
github.com/carlmjohnson/versioninfo v0.22.5 // indirect
|
|
github.com/felixge/httpsnoop v1.0.4 // indirect
|
|
github.com/go-logr/logr v1.4.1 // indirect
|
|
github.com/go-logr/stdr v1.2.2 // indirect
|
|
github.com/gogo/protobuf v1.3.2 // indirect
|
|
github.com/google/uuid v1.4.0 // indirect
|
|
github.com/hashicorp/go-cleanhttp v0.5.2 // indirect
|
|
github.com/hashicorp/go-retryablehttp v0.7.5 // indirect
|
|
github.com/hashicorp/golang-lru v1.0.2 // indirect
|
|
github.com/ipfs/bbloom v0.0.4 // indirect
|
|
github.com/ipfs/go-block-format v0.2.0 // indirect
|
|
github.com/ipfs/go-cid v0.4.1 // indirect
|
|
github.com/ipfs/go-datastore v0.6.0 // indirect
|
|
github.com/ipfs/go-ipfs-blockstore v1.3.1 // indirect
|
|
github.com/ipfs/go-ipfs-ds-help v1.1.1 // indirect
|
|
github.com/ipfs/go-ipfs-util v0.0.3 // indirect
|
|
github.com/ipfs/go-ipld-cbor v0.1.0 // indirect
|
|
github.com/ipfs/go-ipld-format v0.6.0 // indirect
|
|
github.com/ipfs/go-log v1.0.5 // indirect
|
|
github.com/ipfs/go-log/v2 v2.5.1 // indirect
|
|
github.com/ipfs/go-metrics-interface v0.0.1 // indirect
|
|
github.com/jbenet/goprocess v0.1.4 // indirect
|
|
github.com/klauspost/cpuid/v2 v2.2.7 // indirect
|
|
github.com/mattn/go-isatty v0.0.20 // indirect
|
|
github.com/minio/sha256-simd v1.0.1 // indirect
|
|
github.com/mr-tron/base58 v1.2.0 // indirect
|
|
github.com/multiformats/go-base32 v0.1.0 // indirect
|
|
github.com/multiformats/go-base36 v0.2.0 // indirect
|
|
github.com/multiformats/go-multibase v0.2.0 // indirect
|
|
github.com/multiformats/go-multihash v0.2.3 // indirect
|
|
github.com/multiformats/go-varint v0.0.7 // indirect
|
|
github.com/opentracing/opentracing-go v1.2.0 // indirect
|
|
github.com/polydawn/refmt v0.89.1-0.20221221234430-40501e09de1f // indirect
|
|
github.com/spaolacci/murmur3 v1.1.0 // indirect
|
|
github.com/whyrusleeping/cbor-gen v0.2.1-0.20241030202151-b7a6831be65e // indirect
|
|
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect
|
|
go.opentelemetry.io/otel v1.21.0 // indirect
|
|
go.opentelemetry.io/otel/metric v1.21.0 // indirect
|
|
go.opentelemetry.io/otel/trace v1.21.0 // indirect
|
|
go.uber.org/atomic v1.11.0 // indirect
|
|
go.uber.org/multierr v1.11.0 // indirect
|
|
go.uber.org/zap v1.26.0 // indirect
|
|
golang.org/x/text v0.38.0 // indirect
|
|
golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
|
|
lukechampine.com/blake3 v1.2.1 // indirect
|
|
)
|
|
|
|
require (
|
|
github.com/gorilla/websocket v1.5.3 // indirect
|
|
github.com/michimani/gotwi v0.18.2
|
|
golang.org/x/crypto v0.36.0 // indirect
|
|
golang.org/x/sys v0.31.0 // indirect
|
|
)
|