Executando verificação de segurança...
11

TabNews em meu blog

Imagem 1 Imagem 2

Tecnologias usadas:

  • Javascript.
  • TailwindCSS.
  • html.
  • API do TabNews.

Usado API do TabNews, segui filtrando minhas publicações https://www.tabnews.com.br/api/v1/contents/JeielLimaMiranda. Pois há comentários, não é isso que queremos. Então será filtrado apenas o título e a data para sabermos quando foi publicado.

.filter(post => post.status === 'published' && post.title && post.published_at)                      

Imagine carregar, mais de 20 posts numa aba só. Por esse motivo resolvir limitar 5 posts.

 let visiblePosts = 5;

Caso usuário queira exibir mais, é possível liberar um adicional de 5, até que todos os post sejam exibidos.

loadMoreButton.addEventListener('click', () => {
    visiblePosts += 5;
    renderPosts();
});

Também inclui uma barra de pesquisa. Melhor quando se há vários posts/artigos.

// Função para filtrar posts pela pesquisa
function filterPosts() {
    const query = searchInput.value.toLowerCase();
    const filteredPosts = posts.filter(post => post.title.toLowerCase().includes(query));
    postsList.innerHTML = '';
    filteredPosts.forEach(post => {
        const postElement = document.createElement('article');
        postElement.className = 'mb-6 p-6 bg-white shadow-lg rounded-lg transition-transform transform hover:scale-105';
        postElement.innerHTML = `
            <h2 class="text-2xl font-semibold mb-2">
                <a href="#" class="text-blue-600 hover:underline post-link" data-slug="${post.slug}">${post.title}</a>
            </h2>
            <p class="text-gray-500">${new Date(post.published_at).toLocaleDateString()}</p>
        `;
        postsList.appendChild(postElement);
    });

Como na API as datas não estão em ordem, é preciso criar uma lógica para isso. No meu caso, é data mais recente para mais antiga.

.sort((a, b) => new Date(b.published_at) - new Date(a.published_at));

Por fim, inserir a tag footer, como todo site tem com informações sobre.

<!-- Menu de informações -->
<footer class="bg-gray-800 text-white p-4 mt-6">
    <div class="container mx-auto flex justify-between items-center">
        <p>&copy; 2024 Jeiel - Todos os direitos reservados.</p>
        <div>
            <a href="https://www.linkedin.com/in/jeiel-lima-miranda" class="text-blue-400 hover:underline">LinkedIn</a> |
            <a href="https://github.com/Jetrom17" class="text-blue-400 hover:underline">GitHub</a> |
            <a href="http://jeiel.pages.dev/" class="text-blue-400 hover:underline">Link Bio</a>
            |
            <a href="http://quiz-jeiel.vercel.app/" class="text-blue-400 hover:underline">Quiz Bíblico</a>
        </div>
    </div>
</footer>

Em resumo, este projeto não apenas demonstra a aplicação em JavaScript, HTML e CSS, mas também destaca a importância de uma interface de usuário bem projetada e funcional para My Blog. Através da utilização da API do TabNews, consegui criar uma plataforma que facilita o acesso e a interação com minhas publicações, proporcionando uma experiência agradável para os usuários.

My Blog: https://jeiel-blog.vercel.app/

Carregando publicação patrocinada...
9

Massa, Jeiel!

Você pode usar o filtro with_children=false para obter apenas as publicações (sem comentários): https://www.tabnews.com.br/api/v1/contents/JeielLimaMiranda?with_children=false

Esse filtro foi implementado no PR #1188 pelo ErickCReis, para implementar a separação de publicações e comentários no perfil do usuário (PR #1577) e que posteriormente foi também feita na página Recentes (PR #1588, pelo Felipe Barso).

Você também pode usar a paginação pela API com per_page=5 e page=numero: https://www.tabnews.com.br/api/v1/contents/JeielLimaMiranda?with_children=false&per_page=5&page=2

1

Que legal, até então não sabia desta nova atualização. É fundamental. Aqui tem alguma documentação completa com essas informações sobre API ou só no Github?

2

Infelizmente não existe uma documentação da API, e até tem a issue #555 sobre isso no GitHub. A única "documentação" é o código, mesmo.

Caso você queira saber os parâmetros de um endpoint, pode procurar o arquivo em pages/api/v1/... e ver o ...ValidationHandler. Nesse caso, o arquivo é pages/api/v1/contents/index.public.js e a função é getValidationHandler:

https://github.com/filipedeschamps/tabnews.com.br/blob/a67be7fa4f7f88003223009a92a7c35e6b4fdbb5/pages/api/v1/contents/index.public.js#L35-L42

function getValidationHandler(request, response, next) {
  const cleanValues = validator(request.query, {
    page: 'optional',
    per_page: 'optional',
    strategy: 'optional',
    with_root: 'optional',
    with_children: 'optional',
  });

Sei que isso não é prático, e não necessariamente os nomes escritos aí são os nomes dos parâmetros (eles são os nomes dos "validadores"), mas isso pode dar uma ajuda em casos simples. Se ter alguma dúvida sobre a API, pode perguntar no GitHub.

-2
2
2

Bom ter você aqui. Sugestão que dou é criar um vídeo exclusivo em seu canal. "Criando um blog em {lang}; consumindo API do TabNews".

lang = React, Javascript, Django, Go [...]

2