Wie ich Bluesky-Likes in meinen Blogbeiträgen zeige
Im Moment genieße ich es wirklich, Zeit bei Bluesky zu verbringen. Eines der Dinge, die mir an der gesamten Erfahrung wirklich gefallen, ist, dass das Projekt weitgehend Open Source ist, die Leute einige wirklich coole Dinge mit der Plattform erstellen und es einige nette APIs gibt, mit denen man Spaß haben kann.
Ich bin mit dem Webmentions-Standard vertraut und weiß, wie er verwendet werden kann, um standortübergreifende Konversationen zu erleichtern, indem Daten wie „Gefällt mir“-Angaben und Kommentare/Antworten auf Links im Internet angezeigt werden. Ich habe vor einigen Jahren mit Webmentions zusammengearbeitet, um Webmention-Daten von anderen Social-Media-Plattformen auf meiner Website anzuzeigen. Allerdings fühlt es sich oft wie eine Menge Hürden an, die man überwinden muss, wenn man nur ein paar Daten von einer API abrufen kann.
In diesem Beitrag werden wir die Bluesky-API verwenden, um eine Sammlung von Avataren von Benutzern abzurufen, denen ein Bluesky-Beitrag gefallen hat, den Sie mit einem öffentlichen Blog-Beitrag verknüpft haben, damit Sie etwas anzeigen können, das so aussieht Ihre Website.
Der Arbeitsablauf
Da es sich bei dieser Website um eine statische Website handelt, die mit Eleventy erstellt wurde, sind einige Schritte erforderlich, um einen veröffentlichten Blog-Beitrag mit einem Bluesky-Beitrag zu verknüpfen.
- Veröffentlichen Sie einen Blog-Beitrag, der einen statischen Site-Build auslöst
- Veröffentlichen Sie einen Bluesky-Beitrag, der auf den veröffentlichten Blog-Beitrag verweist
- Verknüpfen Sie die ID des Bluesky-Beitrags mit dem veröffentlichten Blog-Beitrag (z. B. in einem CMS)
- Erstellen Sie die Website neu
- Gewinn
Technische Entscheidungen
Diese Website ist eine statische Website, die clientseitiges JavaScript sparsam verwendet. Der JavaScript-Code für diese Funktionalität wird auf meinen Blog-Seitenvorlagen unter der Bedingung ausgeführt, dass mit einem Blog-Beitrag eine Bluesky-Beitrags-ID verknüpft ist.
Alternativen zu diesem Ansatz wären (in meinem Fall) die Verwendung einer Edge-Funktion, um die statische HTML-Antwort zum Zeitpunkt der Anfrage zu ändern, aber in der Vergangenheit hatte ich Leistungsprobleme beim Aufrufen von APIs von Drittanbietern auf diese Weise, z eine langsamere Zeit bis zum ersten Byte (TTFB) als gewünscht. Lesen Sie, wie ich mein brutales TTFB repariert habe, um mehr Kontext zu erhalten.
Außerdem handelt es sich bei dieser Funktion auf meiner Website um eine progressive Verbesserung, und die Funktion der Seite ist nicht davon abhängig, dass Bluesky-Likes angezeigt werden. Daher spielt es keine Rolle, wenn Aufrufe der Bluesky-API auf dem Client fehlschlagen, und wir können das DOM entsprechend bereinigen. Wenn wir denselben Code auf einem Server ausführen würden, könnte er das Rendern der Seite blockieren (zumindest ohne ordnungsgemäße Fehlerbehandlung) und der Beitrag würde nicht gelesen. Große Schande.
Da meine Website eine statische Website ist, könnte ich technisch gesehen die Bluesky-Daten zur Erstellungszeit abrufen und die Daten in jedem Blog-Beitrag statisch rendern. Ich wollte jedoch, dass diese Funktion Freude bereitet, indem sie ein interaktives Erlebnis nahezu in Echtzeit bietet. Und außerdem wäre es nicht ideal, meine Website etwa jede Minute neu zu erstellen, um die Daten synchron zu halten.
Optimierung für Leistung
Da wir n Bilder von Drittanbietern (Benutzer-Avatare) laden, ist die Größe der Bilder wichtig. Glücklicherweise stellt die Bluesky-API mindestens zwei Bildgrößen für jeden Benutzer bereit, und wir möchten die kleinste verwenden.
Angesichts der Tatsache, dass wir n Bilder laden und nicht wissen, wie lange das Laden dauern wird oder welchen Einfluss sie auf das Seitenlayout haben werden, wurden außerdem einige Überlegungen angestellt, um Cumulative Layout Shift (CLS) zu vermeiden ) so weit wie möglich. Diese werden zusammen mit den Codebeispielen unten beschrieben.
Voraussetzungen, um Bluesky-Likes in Ihren Blogbeiträgen anzuzeigen
- Ein Bluesky-Konto
- Eine Website
- Einige Blogbeiträge
- Eine Möglichkeit, eine Bluesky-Beitrags-ID mit Ihren Blog-Beitragsdaten zu speichern (z. B. wenn Sie Ihre Blogs im Markdown schreiben, speichern Sie die Beitrags-ID in Ihrem Titelblatt; wenn Sie ein CMS verwenden, fügen Sie Ihrem Blog-Beitrag ein Feld hinzu Inhaltsmodell usw.)
Der Code
Werfen wir einen Blick auf HTML, CSS und JavaScript, die diese Magie möglich machen.
Der HTML
Der HTML-Code ist in einem Abschnittselement enthalten. Diese Komponente enthält:
- ein h3-Element, das mit der Gesamtzahl der „Gefällt mir“-Angaben gefüllt wird (Ihr Element auf Überschriftenebene kann variieren),
- einen Link zum Bluesky-Beitrag, um die Leute zu ermutigen, ihn zu mögen, und
- ein leeres ul-Element, bereit zum Füllen mit Bluesky-Avataren.
Für die CSS-Klassen verwende ich die BEM-Syntax, Sie können jedoch jedes beliebige CSS-System verwenden, das Sie bevorzugen. Um die DOM-Elemente in JavaScript anzusprechen, verwende ich Datenattribute mit dem Präfix data-bsky; Sie können mithilfe von CSS-Klassen in JavaScript auf DOM-Elemente abzielen, aber ich bevorzuge die Verwendung von Datenattributen, um Anliegen zu trennen. Sie könnten sogar IDs für die Elemente verwenden und diese bei Bedarf mit JavaScript gezielt ansprechen.
Die mit einem Blog-Beitrag verknüpfte bskyPostId wird einem Datenattribut in einem Meta-Tag neben dieser Komponente hinzugefügt. Dies ist ein reiner Einzelfall für mein Setup, da ich eine statische Site erstelle und auf der Clientseite Zugriff auf eine Build-Time-Variable in einer separaten JavaScript-Datei benötige. Möglicherweise haben Sie in Ihrem App-Status Zugriff auf Ihre bskyPostId, wenn Sie beispielsweise ein anderes Framework verwenden. Bearbeiten Sie es nach Belieben.
<meta data-bsky-post-id="${post.bskyPostId}" /> <section> <h3> The CSS </h3> <p>The CSS you see here has been slightly modified from my implementation to avoid you having to use my custom properties and personal spacing preferences. Please add what you need to make your implementation right for you.</p> <p>I’d like to call out the magic number min-height: 400px on the parent container class, .post__likes; this is to maintain a fixed height of at least 400px for the element on page load, so that the avatars don't shift the page content around as they gradually load in (the container will expand vertically on mobile). This is to prevent a bad CLS score. In the JavaScript code below, you’ll notice that I’ve specified a limit on the number of avatars fetched, based on how many avatars will fit comfortably inside this fixed-height container.<br> </p> <pre class="brush:php;toolbar:false">.post__likes { min-height: 400px; /* to avoid CLS as much as possible! */ } .post__likesTitle { font-size: 2rem; color: #000; } .post__likesCta { color: #000; font-size: 1.25rem; font-style: italic; display: block; } .post__likesList { list-style: none; padding: 0; display: flex; flex-direction: row; flex-wrap: wrap; } .post__like { width: 4rem; aspect-ratio: 1/1; margin-right: -1rem; border-radius: 100%; filter: drop-shadow(0px 0.125rem 0.125rem rgba(0, 0, 0, 0.25)); } .post__like__avatar { border-radius: 100%; } .post__like--howManyMore { width: 4rem; aspect-ratio: 1/1; display: flex; justify-content: center; align-items: center; font-size: 1rem; font-weight: bold; font-style: italic; background-color: #208bfe; /* Bluesky blue */ color: #fff; }
Das JavaScript
Haftungsausschluss: Dieser Code wird in einfachem JavaScript bereitgestellt; Sie können diesen Code bei Bedarf an Ihr eigenes Website-Framework anpassen, aber das Schöne daran, ihn in einfachem JavaScript zu schreiben, ist, dass Sie ihn unverändert auf jedem Frontend verwenden können.
Zuerst müssen Sie einige Variablen definieren. Das LIMIT gibt die maximale Anzahl an Avataren an, die Sie auf Ihrer Seite anzeigen möchten, je nachdem, wie Sie sie anzeigen möchten. Mein Limit liegt bei 59, weil so viele Avatare gut in vier Reihen passen (mit zusätzlichem Platz, um anzuzeigen, wie viele weitere Likes es gibt). Die maximale Anzahl an Avataren, die Sie mit diesem API-Endpunkt abrufen können, beträgt 100.
Die bskyPostId wird aus dem Meta-Tag abgerufen, wie im HTML-Abschnitt oben beschrieben (je nach Framework und vorhandenem Code müssen Sie dies möglicherweise anders machen).
Um das DOM nach dem Abrufen der Daten zu ändern, müssen wir mit document.querySelector() auf die Elemente Container, likesContainer und likesCount zugreifen.
Ersetzen Sie den Wert von myDid durch Ihren eigenen Bluesky DID. Und alles andere ist startklar.
<meta data-bsky-post-id="${post.bskyPostId}" /> <section> <h3> The CSS </h3> <p>The CSS you see here has been slightly modified from my implementation to avoid you having to use my custom properties and personal spacing preferences. Please add what you need to make your implementation right for you.</p> <p>I’d like to call out the magic number min-height: 400px on the parent container class, .post__likes; this is to maintain a fixed height of at least 400px for the element on page load, so that the avatars don't shift the page content around as they gradually load in (the container will expand vertically on mobile). This is to prevent a bad CLS score. In the JavaScript code below, you’ll notice that I’ve specified a limit on the number of avatars fetched, based on how many avatars will fit comfortably inside this fixed-height container.<br> </p> <pre class="brush:php;toolbar:false">.post__likes { min-height: 400px; /* to avoid CLS as much as possible! */ } .post__likesTitle { font-size: 2rem; color: #000; } .post__likesCta { color: #000; font-size: 1.25rem; font-style: italic; display: block; } .post__likesList { list-style: none; padding: 0; display: flex; flex-direction: row; flex-wrap: wrap; } .post__like { width: 4rem; aspect-ratio: 1/1; margin-right: -1rem; border-radius: 100%; filter: drop-shadow(0px 0.125rem 0.125rem rgba(0, 0, 0, 0.25)); } .post__like__avatar { border-radius: 100%; } .post__like--howManyMore { width: 4rem; aspect-ratio: 1/1; display: flex; justify-content: center; align-items: center; font-size: 1rem; font-weight: bold; font-style: italic; background-color: #208bfe; /* Bluesky blue */ color: #fff; }
Als nächstes definieren wir zwei Funktionen, die das DOM mithilfe der Daten aus den Bluesky-APIs ändern.
Die Funktion drawHowManyMore wird nur ausgeführt, wenn der Beitrag mehr Likes enthält, als von der getLikes-API abgerufen wurden. Auch hier verwende ich die BEM-Syntax für mein CSS. Wenn Sie etwas anderes verwenden, müssen Sie aktualisieren, welche Klassen dem likesMore-Element hinzugefügt werden.
Die Funktion „drawLikes“ durchläuft die Likes-Daten der getLikes-API und erstellt ein img-Element für jeden Akteur. Beachten Sie, dass wir avatar durch avatar_thumbnail in der Zeichenfolge like.actor.avatar ersetzen. Dadurch wird ein Bild mit einer Größe von 128 x 128 Pixel anstelle der Standardgröße von 1000 x 1000 Pixel angezeigt. Vergessen Sie nicht das Alt-Text-Attribut im img-Element.
const LIMIT = 59; const bskyPostId = document.querySelector("[data-bsky-post-id]").dataset.bskyPostId; const container = document.querySelector("[data-bsky-container]"); const likesContainer = document.querySelector("[data-bsky-likes]"); const likesCount = document.querySelector("[data-bsky-likes-count]"); const myDid = "add_your_did"; const bskyAPI = "https://public.api.bsky.app/xrpc/"; const getLikesURL = `${bskyAPI}app.bsky.feed.getLikes?limit=${LIMIT}&uri=`; const getPostURL = `${bskyAPI}app.bsky.feed.getPosts?uris=`;
Sehen Sie sich die vollständige JavaScript-Datei auf GitHub an.
Einige coole Beobachtungen
Es dauert nur wenige Sekunden, bis ein Bluesky-Benutzer einen Beitrag mit „Gefällt mir“ markiert, bis sein Avatar in einem Blog-Beitrag erscheint.
Die Likes-Akteure sind nach Zeitstempel des Likes absteigend sortiert. Wenn also jemand Ihren Beitrag auf Bluesky mag, erscheint er oben links im Avatar Liste. Ich hoffe, dass dies noch mehr Freude bereitet als beabsichtigt (zumindest für Leseregionen von links nach rechts).
Die Bluesky getPosts API wird schneller aktualisiert als die getLikes API. Das bedeutet, dass bei einer Seitenaktualisierung die Likes-Zahl im Allgemeinen aktuell ist und es bei einer weiteren Aktualisierung ein oder zwei weitere Sekunden dauern kann, bis die Avatare angezeigt werden.
Teilen Sie mir Ihre Ergebnisse auf Bluesky mit
Ich hoffe, es versteht sich von selbst, dass ich gerne Ihre Implementierungen sehen würde und wie Sie diesen Code auf Ihrer Website zum Laufen gebracht haben. Wenn Sie bereit sind, darüber auf Bluesky zu posten, markieren Sie den Benutzernamen @whitep4nth3r.com in den Antworten, und ich freue mich, wenn mein Gesicht in Ihrem Blog-Beitrag erscheint.
Das obige ist der detaillierte Inhalt vonWie ich Bluesky-Likes in meinen Blogbeiträgen zeige. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen











