{"id":26055,"date":"2025-06-12T09:46:04","date_gmt":"2025-06-12T00:46:04","guid":{"rendered":"http:\/\/www.tyosuke20xx.com\/blog\/?p=26055"},"modified":"2025-06-12T09:46:05","modified_gmt":"2025-06-12T00:46:05","slug":"google%e3%81%ae%e4%ba%ba%e6%b0%97%e8%a8%98%e4%ba%8b%e3%82%92%e6%8b%be%e3%81%a3%e3%81%a6%e3%81%8f%e3%82%8b%e3%82%b5%e3%82%a4%e3%83%88","status":"publish","type":"post","link":"http:\/\/www.tyosuke20xx.com\/blog\/?p=26055","title":{"rendered":"Google\u306e\u4eba\u6c17\u8a18\u4e8b\u3092\u62fe\u3063\u3066\u304f\u308b\u30b5\u30a4\u30c8"},"content":{"rendered":"\n<pre class=\"wp-block-code\"><code>&lt;!DOCTYPE html>\n&lt;html lang=\"ja\">\n&lt;head>\n  &lt;meta charset=\"UTF-8\">\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n  &lt;title>Google\u30cb\u30e5\u30fc\u30b9 \u4eba\u6c17\u8a18\u4e8b\u30a2\u30b0\u30ea\u30b2\u30fc\u30bf\u30fc&lt;\/title>\n  &lt;!-- Bootstrap CSS -->\n  &lt;link rel=\"stylesheet\" href=\"https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.5.2\/css\/bootstrap.min.css\">\n  &lt;style>\n    body { background: #f8f9fa; padding-top: 20px; font-family: 'Arial', sans-serif; transition: background .3s, color .3s; }\n    .dark-mode { background: #2c2c2c; color: #f1f1f1; }\n    #controls { margin-bottom: 20px; }\n    .card { border-radius: 10px; box-shadow: 0 4px 8px rgba(0,0,0,0.1); margin-bottom: 15px; transition: transform .2s, background .3s, color .3s; }\n    .dark-mode .card { background: #3a3a3a; color: #f1f1f1; }\n    .card:hover { transform: translateY(-3px); }\n    .card-title { font-size: 1.25rem; margin-bottom: .5rem; }\n    .meta { font-size: 0.85rem; color: #6c757d; margin-bottom: .5rem; }\n    .dark-mode .meta { color: #ccc; }\n    .thumbnail { width: 100%; height: auto; border-top-left-radius: 10px; border-top-right-radius: 10px; }\n    #loading { display: none; font-size: 2rem; text-align: center; margin-top: 40px; }\n    #error { display: none; color: red; text-align: center; margin-top: 20px; }\n    @media (min-width: 768px) {\n      #articles .col-md-6 { flex: 0 0 50%; max-width: 50%; }\n    }\n  &lt;\/style>\n&lt;\/head>\n&lt;body>\n  &lt;div class=\"container\">\n    &lt;div class=\"d-flex justify-content-between align-items-center mb-3\">\n      &lt;h1>Google\u30cb\u30e5\u30fc\u30b9 \u4eba\u6c17\u8a18\u4e8b&lt;\/h1>\n      &lt;button id=\"darkModeToggle\" class=\"btn btn-outline-secondary\">\u30c0\u30fc\u30af\u30e2\u30fc\u30c9&lt;\/button>\n    &lt;\/div>\n    &lt;div id=\"controls\" class=\"d-flex flex-wrap justify-content-between align-items-end\">\n      &lt;div class=\"form-group mb-2 mr-2\">\n        &lt;label for=\"categorySelect\">\u30ab\u30c6\u30b4\u30ea:&lt;\/label>\n        &lt;select id=\"categorySelect\" class=\"form-control\">\n          &lt;option value=\"WORLD\">\u4e16\u754c&lt;\/option>\n          &lt;option value=\"BUSINESS\">\u30d3\u30b8\u30cd\u30b9&lt;\/option>\n          &lt;option value=\"TECHNOLOGY\">\u30c6\u30af\u30ce\u30ed\u30b8\u30fc&lt;\/option>\n          &lt;option value=\"ENTERTAINMENT\">\u30a8\u30f3\u30bf\u30e1&lt;\/option>\n          &lt;option value=\"SPORTS\">\u30b9\u30dd\u30fc\u30c4&lt;\/option>\n          &lt;option value=\"SCIENCE\">\u79d1\u5b66&lt;\/option>\n          &lt;option value=\"HEALTH\">\u5065\u5eb7&lt;\/option>\n        &lt;\/select>\n      &lt;\/div>\n      &lt;div class=\"form-group mb-2 mr-2 flex-grow-1\">\n        &lt;label for=\"searchInput\">\u30ad\u30fc\u30ef\u30fc\u30c9:&lt;\/label>\n        &lt;input id=\"searchInput\" type=\"text\" class=\"form-control\" placeholder=\"\u30bf\u30a4\u30c8\u30eb\u3067\u7d5e\u308a\u8fbc\u307f\">\n      &lt;\/div>\n      &lt;div class=\"form-group mb-2 mr-2\">\n        &lt;label for=\"maxItems\">\u8868\u793a\u6570:&lt;\/label>\n        &lt;input id=\"maxItems\" type=\"number\" class=\"form-control\" value=\"20\" min=\"1\" max=\"100\">\n      &lt;\/div>\n      &lt;button id=\"refreshBtn\" class=\"btn btn-primary mb-2\">\u66f4\u65b0&lt;\/button>\n    &lt;\/div>\n    &lt;div id=\"loading\">&lt;i class=\"fas fa-spinner fa-spin\">&lt;\/i> \u8aad\u307f\u8fbc\u307f\u4e2d...&lt;\/div>\n    &lt;div id=\"error\">&lt;\/div>\n    &lt;div id=\"articles\" class=\"row\">&lt;\/div>\n  &lt;\/div>\n\n  &lt;!-- FontAwesome &amp; jQuery &amp; Bootstrap JS -->\n  &lt;script src=\"https:\/\/cdnjs.cloudflare.com\/ajax\/libs\/font-awesome\/5.15.4\/js\/all.min.js\">&lt;\/script>\n  &lt;script src=\"https:\/\/code.jquery.com\/jquery-3.5.1.min.js\">&lt;\/script>\n  &lt;script src=\"https:\/\/stackpath.bootstrapcdn.com\/bootstrap\/4.5.2\/js\/bootstrap.bundle.min.js\">&lt;\/script>\n  &lt;script>\n    const controls = {\n      category: document.getElementById('categorySelect'),\n      search: document.getElementById('searchInput'),\n      maxItems: document.getElementById('maxItems'),\n      refresh: document.getElementById('refreshBtn'),\n      darkToggle: document.getElementById('darkModeToggle')\n    };\n    const articlesContainer = document.getElementById('articles');\n    const loading = document.getElementById('loading');\n    const errorMsg = document.getElementById('error');\n    const body = document.body;\n\n    function getFeedUrl(topic) {\n      return `https:\/\/news.google.com\/rss\/headlines\/section\/topic\/${topic}?hl=ja&amp;gl=JP&amp;ceid=JP:ja`;\n    }\n    async function fetchArticles() {\n      articlesContainer.innerHTML = '';\n      errorMsg.style.display = 'none';\n      loading.style.display = 'block';\n      const topic = controls.category.value;\n      const apiUrl = `https:\/\/api.rss2json.com\/v1\/api.json?rss_url=${encodeURIComponent(getFeedUrl(topic))}`;\n      try {\n        const res = await fetch(apiUrl);\n        const data = await res.json();\n        if (data.status !== 'ok') throw new Error('\u53d6\u5f97\u5931\u6557');\n        let items = data.items.map(item => ({\n          title: item.title,\n          link: item.link,\n          date: new Date(item.pubDate),\n          thumbnail: item.thumbnail || ''\n        }));\n        const kw = controls.search.value.trim();\n        if (kw) items = items.filter(i => i.title.includes(kw));\n        items = items.slice(0, parseInt(controls.maxItems.value) || items.length);\n        render(items);\n      } catch (e) {\n        console.error(e);\n        errorMsg.textContent = '\u8a18\u4e8b\u306e\u53d6\u5f97\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002';\n        errorMsg.style.display = 'block';\n      } finally {\n        loading.style.display = 'none';\n      }\n    }\n    function render(items) {\n      if (!items.length) {\n        articlesContainer.innerHTML = '&lt;p class=\"text-center w-100\">\u8a72\u5f53\u3059\u308b\u8a18\u4e8b\u304c\u3042\u308a\u307e\u305b\u3093\u3002&lt;\/p>';\n        return;\n      }\n      items.forEach(i => {\n        const col = document.createElement('div'); col.className = 'col-12 col-md-6';\n        const thumb = i.thumbnail ? `&lt;img src=\"${i.thumbnail}\" class=\"thumbnail\" alt=\"\u30b5\u30e0\u30cd\u30a4\u30eb\">` : '';\n        col.innerHTML = `\n          &lt;div class=\"card\">\n            ${thumb}\n            &lt;div class=\"card-body\">\n              &lt;h2 class=\"card-title\">&lt;a href=\"${i.link}\" target=\"_blank\">${i.title}&lt;\/a>&lt;\/h2>\n              &lt;p class=\"meta\">\u516c\u958b: ${i.date.toLocaleString()}&lt;\/p>\n            &lt;\/div>\n          &lt;\/div>`;\n        articlesContainer.appendChild(col);\n      });\n    }\n    controls.refresh.addEventListener('click', fetchArticles);\n    controls.darkToggle.addEventListener('click', () => {\n      body.classList.toggle('dark-mode');\n    });\n    document.addEventListener('DOMContentLoaded', fetchArticles);\n  &lt;\/script>\n&lt;\/body>\n&lt;\/html>\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[6,87],"tags":[],"class_list":["post-26055","post","type-post","status-publish","format-standard","hentry","category-web"],"aioseo_notices":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/26055","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=26055"}],"version-history":[{"count":1,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/26055\/revisions"}],"predecessor-version":[{"id":26056,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/26055\/revisions\/26056"}],"wp:attachment":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=26055"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=26055"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=26055"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}