Instance-qualified Mastodon URLs | InfoWorld

Dans Lists and People in Mastodon, j’ai montré comment j’ai ajouté un prêt colonne à la Suivant onglet du navigateur Mastodon que je construis. C’était un pas dans la direction d’une gestion de liste plus facile et plus puissante. Cela me permet de voir si les personnes que je suis sont affectées à des listes et de déterminer qui devrait figurer sur une liste (ou peut-être sur une liste différente).

Aujourd’hui, quand j’ai commencé à utiliser sérieusement cette nouvelle opportunité, j’ai découvert un nouveau défi. Pour affecter quelqu’un à une liste ou modifier l’affectation d’une liste, j’ai cliqué sur le lien dans le compte_url colonne pour ouvrir le profil de cette personne dans l’application Web Mastodon. C’était bien pour les comptes sur mon serveur domestique, mastodonte.social. Une URL de compte comme https://mastodon.social/@burningbird de Shelley Powers m’amène au profil de Shelley sur mon serveur domestique où le gestionnaire de liste est disponible.

Mais si je suis quelqu’un ailleurs, comme Ward Cunningham sur https://mastodon.radio/@k9ox, l’URL du compte m’amène au profil de Ward sur ce serveur où le gestionnaire de liste n’est pas disponible. Pour attribuer Ward à une liste, je devais saisir l’URL de son compte, la coller dans le champ de recherche de l’application Web de mon serveur domestique, puis cliquer sur le lien résultant : https://mastodon.social/@k9ox @mastodon.radio .

Cela a vieilli très vite, alors j’ai ajusté le Suivant tab pour afficher le dernier type d’url que j’appellerai une url qualifiée d’instance.

Steampipe propose plusieurs façons d’effectuer cet ajustement. En tant qu’utilisateur du tableau de bord, vous pouvez utiliser les fonctions d’expression régulière de Postgres pour effectuer la transformation sur la requête SQL qui pilote la vue. Mais vous préférez ne pas avoir à le faire. C’est bien mieux si le plugin le fait pour vous, donc le SQL ne peut se référer qu’à une colonne nommée instance_qualified_url.

J’ai choisi cette dernière approche. En tant qu’auteur d’un plugin Steampipe, vous souhaitez rendre la vie aussi simple que possible aux utilisateurs du plugin. Lorsque vous êtes à la fois l’auteur du plugin et du tableau de bord, comme je le suis dans ce cas, vous pouvez profiter d’un joli cercle vertueux. Au fur et à mesure que le tableau de bord évolue, il découvre des moyens d’améliorer le plugin, ce qui conduit à une utilisation accrue du tableau de bord, ce qui suggère davantage d’opportunités d’améliorer le plugin. J’ai vraiment apprécié la co-évolution de ces deux composants !

Ajouter une nouvelle colonne à une table Steampipe

Pour effectuer le changement, j’ai étendu la structure qui définit les colonnes des tables mappées à partir de l’API du compte Mastodon. Un plugin Steampipe définit les colonnes en utilisant une structure de liste comme celle-ci.

...,
{
	Name:        "url",
	Type:        proto.ColumnType_STRING,
	Description: "URL for the account.",
},
...,

Cette structure indique : « Lorsque le nom d’un champ de niveau supérieur dans la réponse de l’API est URLdites à Steampipe de créer une colonne de base de données avec ce nom et avec le type Postgres text.”

Vous pouvez également transformer des valeurs en réponses API pour synthétiser de nouvelles colonnes qui n’apparaissent pas dans les réponses API. Voici la structure que j’ai ajoutée pour ce cas.

...,
{	
	Name:        "instance_qualified_account_url",
	Type:        proto.ColumnType_STRING,
	Description: "Account URL prefixed with my instance.",
	Transform:   transform.FromValue().Transform(instanceQualifiedAccountUrl),
},
...

Celui-ci dit : « Envoyez la réponse de l’API à la fonction de transformation instanceQualifiedAccountUrlet utilisez son résultat comme valeur de colonne.

Voici la fonction.

func instanceQualifiedAccountUrl(ctx context.Context, input *transform.TransformData) (interface{}, error) {
	url := input.Value.(*mastodon.Status).Account.URL
	qualifiedUrl := qualifiedUrl(ctx, url)
	return qualifiedUrl, nil
}

Déléguer le travail réel à une autre fonction.

