{"id":105,"date":"2025-02-26T11:58:09","date_gmt":"2025-02-26T14:58:09","guid":{"rendered":"https:\/\/martinha.online\/neuroses-cotidianas\/2025\/02\/26\/como-eu-fiz-meu-skoob-self-hosted\/"},"modified":"2025-03-04T15:17:09","modified_gmt":"2025-03-04T18:17:09","slug":"como-eu-fiz-meu-skoob-self-hosted","status":"publish","type":"post","link":"https:\/\/martinha.online\/neuroses-cotidianas\/2025\/02\/26\/como-eu-fiz-meu-skoob-self-hosted\/","title":{"rendered":"Como eu fiz meu Skoob self-hosted"},"content":{"rendered":"\n<p>Eu nem sei h\u00e1 quanto tempo eu uso o Skoob, mas faz mais de 14 anos, porque quando    Eduardo foi me avisar que a gente estava namorando ele disse &#8220;vou atualizar o    cara-livro&#8221; se referindo ao Facebook e eu primeiro pensei no Skoob <em>(imagine    minha surpresa ao abrir o Facebook e ter um pedido de namoro l\u00e1. hihihih lembro    como se fosse ontem, eu estava na casa dos meus pais, no escrit\u00f3rio. Minha m\u00e3e e    minha irm\u00e3 estavam comigo e eu comecei a comemorar &#8220;Estou namorando! Estou    namorando!&#8221;)<\/em>.<\/p>\n\n\n\n<p>Mas nessa onda de servi\u00e7os online sendo doidos e honestamente, o Skoob sempre    pareceu fr\u00e1gil, como se fosse cair a qualquer momento. Fiquei com medo e resolvi    apenas fazer um backup inocente.<\/p>\n\n\n\n<p>O tutorial abaixo n\u00e3o \u00e9 t\u00e3o simples. S\u00f3 t\u00f4 documentando como eu fiz. Se voc\u00ea    quiser fazer isso, <a href=\"https:\/\/calendly.com\/mapreuss\">pode me chamar pra    conversar<\/a> ou eu fa\u00e7o um or\u00e7amento pra fazer pra voc\u00ea.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Extraindo os dados<\/h3>\n\n\n\n<p>Por sorte o Skoob usa uma API interna (eu jurava que era hard-coded, PHP, sei    l\u00e1). Fui na p\u00e1gina da biblioteca em <a href=\"https:\/\/www.skoob.com.br\/estante\/livros\/1\/277235\/page:1\">livros lidos<\/a>,    inspecionei elemento e descobri o endpoint para retornar todos os livros.<\/p>\n\n\n\n<p>Para que voc\u00ea n\u00e3o precise ficar procurando, o endpoint \u00e9<\/p>\n\n\n\n<p>    <code>https:\/\/www.skoob.com.br\/v1\/bookcase\/books\/[seu        id]\/shelf_id:1\/page:1\/limit:36\/<\/code><\/p>\n\n\n\n<p>Troca ali <strong>[seu id]<\/strong> pelo n\u00famero que tem no seu perfil do Skoob.    Por exemplo no meu endere\u00e7o:<\/p>\n\n\n\n<p>https:\/\/www.skoob.com.br\/estante\/livros\/1\/<strong>123<\/strong>\/page:1<\/p>\n\n\n\n<p>Meu id seria <code>123<\/code>. <\/p>\n\n\n\n<p>Eu abri isso no navegador e ele me deu um json. Note que no cabe\u00e7alho ele traz<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code>\"paging\": {<\/code>\n<code>\"total\": 169,<\/code>\n<code>\"page_count\": 5,<\/code>\n<code>\"page\": 1,<\/code>\n<code>\"next_page\": true,<\/code>\n<code>\"prev_page\": false,<\/code>\n<code>\"limit\": 36,<\/code>\n<code>\"first_item\": 1,<\/code>\n<code>\"last_item\": 36<\/code>\n<code>},<\/code><\/code><\/pre>\n\n\n\n<p>T\u00e1 vendo que tem o <code>page_count<\/code>? Como no meu caso eram 5, eu abri o    endpoint as 5 vezes, mudando o <code>page:1<\/code> para <code>page:2<\/code> at\u00e9    5. Precisava? Acho que n\u00e3o. Mas eu fiquei com medo de mudar o <code>limit<\/code>    e n\u00e3o retornar tudo. Eram s\u00f3 5 sabe.<\/p>\n\n\n\n<p>Enfim, copiei e colei as 5 respostas no Visual Studio Code, depois apaguei essa    parte do cabe\u00e7alho, fazendo um grande <code>\"response\": [...]<\/code> com todos    os livros.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tratando os dados<\/h3>\n\n\n\n<p>Depois fui pro <a href=\"https:\/\/chatgpt.com\/share\/67bf5c5d-e060-8010-ba2d-0df04b5cbf3a\">ChatGPT    e pedi pra ele fazer um script em python pra mim<\/a> para transformar esse json    em um CSV. Acho que tem ferramentas que fazem isso online mas eu queria um pouco    de flexibilidade para escolher as colunas que eu queria.<\/p>\n\n\n\n<p>Com o script, fui no <a href=\"https:\/\/colab.research.google.com\/drive\/1-tf0xdQB_y_8CZ_2SXR3YkQyArGUmQ6Q?usp=sharing\">Google    Colab<\/a> e criei o script. Subi meu json e ele criou o CSV pra mim, com as    colunas que pedi. A \u00fanica altera\u00e7\u00e3o que eu fiz foi ter adicionado o endere\u00e7o do    Skoob na frente da URL, que no json n\u00e3o tinha.<\/p>\n\n\n\n<p>Com o CSV, criei um <a href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1K3aNqXkjBmATBPviW4FVY81YSlm7nCRuTAE6uH1jGwA\/edit?usp=sharing\">Google    Sheets<\/a> com os dados. Como n\u00e3o gostei do formato de data, ainda <a href=\"https:\/\/chatgpt.com\/share\/67bf5d16-2bf8-8010-aa35-8ada5512c078\">pedi    um script pro ChatGPT para mudar o formato pra mim<\/a>.<\/p>\n\n\n\n<p><strong>FAQ<\/strong>: Sim, eu sou muito pregui\u00e7osa. Sim, meus prompts s\u00e3o sempre    muito pregui\u00e7osos. N\u00e3o, eu n\u00e3o me arrependo de nada. Sim, eu tenho pena dos 500    litros de \u00e1gua que gastei pra fazer isso.<\/p>\n\n\n\n<p>Pronto, tenho meu backup. E agora?<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mostrando os livros no softr.io<\/h3>\n\n\n\n<p>Eu sou muito cadelinha do <a href=\"http:\/\/softr.io\">softr.io<\/a>. Pra mim \u00e9 uma    das melhores ferramentas de prototipa\u00e7\u00e3o que tem, porque usa o Google Sheets    como base de dados, e eu sei usar o Google Sheets, e isso me deixa feliz. Al\u00e9m    do plano gratuito servir muito bem. <\/p>\n\n\n\n<p>O Airtable tem uma funcionalidade semelhante e nativa (o softr nasceu dando    suporte para o Airtable), mas eu ainda me sinto mais confort\u00e1vel com Sheets e    Softr. O Lovable tamb\u00e9m resolve, usando o Supabase, mas achei&#8230; n\u00e3o <em>    complicado<\/em>, mas meio que um tiro de canh\u00e3o pra matar formiga, sabe? Eu    gosto do tanto certo de flexibilidade e automa\u00e7\u00e3o aqui.<\/p>\n\n\n\n<p>Eu acho bem intuitivo: voc\u00ea cria um novo projeto e conecta sua planilha. Cada    coluna \u00e9 um campo, que tem v\u00e1rios tipos de exibi\u00e7\u00e3o. Por exemplo, o Rating para    a nota que eu dei no livro, no Google Sheets \u00e9 um n\u00famero, mas eu posso escolher    exibir como n\u00famero, texto ou estrelinhas. Ele j\u00e1 tem isso.<\/p>\n\n\n\n<p><a href=\"https:\/\/martinha-leituras.softr.app\/\">O projeto ficou bem legal<\/a>.<\/p>\n\n\n\n<p>Al\u00e9m de fazer a listagem, eu tamb\u00e9m adicionei os campos de Destaques do livro e    Resenha. Fiz uma p\u00e1gina para adicionar livros, que a\u00ed eu posso usar direto a    interface, n\u00e3o preciso atualizar a planilha se n\u00e3o quiser. E ele tem tudo isso    de editar e adicionar j\u00e1 pr\u00e9-feito. <\/p>\n\n\n\n<p>Ele tamb\u00e9m j\u00e1 tem a \u00e1rea de login, ent\u00e3o s\u00f3 eu posso fazer essas edi\u00e7\u00f5es e as    outras pessoas s\u00f3 ver o conte\u00fado. Fica tudo centralizado.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Mais ideias<\/h3>\n\n\n\n<p>Eu n\u00e3o ia, mas agora estou pensando em colocar o status da leitura, tipo: lido,    abandonado, lendo, lista. Assim eu posso j\u00e1 pr\u00e9-cadastrar o que pretendo ler. \u00c9    s\u00f3 adicionar mais uma coluna. <\/p>\n\n\n\n<p>Infelizmente um bug estava me impedindo de editar itens caso eu mexesse no banco    de dados. Eu preciso remover o m\u00f3dulo e adicionar novamente, mesmo pra campos    que j\u00e1 existem. A\u00ed deu pregui\u00e7a.<\/p>\n\n\n\n<p>Eu s\u00f3 n\u00e3o fiz o blog direto l\u00e1 porque achei meio paia, mas agora eu j\u00e1 t\u00f4    considerando. Funcionaria bem. Tem at\u00e9 um m\u00f3dulo nativo pra coment\u00e1rios. Posso    conectar no <a href=\"https:\/\/supabase.com\/\">supabase<\/a> e postar a vontade.<\/p>\n\n\n\n<p>Com certeza eu vou fazer algo semelhante para as minhas impress\u00f5es 3D, com    galeria de fotos, facilidade de impress\u00e3o e links para modelos. Queria bastante    compartilhar mais do processo, e focar menos na venda.<\/p>\n\n\n\n<p>E foi uma del\u00edcia fazer, fazia tempo que eu n\u00e3o nerdeava assim e foi gostoso.    Fiquei bem feliz com o resultado. J\u00e1 tem algumas frases em destaque e algumas    resenhas l\u00e1, mas vou adicionando o restante aos poucos.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eu nem sei h\u00e1 quanto tempo eu uso o Skoob, mas faz mais de 14 anos, porque quando Eduardo foi me avisar que a gente estava namorando ele disse &#8220;vou atualizar o cara-livro&#8221; se referindo ao Facebook e eu primeiro pensei no Skoob (imagine minha surpresa ao abrir o Facebook e ter um pedido de [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":128,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"advanced_seo_description":"","jetpack_seo_html_title":"","jetpack_seo_noindex":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[3],"tags":[],"class_list":["post-105","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-produtos-digitais"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"https:\/\/martinha.online\/neuroses-cotidianas\/wp-content\/uploads\/2025\/03\/3tocmh5my0q-e1741114068170.jpg","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/martinha.online\/neuroses-cotidianas\/wp-json\/wp\/v2\/posts\/105","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/martinha.online\/neuroses-cotidianas\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/martinha.online\/neuroses-cotidianas\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/martinha.online\/neuroses-cotidianas\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/martinha.online\/neuroses-cotidianas\/wp-json\/wp\/v2\/comments?post=105"}],"version-history":[{"count":1,"href":"https:\/\/martinha.online\/neuroses-cotidianas\/wp-json\/wp\/v2\/posts\/105\/revisions"}],"predecessor-version":[{"id":130,"href":"https:\/\/martinha.online\/neuroses-cotidianas\/wp-json\/wp\/v2\/posts\/105\/revisions\/130"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/martinha.online\/neuroses-cotidianas\/wp-json\/wp\/v2\/media\/128"}],"wp:attachment":[{"href":"https:\/\/martinha.online\/neuroses-cotidianas\/wp-json\/wp\/v2\/media?parent=105"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/martinha.online\/neuroses-cotidianas\/wp-json\/wp\/v2\/categories?post=105"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/martinha.online\/neuroses-cotidianas\/wp-json\/wp\/v2\/tags?post=105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}