vCard + RSS como alternativa às redes sociais

Traduções: en
22/03/2024

Ano passado depois de conversar um pouco com alguém durante uma conferência, ele perguntou o meu LinkedIn para manter contato, e eu respondi que não tenho.

Já fazem vários anos desde que eu decidi sair das redes sociais. Eu não sinto falta. Aplicativos de mensagem instantânea me permitem manter contato com as pessoas que realmente são importantes para mim em um nível muito mais pessoal.

Ainda assim, essa interação ficou na minha cabeça. De fato seria legal ter um registro dessas conexões também. As pessoas com quem você teve uma conversa interessante por alguns minutos. Poder checar como elas estão de vez em quando, onde estão trabalhando e no que estão hackeando.

Basicamente eu gostaria que todo mundo tivesse um perfil online e um feed, que eu pudesse facilmente checar e seguir, e que os dados associados a eu estar seguindo pudessem ser armazenados localmente. Por que isso precisa ser exclusivo a redes sociais?

Não é. Na verdade, a parte do feed já foi resolvido há muito tempo com o RSS/Atom. Então só é necessário ter a URL do feed RSS/Atom de alguém, que você pode adicioná-la ao seu leitor de feed e facilmente seguir as atualizações de uma pessoa independente de onde elas são publicadas.

A parte do perfil, um lugar com pontos chave sobre o estado atual de uma pessoa (nome, foto, localizaçäo, empresa, etc) é a que historicamente foi mais atrelada a redes sociais. Sites pessoais muitas vezes tem uma página "sobre" com essas informações, mas por conta da falta de estrutura eu não acho elas tão úteis quanto os perfis de redes sociais.

Mas na verdade existe um padrão aberto amplamente usado para armazenar perfis também: vCard. Ele é conhecido princpalmente como o formato usado por clientes de email para armazenar contatos, os quais são até sincronizados entre servidor e clientes usando o protocolo CardDAV. Mas vCards também são usados para contatos no celular: é possível importar e exportar contatos no iOS e Android usando vCards.

Então foi aí que eu percebi, se existe um padrão aberto amplamente usado para feeds, e outro para perfis, por que não juntar os dois? Ao colocar a URL de um feed RSS/Atom em um vCard, ele se torna um único arquivo com toda a informação necessária para identificar uma pessoa e acompanhar as atualizações dela. Por ser um único arquivo, é fácil de compartilhar com os outros e também de armazenar os vCards de todas as suas conexões localmente.

Agora, um ponto interessante é que apesar da informação de perfil em um vCard poder ficar desatualizada, uma das propriedades disponíveis é a SOURCE que tem como objetivo armazenar a URL de onde a última versão do vCard pode ser obtida. Ou seja, ao hospedar seu vCard em uma URL pública, por exemplo no seu site pessoal, é possível que pessoas que já baixaram ele o mantenham atualizado.

Quanto a como a URL do feed pode ser incluída no vCard, depois de ler por cima a última versão da especificação, eu originalmente tinha a intenção de que ela fosse uma propriedade URL padrão. Mas eu queria que a URL principal do vCard ainda fosse a do site da pessoa, então algum mecanismo seria necessário para diferenciar entre as duas. Minha primeira ideia foi usar o parâmetro MEDIATYPE na URL, mas a especificação diz explicitamente que para protocolos como o HTTP o cabeçalho HTML Content-type deveria ser usado para isso. Porém, aparentemente, apesar de feeds RSS/Atom terem media type próprios padronizados (application/rss+xml e application/atom+xml respectivamente), na prática, text/xml é usado, o que não os identifica como feed. Então no fim, para conseguir determinar que uma URL em um vCard é de um feed, a URL teria que ser baixada e o arquivo lido. Para evitar essa complicação, eu decidi, relutantemente, usar uma propriedade não padronizada, X-FEED, para o feed.

Testando na prática

Para conseguir testar a ideia na prática, eu criei esse repositório com dois scripts simples. O primeiro é o script vcard-render que lê vCards e renderiza eles usando um template jinja. A ideia é que você pode usá-lo para renderizar o seu vCard e o vCard de suas conexões no seu site, que é exatamente como eu estou usando ele nesta página que eu adicionei ao meu site (ela pode ser encontrada através da página Sobre). Para detalhes sobre como eu integrei o script no meu website, veja este commit.

O outro script é o vcard-to-opml que extrai feeds de vCards e gera um arquivo OPML com eles, o qual pode então ser importado em um leitor de feeds. A ideia é usar esse script nos vCards de todas as pessoas que você baixou (suas conexões) para que você possa facilmente seguir os feeds delas. Eu uso o leitor de feeds newsboat, então eu adicionaria o seguinte comando em um crontab para rodá-lo periodicamente (assim que eu tiver algumas conexões de verdade!):

newsboat -i <(awk 1 ~/ark/etc/dav/contacts/5DEB-65D21680-2F1-4AEA3480/* | ./vcard-to-opml.py)

Nota: awk é usado aqui ao invés de um simples cat porque aparentemente esses vCards não têm \n no final do arquivo. Não sei se isso é culpa do meu provedor de email, onde eu guardo meus vCards, ou do vdirsyncer, que é o programa que eu uso para manter uma cópia local dos meus vCards.

Conclusão

Se você tiver interesse em experimentar usar vCards e RSS/Atom para conectar com pessoas também, dê uma olhada no repositório, que contém esses scripts. E fique à vontade para entrar em contato para me dizer que está usando, você pode achar meu email no... claro, no meu vCard 😉.

Mesmo se ninguém usar isso, pelo menos agora eu tenho uma boa resposta para a próxima pessoa que pedir meu LinkedIn. "Escaneie esse QR code e você vai ver meu perfil" 🙂.

{image}/qrcode_br.png