func qualifiedUrl(ctx context.Context, url string) string {
	plugin.Logger(ctx).Debug("instanceQualifiedUrl", "server", homeServer, "url", url)
	re := regexp.MustCompile(`https://([^/]+)/@(.+)`)
	matches := re.FindStringSubmatch(url)
	if len(matches) == 0 {
		return url
	}
	person := matches[1]
	server := matches[2]
	qualifiedUrl := fmt.Sprintf("%s/@%s@%s", homeServer, server, person)
	plugin.Logger(ctx).Debug("instanceQualifiedUrl", "qualifiedUrl", qualifiedUrl)
	schemelessHomeServer := strings.ReplaceAll(homeServer, "https://", "")
	qualifiedUrl = strings.ReplaceAll(qualifiedUrl, "@"+schemelessHomeServer, "")
	plugin.Logger(ctx).Debug("qualifiedUrl", "qualifiedUrl", qualifiedUrl)
	return qualifiedUrl
}

Parce que? Deux ensembles différents de définitions de colonne nécessitent la même transformation. instanceQualifiedAccountUrl travailler avec les réponses Account API. Mais les URL de compte apparaissent également dans l’API Status qui pilote les vues chronologiques. Ceux-ci utilisent une fonction de transformation différente, instanceQualifiedStatusUrlpour effectuer la même transformation pour une réponse d’API différente.

URL du compte vers URL d’état

Il instanceQualifiedAccountUrl colonne a résolu le problème initial. J’ai pu enlever mon chapeau d’auteur de plug-in, mettre mon chapeau d’auteur de tableau de bord et faire référence aux URL de compte en tant qu’URL qualifiées d’instance dans tous les onglets qui les affichent. Tout lien de ce type mène maintenant à un profil que je vois à travers l’objectif de mastodonte.social et cela me permet d’utiliser directement le gestionnaire de liste de l’application Web, sans la procédure fastidieuse de copier/coller/rechercher.

Cependant, ma danse heureuse n’a pas duré longtemps. Nouvellement sensibilisé à cette friction copier/coller/trouver, j’ai réalisé que cela se produisait encore lorsque j’essayais de répondre aux éléments qui apparaissent dans une vue chronologique. Voici un exemple récent : https://techpolicy.social/@mnot/109610641523489182.

C’est l’URL affichée sur le tableau de bord. Lorsque je clique, j’atterris sur le serveur de Mark et je peux voir l’élément, mais si j’essaie de répondre, je suis confronté à la redoutable opération copier/coller/trouver.

Il n’y a pas de problème! Je vais utiliser une transformation similaire ! Pas si vite. Je peux former une URL comme https://mastodon.social/@mnot@techpolicy.social/109610641523489182 mais ça ne va nulle part.

Si je copie/colle/trouve, j’atterris sur une URL similaire mais différente : https://mastodon.social/@mnot@techpolicy.social/109610641692667630. Il a la même structure mais un ID de bip différent. Cette URL est également celle qui apparaît dans la chronologie de lancement de l’application Web, je peux donc répondre directement à partir de cette vue.

Je suis hors de ma ligue ici, donc je vais terminer avec un appel à l’aide. Il est logique qu’un serveur domestique attribue son propre identifiant à un élément extrait d’un serveur externe et que l’application Web utilise cet identifiant. Mais je ne vois pas de moyen d’acquérir cet identifiant directement à partir de l’API. Je soupçonne qu’il est possible de l’acquérir via la recherche, mais le faire pour chaque élément d’une chronologie épuisera rapidement le budget serré pour les demandes d’API (seulement 300 toutes les cinq minutes).

Alors Lazy Mastodon, suis-je coincé ici ou existe-t-il un moyen de transformer les URL d’état externes en URL d’état relatives à l’instance ?

Mise à jour : Résolu !

Après avoir discuté avec Jari Pennanen, j’ai jeté un autre coup d’œil et j’ai réalisé que l’ID requis était disponible dans la réponse de l’API après tout, je ne l’utilisais tout simplement pas (facepalm). Et, en fait, il existe deux types d’ID : un pour les toots d’origine et un pour les boosts. Les colonnes pour les deux cas sont ajoutées ici et le paramètre pour que le tableau de bord les utilise ici.

Voici le résultat.

URL qualifiée de l'instance IDG

Merci d’être mon canard en caoutchouc, Jari ! Les URL de reblog et de toot qualifiées par l’instance rendent ce tableau de bord beaucoup plus utile.

Voir également:

  1. Espoir pour les fidèles
  2. Créer un panneau Mastodon avec Steampipe
  3. Naviguer dans le Fedivers
  4. Une borne Bloomberg pour Mastodon
  5. Créez votre propre Mastodon UX
  6. Listes et personnes sur Mastodon
  7. Les mastodontes tweetent aussi
  8. URL Mastodon qualifiées par instance

Copyright © 2023 IDG Communications, Inc.

Source