Menampilkan Feed Page Post and Post Blogger
Sst, this is my "home" style :-)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Sitemap</title>
<!-- Font Awesome for icons -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0-beta3/css/all.min.css">
<!-- Bootstrap CSS -->
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet">
<style>
.my-category {
font-weight: bold;
margin-top: 20px;
text-align: center;
}
.my-link-list {
margin-left: 0;
padding-left: 0;
list-style: none;
}
.my-link-item {
margin: 5px 0;
}
.my-container {
display: flex;
flex-wrap: wrap;
justify-content: center; /* Center the container */
margin: 20px auto;
max-width: 1200px;
}
.my-column {
flex: 1;
min-width: 100%;
box-sizing: border-box;
padding: 10px;
text-align: center;
}
@media (min-width: 768px) {
.my-column {
min-width: 50%;
}
}
@media (min-width: 992px) {
.my-column {
min-width: 33.33%;
}
}
hr {
margin: 40px 0;
border: 0;
border-top: 1px solid #ccc;
}
</style>
</head>
<body>
<div class="my-container" id="my-content-container"></div>
<script>
async function fetchBlogspotData(feedUrl, isPost = true) {
const response = await fetch(feedUrl);
const data = await response.json();
return data.feed.entry.map(entry => {
const title = entry.title.$t;
const url = entry.link.find(link => link.rel === 'alternate').href;
if (isPost) {
// For posts, categories are labels
const labels = entry.category ? entry.category.map(cat => cat.term) : ['Uncategorized'];
return { title, url, labels };
} else {
// For pages, categories are metadata in content
const content = entry.content.$t;
const categoryMatch = content.match(/<!-- Category:\s*(.*?)\s*-->/);
const category = categoryMatch ? categoryMatch[1] : 'Uncategorized';
return { title, url, labels: [category] }; // Using labels as categories for consistency
}
});
}
function groupByCategory(data) {
const categoryMap = {};
data.forEach(item => {
item.labels.forEach(label => {
if (!categoryMap[label]) {
categoryMap[label] = [];
}
categoryMap[label].push(item);
});
});
return categoryMap;
}
function createLinkItem(link) {
return `
<div class="my-link-item">
<i class="far fa-thumbs-up"></i> <a href="${link.url}" target="_blank">${link.title}</a>
</div>
`;
}
function createCategorySection(category, links) {
return `
<div class="my-category">
<i class="fa fa-th-large"></i> ${category}
</div>
<div class="my-link-list">
${links.map(createLinkItem).join('')}
</div>
`;
}
async function renderContent() {
const contentContainer = document.getElementById('my-content-container');
const pagesData = await fetchBlogspotData('https://YOURBLOGNAME.blogspot.com/feeds/pages/default?alt=json&max-results=100', false);
const postsData = await fetchBlogspotData('https://YOURBLOGNAME.blogspot.com/feeds/posts/default?alt=json&max-results=100');
const pagesGrouped = groupByCategory(pagesData);
const postsGrouped = groupByCategory(postsData);
// Daftar kategori yang ingin disembunyikan
const excludedCategories = ['satu', 'dua', 'Uncategorized'];
// Render pages
const pagesColumns = ['', '', ''];
let i = 0;
for (const [category, links] of Object.entries(pagesGrouped)) {
if (!excludedCategories.includes(category)) {
pagesColumns[i % 3] += createCategorySection(category, links);
i++;
}
}
pagesColumns.forEach(column => {
const columnDiv = document.createElement('div');
columnDiv.className = 'my-column';
columnDiv.innerHTML = column;
contentContainer.appendChild(columnDiv);
});
// Add separator
contentContainer.innerHTML += '<hr>';
// Render posts
const postsColumns = ['', '', ''];
i = 0;
for (const [category, links] of Object.entries(postsGrouped)) {
if (!excludedCategories.includes(category)) {
postsColumns[i % 3] += createCategorySection(category, links);
i++;
}
}
postsColumns.forEach(column => {
const columnDiv = document.createElement('div');
columnDiv.className = 'my-column';
columnDiv.innerHTML = column;
contentContainer.appendChild(columnDiv);
});
}
renderContent();
</script>
<!-- Bootstrap JS and dependencies -->
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.3/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>
Elang Note:
Fetch Data:
- Untuk pos, kategori diambil dari label.
- Untuk halaman, kategori diambil dari metadata dalam konten (
<!-- Category: Category1 -->).
CSS:
- Memastikan elemen-elemen berada di tengah halaman dengan penataan responsif.
JavaScript:
- Memisahkan halaman (
pages) dan pos (posts) dengan<hr>. - Menyusun kategori dengan benar dan menampilkan kategori yang tidak termasuk dalam daftar yang dikecualikan.
- Memisahkan halaman (
Silakan mengganti https://YOURBLOGNAME.blogspot.com/feeds/pages/default?alt=json&max-results=100 dan https://YOURBLOGNAME.blogspot.com/feeds/posts/default?alt=json&max-results=100 dengan URL feed yang sesuai dengan blog Anda. Pastikan data dari kedua feed sesuai dengan struktur yang diharapkan.
Audio Title