Postado em 23.02.2023 15:01
TL;DR. Escrevi uma ferramenta que converte um CSV com suas inscrições no YouTube em um arquivo [OPML](http://opml.org/) com os *feeds* RSS dos canais. Esse arquivo OPML é importável em quase todos os agregadores RSS. Use o conversor em https://yt2opml.gmgall.net/
Com FreshRSS + extensões, não é necessário nem sair do agregador para assistir aos vídeos.
------
Procurei colocar RSS de volta na minha vida desde a [debacle do Twitter](/blog/tchau-twitter).
Sempre fui fã do padrão RSS. Acho que é a melhor forma de consumo de conteúdo na *web*. Hoje, é mais importante do que nunca, já que dá liberdade ao usuário de desviar das diversas formas pelas quais [a *web* se tornou uma merda](https://thewebisfucked.com/).
Só que eu era uma das folclóricas viúvas do [Google Reader](https://pt.wikipedia.org/wiki/Google_Reader). Não tinha me adaptado bem a nenhum outro agregador depois dele. Tentei usar vários, mas nunca parava com nenhum. O que usei por mais tempo depois do Reader foi o [Feedly](https://feedly.com/), mas ele nunca virou meu "ponto central" de consumo da *web* como o Reader foi.
{{< figure src="viuva_google_reader_23-02-2023.png" title="Toda viúva do Google Reader desde 2013." alt="Print de tweet com texto \"Eu trocaria fácil todas as minhas redes sociais pelo Google Reader\"." >}}
Então fui mantendo o Twitter como "agregador". Junta isso com o fato de estarem lá várias pessoas que eu gosto e a comodidade falou mais alto. Meu "ponto central" virou o Twitter.
O novo senhor feudal do Twitter ser um [déspota](https://www.platformer.news/p/yes-elon-musk-created-a-special-system) [mimado](https://arstechnica.com/tech-policy/2023/02/musk-fired-top-engineer-for-explaining-why-his-tweets-views-are-down/) me colocou para procurar, mais uma vez, um agregador que pudesse usar rotineiramente.
Estou feliz em dizer que parece que a busca terminou. Estou usando o [FreshRSS](https://freshrss.org/) há uns 15 dias e estou bem satisfeito.
Minha "dieta de informações" melhorou demais. Já não fico tão ansioso com o *doomscrolling* na *timeline* do Twitter ou lendo a última polêmica de política que chegou aos *trending topics*. Estou lendo textos mais longos, sem um algoritmo no caminho.
Foi apenas natural que eu quisesse consumir **tudo** via RSS, não apenas texto. O próximo candidato óbvio era o YouTube. Com frequência eu abro o *app* e vejo alguma coisa indicada na *home* ou então entro numa sequência de *Shorts* que me fazem gastar um tempão neles enquanto os vídeos dos canais em que sou inscrito mesmo vão ficando para depois.
Minha intuição é que a Google não ia deixar os canais com *feeds* RSS, justamente para forçar a visita ao site. Fico feliz de estar errado. Todo canal tem um *feed* (por enquanto?), só é uma funcionalidade um pouco "escondida".
Os canais no YouTube têm um *Channel ID* único e a URL dos canais seguem o formato `https://www.youtube.com/channel/ID`. O feed fica em `https://www.youtube.com/feeds/videos.xml?channel_id=ID`. Usando como exemplo o canal [Tese Onze](https://www.youtube.com/@TeseOnze), temos:
O problema é que ninguém divulga a URL do seu canal nesse formato. Em geral se usa o formato mais amigável https://www.youtube.com/@TeseOnze.
Então, quem quer acompanhar via RSS os vídeos de suas inscrições no YouTube precisa:
O formato usado no mundo RSS para importar/exportar listas de *feeds* é o [OPML](http://opml.org/), baseado em XML.
Segue um exemplo de OPML:
<?xml version="1.0" encoding="ISO-8859-1"?> <opml version="2.0"> <head> <title>mySubscriptions.opml</title> <dateCreated>Sat, 18 Jun 2005 12:11:52 GMT</dateCreated> </head> <body> <outline text="Yahoo! News: Technology" description="Technology" htmlUrl="http://news.yahoo.com/news?tmpl=index&cid=738" language="unknown" title="Yahoo! News: Technology" type="rss" version="RSS2" xmlUrl="http://rss.news.yahoo.com/rss/tech"/> </body> </opml>
O padrão OPML é quase autoexplicativo: é simplesmente um elemento `<opml>` com 2 elementos obrigatórios: `<head>` e `<outline>`.
Dentro do 1º vão metainformações do arquivo.
Dentro do 2º vai a lista dos *feeds* em si, cada um dentro de um `<outline>`. Os `<outlines>`s podem ser aninhados (caso se deseje colocar *feeds* dentro de uma categoria, por exemplo) e claro que uma lista típica vai trazer mais de um *feed*, mas a intenção aqui é só mostrar o formato. O atributo chave para a gente aqui é o `xmlUrl`, que é o endereço do *feed*.
Nós já sabemos o formato usado para importação de *feeds* e como formar a URL de um *feed* de um canal no YouTube a partir do seu ID.
Só precisamos obter a lista dos IDs dos canais agora.
O [Google Takeout](https://takeout.google.com/) é uma forma de fazer download de todos os registros que a Google possui de um usuário. Basta não esquecer de marcar o YouTube que o arquivo resultante vai conter uma lista de inscrições em `Takeout/YouTube and YouTube Music/subscriptions/subscriptions.csv`.
O formato é bem simples, é um CSV de 3 colunas:
Channel ID,Channel URL,Channel title UC0fGGprihDIlQ3ykWvcb9hg,http://www.youtube.com/channel/UC0fGGprihDIlQ3ykWvcb9hg,Tese Onze
Se você é como eu, pensou logo em fazer um *shell script* que para cada linha do CSV:
Provavelmente funcionaria, mas decidi não [correr](https://stackoverflow.com/questions/3034611/whats-so-bad-about-building-xml-with-string-concatenation) com [tesouras](https://news.ycombinator.com/item?id=16915823) dessa vez e usei pacotes JavaScript próprios para processar [CSV](https://d3js.org/) e [OPML](https://github.com/scripting/opmlPackage).
Se quiser usar no seu navegador, acesse: https://yt2opml.gmgall.net/
Tudo é 100% feito no lado do cliente. O [código](https://github.com/gmgall/YTtoOPML) é de um *backender*, então as manipulações do DOM provavelmente poderiam ser mais elegantes, mas funciona.
Com o arquivo OPML gerado, foi só importá-lo no FreshRSS. Uma possibilidade **muito interessante** nele é a instalação de uma [extensão](https://github.com/kevinpapst/freshrss-youtube) que incorpora os vídeos dentro. Assim, não é necessário sair do agregador para assistir aos vídeos. Mostrei como fica no vídeo abaixo.
{{< youtube id="FwTSpqo4Ucw" title="FreshRSS com extensão pra embutir vídeos do YouTube ativada." >}}
Bem prático, não?