Versuchen wir, hier einen Begriff zu prägen: "Statischer Formanbieter". Sie bringen Ihre HTML

Zu Beginn eines neuen Projekts erfolgt die SASS -Zusammenstellung im Blinzeln eines Auges. Dies fühlt sich gut an, besonders wenn es mit Browsersync kombiniert ist, das nachlädt

In der Zusammenfassung der Plattformnachrichten in dieser Woche stellt Chrome ein neues Attribut für das Laden, Zugänglichkeitspezifikationen für Webentwickler und die BBC -Bewegungen ein

Ich schaue mir das HTML -Element zum ersten Mal an. Ich habe es für eine Weile dessen bewusst, aber Haven ' Es wurde es noch nicht für einen Dreh genommen. Es hat einige ziemlich cool und

Buy or Build ist eine klassische Technologiedebatte. Das Aufbau von Dingen selbst ist vielleicht billiger, weil Ihre Kreditkartenrechnung keine Werbebuchung gibt, aber

Für eine Weile war iTunes der große Hund im Podcasting. Wenn Sie also "Abonnieren Sie Podcast" verlinkt haben, um zu mögen:

In der Roundup in dieser Woche, einem praktischen Lesezeichen für die Inspektion von Typografie, unter Verwendung dessen, wie sich JavaScript -Module gegenseitig importieren, sowie Facebook ' s.

Es gibt eine Menge Analyseplattformen, mit denen Sie Besucher- und Nutzungsdaten auf Ihren Websites verfolgen können. Vielleicht vor allem Google Analytics, das weit verbreitet ist
