{"id":26146,"date":"2025-08-29T12:17:36","date_gmt":"2025-08-29T03:17:36","guid":{"rendered":"http:\/\/www.tyosuke20xx.com\/blog\/?p=26146"},"modified":"2025-08-29T12:54:59","modified_gmt":"2025-08-29T03:54:59","slug":"tsumugi-htmlsns","status":"publish","type":"post","link":"http:\/\/www.tyosuke20xx.com\/blog\/?p=26146","title":{"rendered":"Tsumugi.html(SNS)"},"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.0\"\/>\n  &lt;title>Tsumugi&lt;\/title>\n\n  &lt;!-- Favicon -->\n  &lt;link rel=\"shortcut icon\"\n        href=\"data:image\/svg+xml,&lt;svg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24'>&lt;path fill='%23667eea' d='M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z'\/>&lt;\/svg>\"\/>\n\n  &lt;!-- Tailwind CSS v2 -->\n  &lt;link href=\"https:\/\/cdn.jsdelivr.net\/npm\/tailwindcss@2.2.19\/dist\/tailwind.min.css\" rel=\"stylesheet\"\/>\n\n  &lt;!-- Font Awesome -->\n  &lt;link rel=\"stylesheet\" href=\"https:\/\/cdn.jsdelivr.net\/npm\/@fortawesome\/fontawesome-free@6.4.0\/css\/all.min.css\"\/>\n\n  &lt;style>\n    :root {\n      --grad-a: #667eea;\n      --grad-b: #764ba2;\n    }\n    body {\n      font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;\n      background: linear-gradient(135deg, var(--grad-a) 0%, var(--grad-b) 100%);\n      min-height: 100vh;\n    }\n    .glass-effect {\n      background: rgba(255,255,255,0.25);\n      backdrop-filter: blur(10px);\n      border-radius: 16px;\n      border: 1px solid rgba(255,255,255,0.18);\n    }\n    .card-hover { transition: all 0.25s ease; }\n    .card-hover:hover { transform: translateY(-3px); box-shadow: 0 20px 30px -12px rgba(0,0,0,0.25); }\n\n    .gradient-text {\n      background: linear-gradient(45deg, var(--grad-a), var(--grad-b));\n      -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text;\n    }\n\n    .timeline-post {\n      background: white;\n      border-radius: 16px;\n      box-shadow: 0 10px 20px -12px rgba(0,0,0,0.2);\n      transition: all 0.25s ease;\n      border-left: 4px solid var(--grad-a);\n    }\n    .timeline-post:hover { transform: translateX(4px); }\n\n    .profile-avatar {\n      width: 100px; height: 100px; border-radius: 50%;\n      object-fit: cover; border: 4px solid white;\n      box-shadow: 0 10px 24px rgba(0,0,0,0.15);\n    }\n    .btn-primary {\n      background: linear-gradient(45deg, var(--grad-a), var(--grad-b));\n      border: none; transition: all 0.2s ease;\n    }\n    .btn-primary:hover { transform: translateY(-1px); box-shadow: 0 10px 18px rgba(0,0,0,0.18); }\n\n    .section-divider {\n      height: 3px; background: linear-gradient(90deg, var(--grad-a), var(--grad-b));\n      border-radius: 2px; margin: 2rem 0;\n    }\n    .username-badge {\n      background: linear-gradient(45deg, var(--grad-a), var(--grad-b));\n      color: white; padding: 0.2rem 0.5rem; border-radius: 1rem;\n      font-size: 0.75rem; font-weight: 600; display: inline-block; margin-left: 0.5rem;\n    }\n    .share-menu { position: absolute; z-index: 50; min-width: 180px; right: 0; top: 110%; background: white; border-radius: 10px; box-shadow: 0 8px 24px rgba(0,0,0,0.13); }\n    .share-menu button { width: 100%; text-align: left; padding: 10px 20px; border: none; background: none; cursor: pointer; font-size: 0.95rem; }\n    .share-menu button:hover { background: #f0f4ff; }\n\n    .status-indicator { display: inline-block; width: 8px; height: 8px; border-radius: 50%; margin-right: 6px; }\n    .status-active { background-color: #10b981; animation: pulse 2s infinite; }\n    .status-inactive { background-color: #6b7280; }\n\n    .log-container {\n      max-height: 180px; overflow-y: auto; background: rgba(255,255,255,0.12);\n      border-radius: 10px; padding: 10px; margin-top: 10px; font-size: 0.8rem; font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n    }\n    .error-message { color: #ef4444; background: rgba(239, 68, 68, 0.08); padding: 8px; border-radius: 8px; margin: 5px 0; }\n    .success-message { color: #10b981; background: rgba(16, 185, 129, 0.08); padding: 8px; border-radius: 8px; margin: 5px 0; }\n\n    @keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: 0.5; } }\n\n    .dark .glass-effect { background: rgba(0,0,0,0.30); border: 1px solid rgba(255,255,255,0.12); }\n    .dark .timeline-post { background: #1f2937; color: #f9fafb; border-left-color: #4f46e5; }\n    .dark .share-menu { background: #111827; color: #e5e7eb; }\n    .dark .success-message { background: rgba(16,185,129,0.12); }\n    .dark .error-message { background: rgba(239,68,68,0.12); }\n\n    @media print {\n      body { background: white !important; -webkit-print-color-adjust: exact; }\n      .glass-effect { background: white !important; backdrop-filter: none !important; border: 1px solid #e5e7eb !important; }\n    }\n  &lt;\/style>\n&lt;\/head>\n\n&lt;body>\n  &lt;!-- \u30ed\u30b0\u30a4\u30f3\/\u767b\u9332\u30e2\u30fc\u30c0\u30eb -->\n  &lt;div id=\"auth-modal\" class=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\" style=\"display:none\">\n    &lt;div class=\"bg-white rounded-2xl shadow-2xl w-full max-w-sm p-6\">\n      &lt;h2 class=\"text-2xl font-bold mb-4 text-center\" id=\"auth-title\">\u30ed\u30b0\u30a4\u30f3&lt;\/h2>\n      &lt;div id=\"auth-error\" class=\"error-message mb-2\" style=\"display:none\">&lt;\/div>\n      &lt;form id=\"auth-form\" autocomplete=\"off\">\n        &lt;div class=\"mb-3\">\n          &lt;label class=\"block mb-1 text-sm font-semibold\">\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9&lt;\/label>\n          &lt;input type=\"email\" id=\"auth-email\" class=\"w-full border rounded px-3 py-2\" required>\n        &lt;\/div>\n        &lt;div class=\"mb-3\">\n          &lt;label class=\"block mb-1 text-sm font-semibold\">\u30d1\u30b9\u30ef\u30fc\u30c9&lt;\/label>\n          &lt;input type=\"password\" id=\"auth-password\" class=\"w-full border rounded px-3 py-2\" required>\n        &lt;\/div>\n        &lt;button type=\"submit\" class=\"btn-primary w-full py-2 rounded-lg text-white font-semibold\">\u30ed\u30b0\u30a4\u30f3&lt;\/button>\n      &lt;\/form>\n      &lt;div class=\"mt-4 text-center\">\n        &lt;button id=\"toggle-auth-mode\" class=\"text-blue-600 underline text-sm\">\u65b0\u898f\u767b\u9332\u306f\u3053\u3061\u3089&lt;\/button>\n      &lt;\/div>\n    &lt;\/div>\n  &lt;\/div>\n\n  &lt;!-- \u30d8\u30c3\u30c0\u30fc -->\n  &lt;header class=\"glass-effect mx-4 mt-4 p-6\">\n    &lt;div class=\"text-center\">\n      &lt;h1 class=\"text-4xl font-bold text-white mb-2\">\n        &lt;i class=\"fas fa-comments mr-3\">&lt;\/i>Tsumugi\n        &lt;span class=\"text-sm opacity-80 ml-2\">&lt;\/span>\n      &lt;\/h1>\n      &lt;p class=\"text-white text-lg opacity-90\">\u6b21\u4e16\u4ee3\u30bd\u30fc\u30b7\u30e3\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af&lt;\/p>\n      &lt;div class=\"mt-4 flex justify-center items-center space-x-4\">\n        &lt;div class=\"flex items-center\">\n          &lt;img id=\"header-profile-icon\" class=\"profile-avatar\" src=\"https:\/\/via.placeholder.com\/100\" alt=\"\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\">\n          &lt;div class=\"ml-3 text-white text-left\">\n            &lt;div class=\"font-semibold text-lg\" id=\"header-username\">\u672a\u8a2d\u5b9a&lt;\/div>\n            &lt;div class=\"text-sm opacity-75\" id=\"header-user-email\">&lt;\/div>\n          &lt;\/div>\n        &lt;\/div>\n        &lt;button onclick=\"toggleDarkMode()\" class=\"btn-primary px-4 py-2 rounded-full text-white\">\n          &lt;i class=\"fas fa-moon mr-2\">&lt;\/i>\u30c0\u30fc\u30af\u30e2\u30fc\u30c9\n        &lt;\/button>\n        &lt;button onclick=\"showSystemStatus()\" class=\"btn-primary px-4 py-2 rounded-full text-white\">\n          &lt;i class=\"fas fa-info-circle mr-2\">&lt;\/i>\u30b9\u30c6\u30fc\u30bf\u30b9\n        &lt;\/button>\n        &lt;button id=\"logout-btn\" onclick=\"logout()\" class=\"btn-primary px-4 py-2 rounded-full text-white\" style=\"display:none\">\n          &lt;i class=\"fas fa-sign-out-alt mr-2\">&lt;\/i>\u30ed\u30b0\u30a2\u30a6\u30c8\n        &lt;\/button>\n      &lt;\/div>\n    &lt;\/div>\n  &lt;\/header>\n\n  &lt;!-- \u30e1\u30a4\u30f3 -->\n  &lt;div class=\"max-w-6xl mx-auto px-4 py-6\" id=\"main-content\" style=\"display:none\">\n    &lt;div class=\"grid grid-cols-1 lg:grid-cols-3 gap-6\">\n      &lt;!-- \u5de6\u30ab\u30e9\u30e0\uff1a\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\uff0fBOT\/RSS -->\n      &lt;div class=\"lg:col-span-1 space-y-6\">\n        &lt;!-- \u30d7\u30ed\u30d5\u30a3\u30fc\u30eb -->\n        &lt;div class=\"glass-effect p-6 card-hover\">\n          &lt;h3 class=\"text-2xl font-bold gradient-text mb-4\">&lt;i class=\"fas fa-user-circle mr-2\">&lt;\/i>\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb&lt;\/h3>\n          &lt;div class=\"text-center mb-6\">\n            &lt;img id=\"profile-icon\" class=\"profile-avatar mx-auto mb-4\" src=\"https:\/\/via.placeholder.com\/100\" alt=\"\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\">\n            &lt;input type=\"file\" id=\"profile-upload\" accept=\"image\/*\" onchange=\"uploadProfileIcon(event)\" class=\"hidden\">\n            &lt;button onclick=\"document.getElementById('profile-upload').click()\" class=\"btn-primary px-4 py-2 rounded-full text-white\">\n              &lt;i class=\"fas fa-camera mr-2\">&lt;\/i>\u753b\u50cf\u5909\u66f4\n            &lt;\/button>\n          &lt;\/div>\n          &lt;div class=\"space-y-4\">\n            &lt;div>\n              &lt;label class=\"block text-white font-semibold mb-2\">\u30e6\u30fc\u30b6\u30fc\u540d&lt;\/label>\n              &lt;input type=\"text\" id=\"username\" class=\"w-full p-3 border rounded-lg bg-white bg-opacity-90\" placeholder=\"\u30e6\u30fc\u30b6\u30fc\u540d\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\" maxlength=\"20\">\n            &lt;\/div>\n            &lt;div>\n              &lt;label class=\"block text-white font-semibold mb-2\">\u81ea\u5df1\u7d39\u4ecb&lt;\/label>\n              &lt;textarea id=\"self-intro\" class=\"w-full p-3 border rounded-lg bg-white bg-opacity-90\" rows=\"4\" placeholder=\"\u81ea\u5df1\u7d39\u4ecb\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\">&lt;\/textarea>\n            &lt;\/div>\n            &lt;button onclick=\"saveProfile()\" class=\"btn-primary w-full py-2 rounded-lg text-white\">\n              &lt;i class=\"fas fa-save mr-2\">&lt;\/i>\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u4fdd\u5b58\n            &lt;\/button>\n            &lt;div class=\"p-3 bg-white bg-opacity-80 rounded-lg\">\n              &lt;h5 class=\"font-semibold text-gray-800 mb-2\">\u30d7\u30ec\u30d3\u30e5\u30fc:&lt;\/h5>\n              &lt;div class=\"text-gray-700\">\n                &lt;div class=\"font-semibold mb-1\" id=\"username-preview\">\u672a\u8a2d\u5b9a&lt;\/div>\n                &lt;div id=\"self-intro-preview\" class=\"text-sm whitespace-pre-line min-h-8\">\u307e\u3060\u81ea\u5df1\u7d39\u4ecb\u304c\u3042\u308a\u307e\u305b\u3093&lt;\/div>\n              &lt;\/div>\n            &lt;\/div>\n          &lt;\/div>\n        &lt;\/div>\n\n        &lt;!-- RSS\u81ea\u52d5\u6295\u7a3f\u6a5f\u80fd\uff08\u5168\u4f53\u5171\u6709 + \u500b\u5225ON\/OFF\uff09 -->\n        &lt;div class=\"glass-effect p-6 card-hover\">\n          &lt;h3 class=\"text-xl font-bold text-white mb-4\">\n            &lt;i class=\"fas fa-rss mr-2\">&lt;\/i>RSS\u81ea\u52d5\u6295\u7a3f\uff08\u5168\u4f53\u5171\u6709\uff09\n            &lt;span class=\"status-indicator\" id=\"rss-status\">&lt;\/span>\n            &lt;span id=\"rss-status-text\" class=\"text-xs opacity-75\">\u505c\u6b62\u4e2d&lt;\/span>\n          &lt;\/h3>\n          &lt;div>\n            &lt;input id=\"rss-url\" type=\"text\" class=\"w-full p-2 border rounded-lg bg-white bg-opacity-90 mb-2\" placeholder=\"RSS\u30d5\u30a3\u30fc\u30c9URL\u3092\u5165\u529b\">\n            &lt;button onclick=\"addRssFeed()\" class=\"btn-primary w-full py-2 rounded-lg text-white mb-2\">\n              &lt;i class=\"fas fa-plus mr-2\">&lt;\/i>\u8ffd\u52a0\n            &lt;\/button>\n\n            &lt;div id=\"rss-list\" class=\"mb-3\">&lt;\/div>\n\n            &lt;div class=\"flex items-center space-x-2 mb-2\">\n              &lt;input type=\"number\" id=\"rss-interval\" class=\"w-1\/2 p-2 border rounded-lg bg-white bg-opacity-90\" min=\"10\" max=\"3600\" value=\"300\" placeholder=\"\u9593\u9694(\u79d2)\">\n              &lt;button onclick=\"setRssInterval()\" class=\"btn-primary flex-1 py-2 rounded-lg text-white\">\n                &lt;i class=\"fas fa-clock mr-2\">&lt;\/i>\u9593\u9694\u8a2d\u5b9a\n              &lt;\/button>\n            &lt;\/div>\n\n            &lt;div class=\"flex items-center space-x-2 mb-2\">\n              &lt;button onclick=\"fetchRssNow()\" class=\"btn-primary flex-1 py-2 rounded-lg text-white\">\n                &lt;i class=\"fas fa-sync mr-2\">&lt;\/i>\u4eca\u3059\u3050\u53d6\u5f97\n              &lt;\/button>\n              &lt;button onclick=\"stopRssAuto()\" class=\"bg-red-500 hover:bg-red-600 flex-1 py-2 rounded-lg text-white\">\n                &lt;i class=\"fas fa-stop mr-2\">&lt;\/i>\u81ea\u52d5\u505c\u6b62\n              &lt;\/button>\n            &lt;\/div>\n\n            &lt;div class=\"flex items-center space-x-2\">\n              &lt;button onclick=\"setAllRssEnabled(true)\" class=\"btn-primary flex-1 py-2 rounded-lg text-white text-sm\">\n                &lt;i class=\"fas fa-toggle-on mr-1\">&lt;\/i>\u3059\u3079\u3066ON\n              &lt;\/button>\n              &lt;button onclick=\"setAllRssEnabled(false)\" class=\"bg-gray-500 hover:bg-gray-600 flex-1 py-2 rounded-lg text-white text-sm\">\n                &lt;i class=\"fas fa-toggle-off mr-1\">&lt;\/i>\u3059\u3079\u3066OFF\n              &lt;\/button>\n            &lt;\/div>\n\n            &lt;div id=\"rss-log\" class=\"log-container text-white text-xs mt-3\">&lt;\/div>\n          &lt;\/div>\n        &lt;\/div>\n\n        &lt;!-- BOT\u6a5f\u80fd -->\n        &lt;div class=\"glass-effect p-6 card-hover\">\n          &lt;h3 class=\"text-xl font-bold text-white mb-4\">\n            &lt;i class=\"fas fa-robot mr-2\">&lt;\/i>BOT\u6a5f\u80fd\n            &lt;span class=\"status-indicator\" id=\"bot-status\">&lt;\/span>\n            &lt;span id=\"bot-status-text\" class=\"text-xs opacity-75\">\u505c\u6b62\u4e2d&lt;\/span>\n          &lt;\/h3>\n          &lt;div class=\"space-y-4\">\n            &lt;div>\n              &lt;textarea id=\"botContent\" class=\"w-full p-3 border rounded-lg bg-white bg-opacity-90\" rows=\"3\" placeholder=\"BOT\u6295\u7a3f\u5185\u5bb9\">&lt;\/textarea>\n              &lt;button onclick=\"postBotMessage()\" class=\"btn-primary w-full mt-2 py-2 rounded-lg text-white\">\n                &lt;i class=\"fas fa-robot mr-2\">&lt;\/i>BOT\u6295\u7a3f\n              &lt;\/button>\n            &lt;\/div>\n            &lt;div>\n              &lt;input type=\"number\" id=\"botIntervalSec\" class=\"w-full p-2 border rounded-lg bg-white bg-opacity-90\" placeholder=\"\u30de\u30eb\u30b3\u30d5\u81ea\u52d5\u6295\u7a3f\u9593\u9694(\u79d2)\" min=\"10\" max=\"3600\" value=\"60\">\n              &lt;div class=\"flex space-x-2 mt-2\">\n                &lt;button onclick=\"postMarkovBot()\" class=\"btn-primary flex-1 py-2 rounded-lg text-white\">\n                  &lt;i class=\"fas fa-dice mr-2\">&lt;\/i>\u30de\u30eb\u30b3\u30d5\u751f\u6210\n                &lt;\/button>\n                &lt;button onclick=\"startBotAutoPost()\" class=\"btn-primary flex-1 py-2 rounded-lg text-white\">\n                  &lt;i class=\"fas fa-play mr-2\">&lt;\/i>\u81ea\u52d5\u958b\u59cb\n                &lt;\/button>\n                &lt;button onclick=\"stopBotAutoPost()\" class=\"bg-red-500 hover:bg-red-600 flex-1 py-2 rounded-lg text-white\">\n                  &lt;i class=\"fas fa-stop mr-2\">&lt;\/i>\u505c\u6b62\n                &lt;\/button>\n              &lt;\/div>\n            &lt;\/div>\n            &lt;div class=\"text-white text-xs opacity-75\">\n              &lt;i class=\"fas fa-info-circle mr-1\">&lt;\/i>\n              \u30de\u30eb\u30b3\u30d5\u9023\u9396\u3067\u306f\u904e\u53bb\u306e\u6295\u7a3f\u304b\u3089\u30e9\u30f3\u30c0\u30e0\u306a\u6587\u7ae0\u3092\u751f\u6210\u3057\u307e\u3059\uff08FEED\u672c\u6587\u306f\u7701\u7565\u3057\u3001\u30bf\u30a4\u30c8\u30eb\u306e\u307f\u3092\u5b66\u7fd2\u5bfe\u8c61\u306b\u3057\u307e\u305b\u3093\uff09\u3002\n            &lt;\/div>\n            &lt;div id=\"bot-log\" class=\"log-container text-white text-xs\">&lt;\/div>\n          &lt;\/div>\n        &lt;\/div>\n      &lt;\/div>\n\n      &lt;!-- \u53f3\u30ab\u30e9\u30e0\uff1a\u6295\u7a3f\uff06\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3 -->\n      &lt;div class=\"lg:col-span-2 space-y-6\">\n        &lt;!-- \u65b0\u898f\u6295\u7a3f -->\n        &lt;div class=\"glass-effect p-6 card-hover\">\n          &lt;h3 class=\"text-2xl font-bold gradient-text mb-4\">&lt;i class=\"fas fa-edit mr-2\">&lt;\/i>\u65b0\u898f\u6295\u7a3f&lt;\/h3>\n          &lt;div>\n            &lt;textarea id=\"postContent\" class=\"w-full p-4 border rounded-lg bg-white bg-opacity-90\" rows=\"4\" placeholder=\"\u4eca\u4f55\u3092\u8003\u3048\u3066\u3044\u307e\u3059\u304b\uff1f\" maxlength=\"500\">&lt;\/textarea>\n            &lt;div class=\"mt-4 flex justify-between items-center\">\n              &lt;div class=\"text-white text-sm opacity-90\">\n                &lt;i class=\"fas fa-info-circle mr-1\">&lt;\/i>\n                \u3042\u306a\u305f\u306e\u601d\u3044\u3092\u5171\u6709\u3057\u307e\u3057\u3087\u3046\n                &lt;span id=\"char-count\" class=\"ml-2\">(0\/500)&lt;\/span>\n              &lt;\/div>\n              &lt;button onclick=\"createUserPost()\" class=\"btn-primary px-6 py-3 rounded-lg text-white font-semibold\">\n                &lt;i class=\"fas fa-paper-plane mr-2\">&lt;\/i>\u6295\u7a3f\u3059\u308b\n              &lt;\/button>\n            &lt;\/div>\n          &lt;\/div>\n        &lt;\/div>\n\n        &lt;div class=\"section-divider\">&lt;\/div>\n\n        &lt;!-- \u30bf\u30a4\u30e0\u30e9\u30a4\u30f3 -->\n        &lt;div class=\"glass-effect p-6\">\n          &lt;div class=\"flex justify-between items-center mb-6\">\n            &lt;h3 class=\"text-2xl font-bold text-white\">\n              &lt;i class=\"fas fa-stream mr-2\">&lt;\/i>\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\n              &lt;span id=\"post-count\" class=\"text-sm font-normal opacity-75 ml-2\">(0\u4ef6\u306e\u6295\u7a3f)&lt;\/span>\n            &lt;\/h3>\n            &lt;div class=\"flex space-x-2\">\n              &lt;button onclick=\"clearAllPosts()\" class=\"bg-red-500 hover:bg-red-600 px-3 py-1 rounded text-white text-sm\">\n                &lt;i class=\"fas fa-trash mr-1\">&lt;\/i>\u5168\u524a\u9664\n              &lt;\/button>\n              &lt;button onclick=\"exportData()\" class=\"bg-green-500 hover:bg-green-600 px-3 py-1 rounded text-white text-sm\">\n                &lt;i class=\"fas fa-download mr-1\">&lt;\/i>\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\n              &lt;\/button>\n            &lt;\/div>\n          &lt;\/div>\n          &lt;div id=\"timeline\" class=\"space-y-4\">&lt;\/div>\n          &lt;div id=\"empty-timeline\" class=\"text-center py-12 text-white opacity-80\">\n            &lt;i class=\"fas fa-comments text-4xl mb-4\">&lt;\/i>\n            &lt;p class=\"text-lg\">\u307e\u3060\u6295\u7a3f\u304c\u3042\u308a\u307e\u305b\u3093&lt;\/p>\n            &lt;p class=\"text-sm\">\u6700\u521d\u306e\u6295\u7a3f\u3092\u3057\u3066\u3001\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u3092\u59cb\u3081\u307e\u3057\u3087\u3046\uff01&lt;\/p>\n          &lt;\/div>\n        &lt;\/div>\n      &lt;\/div>\n    &lt;\/div>\n  &lt;\/div>\n\n  &lt;footer class=\"glass-effect mx-4 mb-4 p-4 text-center\">\n    &lt;p class=\"text-white opacity-80\">\n      &lt;i class=\"fas fa-copyright mr-2\">&lt;\/i>2025 Verse \u2013 \u6b21\u4e16\u4ee3\u30bd\u30fc\u30b7\u30e3\u30eb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af v2.3\n      &lt;span class=\"ml-4\">&lt;i class=\"fas fa-rss mr-1\">&lt;\/i>\u5171\u6709RSS \/ \u500b\u5225ON\/OFF\u5bfe\u5fdc\uff08\u5b89\u5168\u306a\u30d5\u30a3\u30fc\u30c9\u4f8b\uff09&lt;\/span>\n    &lt;\/p>\n  &lt;\/footer>\n\n  &lt;script>\n    \/\/ ==== \u521d\u671fRSS\uff08\u5b89\u5168\u306a\u4f8b\u306e\u307f\u3002\u6210\u4eba\u5411\u3051\/\u4e0d\u9069\u5207\u306a\u30b5\u30a4\u30c8\u306f\u9664\u5916\uff09 ====\n    const PRESET_RSS = &#91;\n               \"http:\/\/2ch-2.net\/rss\/all.xml\",\n    \"http:\/\/2ch-ranking.net\/rss\/livemarket1.rdf\",\n    \"http:\/\/2ch-ranking.net\/rss\/livemarket2.rdf\",\n    \"http:\/\/kabumatome.doorblog.jp\/index.rdf\",\n    \"http:\/\/momoniji.com\/feed\",\n    \"http:\/\/oekakigakusyuu.blog97.fc2.com\/?xml\",\n    \"http:\/\/otanews.livedoor.biz\/atom.xml\",\n    \"http:\/\/otanews.livedoor.biz\/index.rdf\",\n    \"http:\/\/news4vip.livedoor.biz\/index.rdf\",\n    \"http:\/\/news.kakaku.com\/prdnews\/rss.asp\",\n    \"http:\/\/www.jma-net.go.jp\/rss\/jma.rss\",\n    \"http:\/\/rss.asahi.com\/rss\/asahi\/newsheadlines.rdf\",\n    \"https:\/\/uploadvr.com\/feed\/\",\n    \"http:\/\/www.atmarkit.co.jp\/rss\/rss2dc.xml\",\n    \"http:\/\/liginc.co.jp\/feed\",\n    \"http:\/\/liginc.co.jp\/feed\/\",\n    \"http:\/\/blog.livedoor.jp\/shachiani\/index.rdf\",\n    \"http:\/\/manga.lemon-s.com\/atom.xml\",\n    \"http:\/\/b.hatena.ne.jp\/search\/text?safe=on&amp;q=%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3&amp;users=500&amp;mode=rss\",\n    \"http:\/\/creator-life.net\/feed\/\",\n    \"http:\/\/feedblog.ameba.jp\/rss\/ameblo\/ca-1pixel\/rss20.xml\",\n    \"http:\/\/rssblog.ameba.jp\/ca-1pixel\/rss20.xml\",\n    \"http:\/\/weekly.ascii.jp\/cate\/1\/rss.xml\",\n    \"http:\/\/blog.livedoor.jp\/coleblog\/atom.xml\",\n    \"http:\/\/2chantena.antenam.biz\/rss1s.rss\",\n    \"http:\/\/www.4gamer.net\/rss\/index.xml\",\n    \"http:\/\/www.4gamer.net\/rss\/news_topics.xml\",\n    \"http:\/\/nyan.eggtree.net\/feed.xml\",\n    \"http:\/\/nunnnunn.hatenablog.com\/rss\",\n    \"http:\/\/www.nikkansports.com\/general\/atom.xml\",\n    \"http:\/\/feeds.afpbb.com\/rss\/afpbb\/access_ranking\",\n    \"http:\/\/akiba-pc.watch.impress.co.jp\/cda\/rss\/akiba-pc.rdf\",\n    \"https:\/\/area.autodesk.jp\/rss.xml\",\n    \"http:\/\/av.watch.impress.co.jp\/sublink\/av.rdf\",\n    \"http:\/\/rss.allabout.co.jp\/aa\/latest\/ch\/netpc\/\",\n    \"http:\/\/www.ar-ch.org\/atom.xml\",\n    \"http:\/\/feeds.arstechnica.com\/arstechnica\/BAaf\",\n    \"https:\/\/feeds.feedburner.com\/awwwards-sites-of-the-day\",\n    \"http:\/\/news.bbc.co.uk\/rss\/newsonline_uk_edition\/front_page\/rss091.xml\",\n    \"http:\/\/www.criteo.com\/blog\/rss\/\",\n    \"https:\/\/blueskyweb.xyz\/rss.xml\",\n    \"http:\/\/boingboing.net\/rss.xml\",\n    \"http:\/\/www.cc2.co.jp\/blog\/?feed=rss2\",\n    \"http:\/\/cgarena.com\/cgarena.xml\",\n    \"http:\/\/cgtracking.net\/feed\",\n    \"http:\/\/japan.cnet.com\/rss\/index.rdf\",\n    \"http:\/\/newclassic.jp\/feed\",\n    \"https:\/\/www.cssmania.com\/feed\/\",\n    \"http:\/\/ceron.jp\/top\/?type=rss\",\n    \"http:\/\/blog.btrax.com\/jp\/comments\/feed\/\",\n    \"http:\/\/2ch-ranking.net\/rss\/wildplus.rdf\",\n    \"http:\/\/design-spice.com\/feed\/\",\n    \"http:\/\/dev.classmethod.jp\/feed\/\",\n    \"http:\/\/ishida-a-coicoi.blog.so-net.ne.jp\/atom.xml\",\n    \"http:\/\/feeds.feedburner.com\/ura-akiba?format=xml\",\n    \"http:\/\/game.watch.impress.co.jp\/sublink\/game.rdf\",\n    \"http:\/\/gigazine.co.jp\/feed\/\",\n    \"http:\/\/labs.gree.jp\/blog\/comments\/feed\/\",\n    \"http:\/\/www.gamespark.jp\/rss\/index.rdf\",\n    \"http:\/\/www.gamebusiness.jp\/rss\/index.rdf\",\n    \"http:\/\/www.gamebusiness.jp\/rss\/rss.php\",\n    \"http:\/\/hackread.com\/feed\/\",\n    \"https:\/\/io3000.com\/feed\/\",\n    \"http:\/\/www.inside-games.jp\/rss\/index.rdf\",\n    \"http:\/\/blog.livedoor.jp\/itsoku\/index.rdf\",\n    \"http:\/\/rss.itmedia.co.jp\/rss\/1.0\/news_bursts.xml\",\n    \"http:\/\/octoba.net\/feed\",\n    \"http:\/\/www.ota-suke.jp\/index.xml\",\n    \"http:\/\/blog.livedoor.jp\/kaigai_no\/index.rdf\",\n    \"https:\/\/land-book.com\/feed\/\",\n    \"http:\/\/2ch.logpo.jp\/1hour.xml\",\n    \"http:\/\/menthas.com\/javascript\/rss\",\n    \"http:\/\/www.nhk.or.jp\/rss\/news\/cat0.xml\",\n    \"http:\/\/ozpa-h4.com\/feed\/\",\n    \"https:\/\/www.youtube.com\/feeds\/videos.xml?channel_id=UC1DCedRgGHBdm81E1llLhOQ\",\n    \"http:\/\/rass.blog43.fc2.com\/?xml\",\n    \"http:\/\/stackoverflow.com\/feeds\",\n    \"http:\/\/www.slideshare.net\/rss\/latest\",\n    \"http:\/\/www.jp.square-enix.com\/whatsnew2\/whatsnew.rdf\",\n    \"http:\/\/www.ituore.com\/feed\",\n    \"http:\/\/synodos.jp\/comments\/feed\",\n    \"http:\/\/www.shinkigensha.co.jp\/feed\/\",\n    \"http:\/\/e-shuushuu.net\/index.rss\",\n    \"http:\/\/slashdot.org\/index.rss\",\n    \"http:\/\/feeds.feedburner.com\/TheHackersNews?format=xml\",\n    \"http:\/\/googleblog.blogspot.com\/atom.xml\",\n    \"http:\/\/www.theregister.co.uk\/tonys\/slashdot.rdf\",\n    \"http:\/\/thinkit.co.jp\/rss.xml\",\n    \"http:\/\/blog.livedoor.jp\/news23vip\/atom.xml\",\n    \"http:\/\/blog.livedoor.jp\/news23vip\/index.rdf\",\n    \"http:\/\/www.webcreatorbox.com\/feed\/\",\n    \"http:\/\/web-d.navigater.info\/atom.xml\",\n    \"http:\/\/2ch-c.net\/?xml_all\",\n    \"http:\/\/smhn.info\/feed\",\n    \"http:\/\/feeds.japan.zdnet.com\/rss\/zdnet\/all.rdf\",\n    \"http:\/\/20kaido.com\/index.rdf\",\n    \"http:\/\/2chnode.com\/rss\/feed\/all\",\n    \"http:\/\/akiba-souken.com\/feed\/all\/\",\n    \"http:\/\/amaebi.net\/index.rdf\",\n    \"http:\/\/amakakeru.blog59.fc2.com\/?xml\",\n    \"http:\/\/artskype.com\/rss\/feed.xml\",\n    \"http:\/\/asitagamienai.blog118.fc2.com\/?xml\",\n    \"http:\/\/beta.egmnow.com\/feed\/\",\n    \"http:\/\/blog.livedoor.jp\/ogenre\/index.rdf\",\n    \"http:\/\/blog.nicovideo.jp\/atom.xml\",\n    \"http:\/\/blog.tsubuani.com\/feed\",\n    \"http:\/\/blogs.adobe.com\/flex\/atom.xml\",\n    \"http:\/\/blogs.adobe.com\/index.xml\",\n    \"http:\/\/bm.s5-style.com\/feed\",\n    \"http:\/\/business.nikkeibp.co.jp\/rss\/all_nbo.rdf\",\n    \"http:\/\/createlier.sitemix.jp\/feed\/\",\n    \"http:\/\/crocro.com\/news\/nc.cgi?action=search&amp;skin=rdf_srch_xml\",\n    \"http:\/\/d.hatena.ne.jp\/thk\/rss\",\n    \"http:\/\/damage0.blomaga.jp\/index.rdf\",\n    \"http:\/\/danbooru.donmai.us\/posts.atom\",\n    \"http:\/\/danbooru.donmai.us\/posts.atom?tags=rss\",\n    \"http:\/\/dengekionline.com\/cate\/11\/rss.xml\",\n    \"http:\/\/dictionary.reference.com\/wordoftheday\/wotd.rss\",\n    \"http:\/\/doujin-games88.net\/feed\",\n    \"http:\/\/doujin.sekurosu.com\/rss\",\n    \"http:\/\/dousyoko.blog.fc2.com\/?xml\",\n    \"http:\/\/eroaniblog.blog.fc2.com\/?xml\",\n    \"http:\/\/eroanimedougakan.blog.fc2.com\/?xml\",\n    \"http:\/\/erogetrailers.com\/api?md=latest\",\n    \"http:\/\/eronizimage.blog.fc2.com\/?xml\",\n    \"http:\/\/erosanime.blog121.fc2.com\/?xml\",\n    \"http:\/\/erotaganime.blog.fc2.com\/?xml\",\n    \"http:\/\/feed.nikkeibp.co.jp\/rss\/nikkeibp\/index.rdf\",\n    \"http:\/\/feed.rssad.jp\/rss\/gigazine\/rss_2.0\",\n    \"http:\/\/feed.rssad.jp\/rss\/jcast\/index.xml\",\n    \"http:\/\/feed.rssad.jp\/rss\/klug\/fxnews\/rss5.xml\",\n    \"http:\/\/feedblog.ameba.jp\/rss\/ameblo\/yusayusa0211\/rss20.xml\",\n    \"http:\/\/feeds.adobe.com\/xml\/rss.cfm?query=byMostRecent&amp;languages=1\",\n    \"http:\/\/feeds.builder.japan.zdnet.com\/rss\/builder\/all.rdf\",\n    \"http:\/\/feeds.fc2.com\/fc2\/xml?host=anrism.blog&amp;format=xml\",\n    \"http:\/\/feeds.fc2.com\/fc2\/xml?host=kahouha2jigen.blog&amp;format=xml\",\n    \"http:\/\/feeds.feedburner.com\/gekiura\",\n    \"http:\/\/feeds.journal.mycom.co.jp\/rss\/mycom\/index\",\n    \"http:\/\/feeds.reuters.com\/reuters\/JPTopNews?format=xml\",\n    \"http:\/\/galten705.blog.fc2.com\/?xml\",\n    \"http:\/\/gamanjiru.net\/feed\",\n    \"http:\/\/gamanjiru.net\/feed\/atom\",\n    \"http:\/\/gamebiz.jp\/?feed=rss\",\n    \"http:\/\/gamenode.jp\/rss\/feed\/all\",\n    \"http:\/\/ggsoku.com\/feed\/atom\/\",\n    \"http:\/\/girlcelly.blog.fc2.com\/?xml&amp;trackback\",\n    \"http:\/\/hairana.blog.fc2.com\/?xml\",\n    \"http:\/\/haruka-yumenoato.net\/static\/rss\/index.rss\",\n    \"http:\/\/headline.harikonotora.net\/rss2.xml\",\n    \"http:\/\/hentaidoujinanime.com\/?xml\",\n    \"http:\/\/homepage1.nifty.com\/maname\/index.rdf\",\n    \"http:\/\/horiemon.com\/feed\/\",\n    \"http:\/\/ideahacker.net\/feed\/\",\n    \"http:\/\/itpro.nikkeibp.co.jp\/rss\/develop.rdf\",\n    \"http:\/\/itpro.nikkeibp.co.jp\/rss\/news.rss\",\n    \"http:\/\/itpro.nikkeibp.co.jp\/rss\/oss.rdf\",\n    \"http:\/\/itpro.nikkeibp.co.jp\/rss\/win.rdf\",\n    \"http:\/\/japan.internet.com\/rss\/rdf\/index.rdf\",\n    \"http:\/\/jp.leopard-raws.org\/rss.php\",\n    \"http:\/\/jp.techcrunch.com\/feed\/\",\n    \"http:\/\/kakaku.com\/trendnews\/rss.xml\",\n    \"http:\/\/kamisoku.blog47.fc2.com\/?xml\",\n    \"http:\/\/kanesoku.com\/index.rdf\",\n    \"http:\/\/kibougamotenai.blog.fc2.com\/?xml\",\n    \"http:\/\/kiisu.jpn.org\/rss\/now.xml\",\n    \"http:\/\/konachan.com\/post\/piclens?page=1&amp;tags=loli\",\n    \"http:\/\/labo.tv\/2chnews\/index.xml\",\n    \"http:\/\/lineblog.me\/yamamotoichiro\/atom.xml\",\n    \"http:\/\/majimougen.blog.fc2.com\/?xml\",\n    \"http:\/\/mantan-web.jp\/rss\/mantan.xml\",\n    \"http:\/\/matome.naver.jp\/feed\/hot\",\n    \"http:\/\/matome.naver.jp\/feed\/tech\",\n    \"http:\/\/matome.sekurosu.com\/rss\",\n    \"http:\/\/mizuhonokuni2ch.com\/?xml\",\n    \"http:\/\/momoiroanime.blog.fc2.com\/?xml\",\n    \"http:\/\/moroahedoujin.com\/?xml\",\n    \"http:\/\/nesingazou.blog.fc2.com\/?xml\",\n    \"http:\/\/newnews-moe.com\/index.rdf\",\n    \"http:\/\/news.ameba.jp\/index.xml\",\n    \"http:\/\/news.com.com\/2547-1_3-0-5.xml\",\n    \"http:\/\/news.nicovideo.jp\/?rss=2.0\",\n    \"http:\/\/news.nicovideo.jp\/ranking\/hot?rss=2.0\",\n    \"http:\/\/newsbiz.yahoo.co.jp\/topnews.rss\",\n    \"http:\/\/nijitora.blog.fc2.com\/?xml\",\n    \"http:\/\/nodvd21ver2.blog.fc2.com\/?xml\",\n    \"http:\/\/orebibou.com\/feed\/\",\n    \"http:\/\/osu.ppy.sh\/feed\/ranked\/\",\n    \"http:\/\/otakomu.jp\/feed\",\n    \"http:\/\/pcgameconquest.blog.fc2.com\/?xml\",\n    \"http:\/\/picks.dir.yahoo.co.jp\/dailypicks\/rss\/\",\n    \"http:\/\/piknik2ch.blog76.fc2.com\/?xml\",\n    \"http:\/\/plus.appgiga.jp\/feed\/user\",\n    \"http:\/\/purisoku.com\/index.rdf\",\n    \"http:\/\/rdsig.yahoo.co.jp\/RV=1\/RU=aHR0cDovL3NlYXJjaHJhbmtpbmcueWFob28uY28uanAvcnNzL2J1cnN0X3JhbmtpbmctcnNzLnhtbA--;_ylt=A2RhjFhfAi9XEi0A6Glhdu57\",\n    \"http:\/\/read2ch.net\/rss\/\",\n    \"http:\/\/rss.dailynews.yahoo.co.jp\/fc\/computer\/rss.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/akibapc\/akiba-pc.rdf\",\n    \"http:\/\/rss.rssad.jp\/rss\/ascii\/biz\/rss.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/ascii\/hobby\/rss.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/ascii\/it\/rss.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/ascii\/mac\/rss.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/ascii\/pc\/rss.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/ascii\/rss.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/codezine\/new\/20\/index.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/forest\/rss.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/gihyo\/feed\/atom\",\n    \"http:\/\/rss.rssad.jp\/rss\/headline\/headline.rdf\",\n    \"http:\/\/rss.rssad.jp\/rss\/impresswatch\/pcwatch.rdf\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/1.0\/makoto.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/1.0\/netlab.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/2.0\/kw_akiba.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/2.0\/kw_android_appli.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/2.0\/kw_apple.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/2.0\/kw_facebook.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/2.0\/kw_google.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/2.0\/kw_ipad.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/2.0\/kw_iphone.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/2.0\/kw_iphone_appli.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/2.0\/kw_mixi.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/2.0\/kw_smartphone.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/2.0\/kw_twitter.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itm\/2.0\/kw_ustream.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itmbizid\/1.0\/bizid.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/itmnews\/2.0\/news_bursts.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/japaninternetcom\/index.rdf\",\n    \"http:\/\/rss.rssad.jp\/rss\/oshietekun\/atom.xml\",\n    \"http:\/\/rss.rssad.jp\/rss\/slashdot\/slashdot.rss\",\n    \"http:\/\/rss.rssad.jp\/rss\/zaikeishimbun\/main.xml\",\n    \"http:\/\/rssc.dokoda.jp\/r\/8a1dd8f128047929ba4390dab3c8065e\/http\/searchranking.yahoo.co.jp\/realtime_buzz\/\",\n    \"http:\/\/sakurabaryo.com\/feed\/\",\n    \"http:\/\/sankei.jp.msn.com\/rss\/news\/points.xml\",\n    \"http:\/\/sankei.jp.msn.com\/rss\/news\/west_points.xml\",\n    \"http:\/\/search.goo.ne.jp\/rss\/newkw.rdf\",\n    \"http:\/\/sekurosu.com\/rss\",\n    \"http:\/\/streaming.yahoo.co.jp\/rss\/newly\/anime\/\",\n    \"http:\/\/sub0000528116.hmk-temp.com\/wordpress\/?feed=rss2\",\n    \"http:\/\/sukebei.nyaa.se\/?page=rss&amp;sort=2\",\n    \"http:\/\/tenshoku.mynavi.jp\/knowhow\/rss.xml\",\n    \"http:\/\/tensinyakimeshi.blog98.fc2.com\/?xml\",\n    \"http:\/\/thefreedom12.blog41.fc2.com\/?xml\",\n    \"http:\/\/togetter.com\/rss\/hot\/culture\/62\",\n    \"http:\/\/togetter.com\/rss\/hot\/culture\/63\",\n    \"http:\/\/torimatome.main.jp\/blogs\/comments\/feed\",\n    \"http:\/\/torimatome.main.jp\/blogs\/feed\",\n    \"http:\/\/toshinokyouko.com\/rss.php\",\n    \"http:\/\/tvanimedouga.blog93.fc2.com\/?xml\",\n    \"http:\/\/uranourainformation.blog21.fc2.com\/?xml\",\n    \"http:\/\/video.fc2.com\/a\/feed_popular.php?m=week\",\n    \"http:\/\/weather.livedoor.com\/forecast\/rss\/area\/400010.xml\",\n    \"http:\/\/wotopi.jp\/feed\",\n    \"http:\/\/www.100shiki.com\/feed\",\n    \"http:\/\/www.alistapart.com\/rss.xml\",\n    \"http:\/\/www.anime-sharing.com\/forum\/external.php?type=RSS2&amp;forumids=36\",\n    \"http:\/\/www.anime-sharing.com\/forum\/external.php?type=RSS2&amp;forumids=38\",\n    \"http:\/\/www.anime-sharing.com\/forum\/external.php?type=RSS2&amp;forumids=47\",\n    \"http:\/\/www.blosxom.com\/?feed=rss2\",\n    \"http:\/\/www.britannica.com\/eb\/dailycontent\/rss\",\n    \"http:\/\/www.csmonitor.com\/rss\/top.rss\",\n    \"http:\/\/www.ehackingnews.com\/feeds\/posts\/default\",\n    \"http:\/\/www.falcom.co.jp\/new.xml\",\n    \"http:\/\/www.famitsu.com\/rss\/category\/fcom_game.rdf\",\n    \"http:\/\/www.famitsu.com\/rss\/fcom_all.rdf\",\n    \"http:\/\/www.ganganonline.com\/rss\/index.xml\",\n    \"http:\/\/www.ideaxidea.com\/feed\",\n    \"http:\/\/www.itnews711.com\/index.rdf\",\n    \"http:\/\/www.jp.playstation.com\/whatsnew\/whatsnew.rdf\",\n    \"http:\/\/www.keyman.or.jp\/rss\/v1\/?rss_type=all\",\n    \"http:\/\/www.koubo.co.jp\/rss.xml\",\n    \"http:\/\/www.nyaa.se\/?page=rss&amp;sort=2\",\n    \"http:\/\/www.nyaa.se\/?page=rss&amp;user=118009\",\n    \"http:\/\/www.nytimes.com\/services\/xml\/rss\/userland\/HomePage.xml\",\n    \"http:\/\/www.phianime.tv\/feed\/\",\n    \"http:\/\/www.rebootdevelop.hr\/feed\/\",\n    \"http:\/\/www.rictus.com\/muchado\/feed\/\",\n    \"http:\/\/www.sbcr.jp\/atom.xml\",\n    \"http:\/\/www.slashgear.com\/comments\/feed\/\",\n    \"http:\/\/www.torrent-anime.com\/feed\",\n    \"http:\/\/www.torrent-anime.com\/feed\/\",\n    \"http:\/\/www.webimemo.com\/feed\/\",\n    \"http:\/\/www.wired.com\/news_drop\/netcenter\/netcenter.rdf\",\n    \"http:\/\/www.xvideos.com\/rss\/rss.xml\",\n    \"http:\/\/www.youtube.com\/rss\/user\/KADOKAWAanime\/videos.rss\",\n    \"http:\/\/www.youtube.com\/rss\/user\/demosouko\/videos.rss\",\n    \"http:\/\/www.yukawanet.com\/index.rdf\",\n    \"http:\/\/www.zou3.net\/php\/rss\/nikkei2rss.php?head=main\",\n    \"http:\/\/xml.ehgt.org\/ehtracker.xml\",\n    \"http:\/\/xml.metafilter.com\/rss.xml\",\n    \"http:\/\/xvideos.2jiero.info\/feed\",\n    \"http:\/\/yaraon.blog109.fc2.com\/?xml\",\n    \"http:\/\/yusaani.com\/home\/feed\/\",\n    \"http:\/\/zipdeyaruo.blog42.fc2.com\/?xml\",\n    \"http:\/\/www.portalgraphics.net\/rss\/latest_image_list.xml\",\n    \"http:\/\/api.syosetu.com\/writernovel\/430380.Atom\",\n    \"http:\/\/creive.me\/feed\/\",\n    \"http:\/\/gihyo.jp\/dev\/feed\/atom\",\n    \"http:\/\/gihyo.jp\/feed\/rss1\",\n    \"http:\/\/hakase255.blog135.fc2.com\/?xml\",\n    \"http:\/\/2ch-ranking.net\/rss\/zenban.rdf\",\n    \"http:\/\/www.isus.jp\/feed\/\",\n    \"http:\/\/www.jiji.com\/rss\/ranking.rdf\",\n    \"http:\/\/jp.gamesindustry.biz\/rss\/index.xml\",\n    \"https:\/\/www.youtube.com\/feeds\/videos.xml?channel_id=UCx1nAvtVDIsaGmCMSe8ofsQ\",\n    \"http:\/\/zakuzaku911.com\/index.rdf\",\n    \"http:\/\/ke-tai.org\/blog\/feed\/\",\n    \"http:\/\/data.newantenna.net\/ero\/rss\/all.xml\",\n    \"http:\/\/developer.mixi.co.jp\/feed\/atom\",\n    \"http:\/\/neoneetch.blog.fc2.com\/?xml\",\n    \"http:\/\/rss.itmedia.co.jp\/rss\/1.0\/netlab.xml\",\n    \"http:\/\/netgeek.biz\/feed\",\n    \"http:\/\/blog.esuteru.com\/index.rdf\",\n    \"http:\/\/b.hatena.ne.jp\/hotentry\/game.rss\",\n    \"http:\/\/b.hatena.ne.jp\/hotentry.rss\",\n    \"http:\/\/mobile.seisyun.net\/rss\/hot.rdf\",\n    \"http:\/\/yomi.mobi\/rss\/hot.rdf\",\n    \"http:\/\/saymygame.com\/feed\/\",\n    \"http:\/\/blog.webcreativepark.net\/atom.xml\",\n    \"http:\/\/buhidoh.net\/?xml\",\n    \"http:\/\/www.webcyou.com\/?feed=rss2\",\n    \"http:\/\/withnews.jp\/rss\/consumer\/new.rdf\",\n    \"https:\/\/yande.re\/post\/atom?tags=loli\",\n    \"http:\/\/blog.livedoor.jp\/nizigami\/atom.xml\",\n    \"http:\/\/nvmzaq.blog.fc2.com\/?xml\",\n    \"http:\/\/keieimanga.net\/index.rdf\",\n    \"http:\/\/megumi.ldblog.jp\/atom.xml\",\n    \"http:\/\/kirik.tea-nifty.com\/diary\/index.rdf\",\n    \"http:\/\/sinri.net\/comments\/feed\",\n    \"http:\/\/himasoku.com\/atom.xml\",\n    \"http:\/\/himasoku.com\/index.rdf\",\n    \"http:\/\/20kaido.com\/index.rdf\",\n    \"http:\/\/h723.blog.fc2.com\/?xml\",\n    \"http:\/\/onecall2ch.com\/index.rdf\",\n    \"http:\/\/www.forest.impress.co.jp\/rss.xml\",\n    \"http:\/\/www.zaikei.co.jp\/rss\/sections\/it.xml\",\n    \"http:\/\/akiba.keizai.biz\/rss.xml\",\n    \"http:\/\/agag.tw\/feed\/2d-popular.rss\",\n    \"http:\/\/adult-vr.jp\/feed\/\",\n    \"http:\/\/www.anige-sokuhouvip.com\/?xml\",\n    \"http:\/\/animeanime.jp\/rss\/index.rdf\",\n    \"http:\/\/alfalfalfa.com\/index.rdf\",\n    \"http:\/\/feeds.feedburner.com\/fc2\/GhfA\",\n    \"http:\/\/erogetaiken072.blog.fc2.com\/?xml\",\n    \"http:\/\/otanew.jp\/atom.xml\",\n    \"http:\/\/jin115.com\/index.rdf\",\n    \"http:\/\/www.onlinegamer.jp\/rss\/news.rdf\",\n    \"http:\/\/karapaia.livedoor.biz\/index.rdf\",\n    \"http:\/\/getnews.jp\/feed\/ext\/orig\",\n    \"http:\/\/www.gungho.co.jp\/news\/xml\/rss.xml\",\n    \"http:\/\/blog.livedoor.jp\/kinisoku\/index.rdf\",\n    \"http:\/\/feeds.gizmodo.jp\/rss\/gizmodo\/index.xml\",\n    \"http:\/\/himado.in\/?sort=movie_id&amp;rss=1\",\n    \"http:\/\/k-tai.impress.co.jp\/cda\/rss\/ktai.rdf\",\n    \"http:\/\/gehasoku.com\/atom.xml\",\n    \"http:\/\/feedblog.ameba.jp\/rss\/ameblo\/principia-ca\/rss20.xml\",\n    \"http:\/\/zai.diamond.jp\/list\/feed\/rssfxnews\",\n    \"http:\/\/capacitor.blog.fc2.com\/?xml\",\n    \"http:\/\/blog.livedoor.jp\/vipsister23\/index.rdf\",\n    \"http:\/\/vipsister23.com\/atom.xml\",\n    \"http:\/\/b.hatena.ne.jp\/search\/tag?safe=on&amp;q=2ch&amp;users=500&amp;mode=rss\",\n    \"http:\/\/b.hatena.ne.jp\/search\/tag?safe=on&amp;q=%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF&amp;users=500&amp;mode=rss\",\n    \"http:\/\/b.hatena.ne.jp\/search\/tag?safe=off&amp;q=%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0&amp;users=500&amp;mode=rss\",\n    \"http:\/\/shikaku2ch.doorblog.jp\/atom.xml\",\n    \"http:\/\/dotinstall.com\/lessons.rss\",\n    \"http:\/\/2ch-ranking.net\/rss\/news4vip.rdf\",\n    \"http:\/\/blog.livedoor.jp\/insidears\/index.rdf\",\n    \"http:\/\/2ch-ranking.net\/rss\/newsplus.rdf\",\n    \"http:\/\/2ch-ranking.net\/rss\/news.rdf\",\n    \"http:\/\/nullpoantenna.com\/game.rdf\",\n    \"http:\/\/workingnews.blog117.fc2.com\/?xml\",\n    \"http:\/\/bm.s5-style.com\/feed\",\n    \"http:\/\/2ch-ranking.net\/rss\/ghard.rdf\",\n    \"http:\/\/www.724685.com\/blog\/rss.xml\",\n    \"http:\/\/www.yukawanet.com\/index.rdf\",\n    \"http:\/\/2ch-ranking.net\/rss\/bizplus.rdf\",\n    \"http:\/\/www.nicovideo.jp\/ranking\/fav\/daily\/all?rss=2.0&amp;lang=ja-jp\",\n    \"http:\/\/www.tarikin.net\/rss0.rdf\",\n    \"http:\/\/blog.livedoor.jp\/dqnplus\/index.rdf\",\n    \"http:\/\/www.seojapan.com\/blog\/feed\",\n    \"http:\/\/2ch-ranking.net\/rss\/morningcoffee.rdf\",\n    \"http:\/\/2ch-ranking.net\/mt50k.rdf\",\n    \"http:\/\/rssblog.ameba.jp\/yandereotto\/rss20.xml\",\n    \"https:\/\/business.nikkei.com\/rss\/sns\/nb.rdf\",\n    \"http:\/\/daredemopc.blog51.fc2.com\/?xml\",\n    \"http:\/\/erogetaikenban.blog65.fc2.com\/?xml\",\n    \"http:\/\/news.goo.ne.jp\/rss\/topstories\/gootop\/index.rdf\",\n    \"http:\/\/lanovelien.blog121.fc2.com\/?xml\",\n    \"http:\/\/news.livedoor.com\/topics\/rss\/eco.xml\",\n    \"http:\/\/ragnarokonline.gungho.jp\/index.rdf\",\n    \"http:\/\/rocketnews24.com\/feed\/\",\n    \"https:\/\/news.denfaminicogamer.jp\/feed\",\n    \"http:\/\/www.igda.jp\/?feed=rss2\",\n    \"http:\/\/feeds.cnn.co.jp\/cnn\/rss\"\n    ];\n\n    \/\/ ==== \u65e2\u5b58\u30c7\u30fc\u30bf\u306e\u30ed\u30fc\u30c9 ====\n    if (!localStorage.getItem('verse_shared_rssFeeds')) {\n      localStorage.setItem('verse_shared_rssFeeds', JSON.stringify(PRESET_RSS));\n    }\n\n    \/\/ \u30a2\u30d7\u30ea\u72b6\u614b\n    let users = JSON.parse(localStorage.getItem('verse_users') || '&#91;]');\n    let currentUser = JSON.parse(localStorage.getItem('verse_currentUser') || 'null');\n    let posts = JSON.parse(localStorage.getItem('verse_posts') || '&#91;]');\n    let isDarkMode = localStorage.getItem('verse_darkMode') === 'true';\n    let isInitialized = false;\n\n    \/\/ RSS\/BOT\u72b6\u614b\n    let botInterval = null;\n    let rssInterval = null;\n\n    \/\/ \u5171\u6709RSS\u8a2d\u5b9a\n    let sharedRssFeeds = JSON.parse(localStorage.getItem('verse_shared_rssFeeds') || '&#91;]');\n    let sharedRssInterval = Number(localStorage.getItem('verse_shared_rssInterval')) || 300;\n    let sharedRssLastIds = JSON.parse(localStorage.getItem('verse_shared_rssLastIds') || '{}');\n    \/\/ \u5404\u30d5\u30a3\u30fc\u30c9\u306eON\/OFF\uff08true=ON\uff09\u3002\u672a\u8a2d\u5b9a\u306f\u30c7\u30d5\u30a9\u30eb\u30c8ON\u3002\n    let sharedRssEnabled = JSON.parse(localStorage.getItem('verse_shared_rssEnabled') || '{}');\n\n    \/\/ ===== \u8a8d\u8a3cUI =====\n    function showAuthModal(mode = 'login', errorMsg = '') {\n      document.getElementById('auth-title').textContent = (mode === 'register') ? '\u65b0\u898f\u767b\u9332' : '\u30ed\u30b0\u30a4\u30f3';\n      document.getElementById('auth-form').authMode = mode;\n      document.getElementById('auth-email').value = '';\n      document.getElementById('auth-password').value = '';\n      document.getElementById('auth-modal').style.display = '';\n      document.getElementById('main-content').style.display = 'none';\n      document.getElementById('auth-error').textContent = errorMsg || '';\n      document.getElementById('auth-error').style.display = errorMsg ? '' : 'none';\n      document.getElementById('toggle-auth-mode').textContent = (mode === 'register') ? '\u30ed\u30b0\u30a4\u30f3\u306f\u3053\u3061\u3089' : '\u65b0\u898f\u767b\u9332\u306f\u3053\u3061\u3089';\n    }\n    function hideAuthModal() {\n      document.getElementById('auth-modal').style.display = 'none';\n      document.getElementById('main-content').style.display = '';\n    }\n\n    document.addEventListener('DOMContentLoaded', () => {\n      document.getElementById('auth-form').onsubmit = function(e) {\n        e.preventDefault();\n        const email = document.getElementById('auth-email').value.trim().toLowerCase();\n        const password = document.getElementById('auth-password').value;\n        if (!email || !password) {\n          showAuthModal(this.authMode, '\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3068\u30d1\u30b9\u30ef\u30fc\u30c9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044');\n          return;\n        }\n        if (this.authMode === 'register') {\n          if (users.find(u => u.email === email)) {\n            showAuthModal('register', '\u3053\u306e\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u65e2\u306b\u767b\u9332\u3055\u308c\u3066\u3044\u307e\u3059');\n            return;\n          }\n          const newUser = {\n            email,\n            password,\n            profile: { icon: 'https:\/\/via.placeholder.com\/100', username: email.split('@')&#91;0], selfIntro: '' }\n          };\n          users.push(newUser);\n          localStorage.setItem('verse_users', JSON.stringify(users));\n          currentUser = { email };\n          localStorage.setItem('verse_currentUser', JSON.stringify(currentUser));\n          showAuthModal('login', '\u767b\u9332\u5b8c\u4e86\uff01\u30ed\u30b0\u30a4\u30f3\u3057\u3066\u304f\u3060\u3055\u3044');\n        } else {\n          const user = users.find(u => u.email === email &amp;&amp; u.password === password);\n          if (!user) { showAuthModal('login', '\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u307e\u305f\u306f\u30d1\u30b9\u30ef\u30fc\u30c9\u304c\u9055\u3044\u307e\u3059'); return; }\n          currentUser = { email };\n          localStorage.setItem('verse_currentUser', JSON.stringify(currentUser));\n          hideAuthModal();\n          initializeApp();\n        }\n      };\n\n      document.getElementById('toggle-auth-mode').onclick = function() {\n        const mode = (document.getElementById('auth-title').textContent === '\u65b0\u898f\u767b\u9332') ? 'login' : 'register';\n        showAuthModal(mode);\n      };\n\n      if (!currentUser) showAuthModal('login'); else { hideAuthModal(); initializeApp(); }\n    });\n\n    function logout() {\n      localStorage.removeItem('verse_currentUser');\n      currentUser = null;\n      stopRssAuto();\n      showAuthModal('login');\n    }\n\n    \/\/ ===== \u521d\u671f\u5316 =====\n    function initializeApp() {\n      if (isInitialized) return;\n      if (!currentUser) { showAuthModal('login'); return; }\n\n      users = JSON.parse(localStorage.getItem('verse_users') || '&#91;]');\n      posts = JSON.parse(localStorage.getItem('verse_posts') || '&#91;]');\n      isDarkMode = localStorage.getItem('verse_darkMode') === 'true';\n\n      const user = users.find(u => u.email === currentUser.email);\n      window.profile = user ? user.profile : { icon: 'https:\/\/via.placeholder.com\/100', username: '\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc', selfIntro: '' };\n\n      updateAllUI();\n      updateStatusIndicators();\n      updateRssUI();\n\n      if (isDarkMode) {\n        document.body.classList.add('dark');\n        document.body.style.background = 'linear-gradient(135deg, #1a202c 0%, #2d3748 100%)';\n      } else {\n        document.body.classList.remove('dark');\n        document.body.style.background = 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)';\n      }\n\n      document.getElementById('main-content').style.display = '';\n      document.getElementById('logout-btn').style.display = '';\n      isInitialized = true;\n\n      startRssAuto();\n      addLog('bot-log', 'BOT\u6a5f\u80fd\u521d\u671f\u5316\u5b8c\u4e86', 'success');\n      addLog('rss-log', 'RSS\u81ea\u52d5\u6295\u7a3f\uff08\u5168\u4f53\u5171\u6709\uff09\u521d\u671f\u5316\u5b8c\u4e86', 'success');\n    }\n\n    \/\/ ===== \u6295\u7a3f\uff08\u30e6\u30fc\u30b6\u30fc\/BOT\uff09 =====\n    function createUserPost() {\n      const ta = document.getElementById('postContent');\n      const txt = ta.value.trim();\n      if (!txt) return alert('\u6295\u7a3f\u5185\u5bb9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002');\n      if (!currentUser) return alert('\u30ed\u30b0\u30a4\u30f3\u304c\u5fc5\u8981\u3067\u3059\u3002');\n      createPost(txt, 'user', profile.username, profile.icon);\n      ta.value = '';\n      updateCharCount();\n    }\n\n    function createPost(content, type = 'user', username = null, icon = null, extra = {}) {\n      if (!content || !content.trim()) return false;\n      const post = {\n        id: Date.now() + Math.random(),\n        content: content.trim(),\n        likes: 0,\n        timestamp: new Date().toLocaleString('ja-JP'),\n        type,\n        username: username || profile.username,\n        icon: icon || profile.icon,\n        userEmail: currentUser ? currentUser.email : '',\n        ...extra\n      };\n      posts.unshift(post);\n      saveData();\n      renderTimeline();\n      return true;\n    }\n\n    function likePost(id) {\n      const idx = posts.findIndex(p => p.id === id);\n      if (idx >= 0) {\n        posts&#91;idx].likes++;\n        saveData();\n        renderTimeline();\n      }\n    }\n\n    function deletePost(id) {\n      if (!confirm('\u3053\u306e\u6295\u7a3f\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f')) return;\n      posts = posts.filter(p => p.id !== id);\n      saveData();\n      renderTimeline();\n    }\n\n    function clearAllPosts() {\n      if (!confirm('\u5168\u3066\u306e\u6295\u7a3f\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f')) return;\n      posts = &#91;];\n      saveData();\n      renderTimeline();\n    }\n\n    function exportData() {\n      const blob = new Blob(&#91;JSON.stringify(posts, null, 2)], { type: 'application\/json' });\n      const url = URL.createObjectURL(blob);\n      const a = document.createElement('a');\n      a.href = url;\n      a.download = 'verse_posts.json';\n      a.click();\n      URL.revokeObjectURL(url);\n    }\n\n    \/\/ ===== \u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u63cf\u753b\uff08JSX\u6df7\u5165\u306e\u4fee\u6b63\u30fb\u7121\u5bb3\u5316\uff09 =====\n    function escapeHtml(s) {\n      return (s || '').replace(\/&#91;&amp;&lt;>\"']\/g, m => ({'&amp;':'&amp;amp;','&lt;':'&amp;lt;','>':'&amp;gt;','\"':'&amp;quot;','\\'':'&amp;#39;'}&#91;m]));\n    }\n\n    function renderTimeline() {\n      const tl = document.getElementById('timeline');\n      const emp = document.getElementById('empty-timeline');\n      const cnt = document.getElementById('post-count');\n      if (!tl || !emp || !cnt) return;\n\n      const allPosts = posts;\n      if (allPosts.length === 0) {\n        tl.innerHTML = '';\n        emp.style.display = 'block';\n        cnt.textContent = '(0\u4ef6\u306e\u6295\u7a3f)';\n        return;\n      }\n      emp.style.display = 'none';\n      cnt.textContent = `(${allPosts.length}\u4ef6\u306e\u6295\u7a3f)`;\n\n      tl.innerHTML = allPosts.map(p => {\n        const info = { bot: '\ud83e\udd16 BOT', markov: '\ud83c\udfb2 MarkovBOT', user: '\ud83d\udc64 \u30e6\u30fc\u30b6\u30fc', feed: '\ud83d\udcf0 FEEDBOT' }&#91;p.type] || '\ud83d\udc64';\n        const main = p.link\n          ? `&lt;a href=\"${p.link}\" target=\"_blank\" class=\"text-blue-600 underline\">${escapeHtml(p.content)}&lt;\/a>`\n          : `${escapeHtml(p.content)}`;\n        return `\n          &lt;div class=\"timeline-post p-6\">\n            &lt;div class=\"flex justify-between items-start mb-4\">\n              &lt;div class=\"flex items-center space-x-3\">\n                &lt;img src=\"${p.icon}\" class=\"w-10 h-10 rounded-full object-cover\" onerror=\"this.src='https:\/\/via.placeholder.com\/40'\">\n                &lt;div>\n                  &lt;div class=\"flex items-center\">\n                    &lt;span class=\"font-semibold text-gray-800 dark:text-white\">${escapeHtml(p.username)}&lt;\/span>\n                    &lt;span class=\"username-badge\">${info}&lt;\/span>\n                  &lt;\/div>\n                  &lt;div class=\"text-sm text-gray-500 dark:text-gray-400\">${p.timestamp}&lt;\/div>\n                &lt;\/div>\n              &lt;\/div>\n            &lt;\/div>\n            &lt;div class=\"text-gray-800 dark:text-gray-200 mb-4 leading-relaxed\">${main}&lt;\/div>\n            &lt;div class=\"flex items-center space-x-4 pt-4 border-t border-gray-100 dark:border-gray-600\">\n              &lt;button onclick=\"likePost(${p.id})\" class=\"flex items-center space-x-2 text-gray-600 dark:text-gray-400 hover:text-red-500\">\n                &lt;i class=\"fas fa-heart\">&lt;\/i>&lt;span>${p.likes}&lt;\/span>\n              &lt;\/button>\n              &lt;div class=\"relative\">\n                &lt;button onclick=\"toggleShareMenu(${p.id})\" class=\"flex items-center space-x-2 text-gray-600 dark:text-gray-400 hover:text-blue-500\">\n                  &lt;i class=\"fas fa-share\">&lt;\/i>&lt;span>\u30b7\u30a7\u30a2&lt;\/span>\n                &lt;\/button>\n                &lt;div id=\"share-menu-${p.id}\" class=\"share-menu hidden\">\n                  &lt;button onclick=\"shareToX(${p.id})\">&lt;i class=\"fab fa-x-twitter text-blue-400 mr-2\">&lt;\/i>X\u3067\u30b7\u30a7\u30a2&lt;\/button>\n                  &lt;button onclick=\"shareToLine(${p.id})\">&lt;i class=\"fab fa-line text-green-400 mr-2\">&lt;\/i>LINE\u3067\u30b7\u30a7\u30a2&lt;\/button>\n                  &lt;button onclick=\"copyPost(${p.id})\">&lt;i class=\"fas fa-copy mr-2\">&lt;\/i>\u30b3\u30d4\u30fc&lt;\/button>\n                &lt;\/div>\n              &lt;\/div>\n              &lt;button onclick=\"deletePost(${p.id})\" class=\"flex items-center space-x-2 text-gray-600 dark:text-gray-400 hover:text-red-500 ml-auto\">\n                &lt;i class=\"fas fa-trash\">&lt;\/i>&lt;span>\u524a\u9664&lt;\/span>\n              &lt;\/button>\n            &lt;\/div>\n          &lt;\/div>\n        `;\n      }).join('');\n    }\n\n    function getPostContentText(id) {\n      const p = posts.find(x => x.id === id);\n      if (!p) return '';\n      const tmp = document.createElement('div');\n      tmp.innerHTML = p.content;\n      return tmp.textContent || tmp.innerText || '';\n    }\n    function toggleShareMenu(id) {\n      document.querySelectorAll('&#91;id^=\"share-menu-\"]')\n        .forEach(el => el.classList.add('hidden'));\n      const m = document.getElementById('share-menu-' + id);\n      if (m) m.classList.toggle('hidden');\n    }\n    function shareToX(id) {\n      const t = encodeURIComponent(getPostContentText(id));\n      const u = encodeURIComponent(location.href);\n      window.open(`https:\/\/twitter.com\/intent\/tweet?text=${t}&amp;url=${u}`, '_blank');\n    }\n    function shareToLine(id) {\n      const u = encodeURIComponent(location.href);\n      window.open(`https:\/\/social-plugins.line.me\/lineit\/share?url=${u}`, '_blank');\n    }\n    function copyPost(id) {\n      const t = getPostContentText(id);\n      if (navigator.clipboard) {\n        navigator.clipboard.writeText(t).then(() => alert('\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f')).catch(() => fallbackCopy(t));\n      } else fallbackCopy(t);\n    }\n    function fallbackCopy(t) {\n      const ta = document.createElement('textarea');\n      ta.value = t; document.body.appendChild(ta);\n      ta.select(); document.execCommand('copy');\n      document.body.removeChild(ta);\n      alert('\u30b3\u30d4\u30fc\u3057\u307e\u3057\u305f');\n    }\n\n    \/\/ ===== RSS UI\uff08\u500b\u5225ON\/OFF + \u4e00\u62ecON\/OFF\uff09 =====\n    function updateRssUI() {\n      const listDiv = document.getElementById('rss-list');\n      if (!listDiv) return;\n\n      if (!sharedRssFeeds || sharedRssFeeds.length === 0) {\n        listDiv.innerHTML = '&lt;div class=\"text-white text-xs opacity-80\">RSS\u30d5\u30a3\u30fc\u30c9\u672a\u767b\u9332&lt;\/div>';\n      } else {\n        listDiv.innerHTML = sharedRssFeeds.map((url, i) => {\n          const enabled = sharedRssEnabled&#91;url] !== false; \/\/ \u65e2\u5b9aON\n          const enc = encodeURIComponent(url);\n          return `\n            &lt;div class=\"flex items-center space-x-2 bg-white bg-opacity-90 rounded px-2 py-2 mb-1\">\n              &lt;input type=\"checkbox\" ${enabled ? 'checked' : ''} onchange=\"toggleRssEnabled('${enc}', this.checked)\" title=\"ON\/OFF\">\n              &lt;div class=\"truncate flex-1 text-xs\" title=\"${escapeHtml(url)}\">${escapeHtml(url)}&lt;\/div>\n              &lt;button onclick=\"delRssFeed(${i})\" class=\"text-red-500 hover:text-red-700\" title=\"\u524a\u9664\">&lt;i class=\"fas fa-trash\">&lt;\/i>&lt;\/button>\n            &lt;\/div>\n          `;\n        }).join('');\n      }\n      const iv = document.getElementById('rss-interval');\n      if (iv) iv.value = sharedRssInterval || 300;\n    }\n\n    function toggleRssEnabled(encUrl, on) {\n      const url = decodeURIComponent(encUrl);\n      sharedRssEnabled&#91;url] = !!on;\n      saveSharedRss();\n      addLog('rss-log', `FEED ${on ? 'ON' : 'OFF'}: ${url}`, 'info');\n    }\n    function setAllRssEnabled(on) {\n      (sharedRssFeeds || &#91;]).forEach(u => sharedRssEnabled&#91;u] = !!on);\n      saveSharedRss();\n      updateRssUI();\n      addLog('rss-log', `\u5168\u30d5\u30a3\u30fc\u30c9\u3092${on ? 'ON' : 'OFF'}\u306b\u3057\u307e\u3057\u305f`, 'success');\n    }\n\n    function saveSharedRss() {\n      localStorage.setItem('verse_shared_rssFeeds', JSON.stringify(sharedRssFeeds));\n      localStorage.setItem('verse_shared_rssInterval', String(sharedRssInterval));\n      localStorage.setItem('verse_shared_rssLastIds', JSON.stringify(sharedRssLastIds));\n      localStorage.setItem('verse_shared_rssEnabled', JSON.stringify(sharedRssEnabled));\n    }\n\n    function addRssFeed() {\n      const url = document.getElementById('rss-url').value.trim();\n      if (!\/^https?:\\\/\\\/.+\/.test(url)) { addLog('rss-log', '\u6b63\u3057\u3044RSS\u30d5\u30a3\u30fc\u30c9URL\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044', 'error'); return; }\n      if (!sharedRssFeeds) sharedRssFeeds = &#91;];\n      if (sharedRssFeeds.includes(url)) { addLog('rss-log', '\u3059\u3067\u306b\u767b\u9332\u6e08\u307f\u3067\u3059', 'error'); return; }\n      sharedRssFeeds.push(url);\n      sharedRssEnabled&#91;url] = true; \/\/ \u65e2\u5b9aON\n      saveSharedRss();\n      updateRssUI();\n      addLog('rss-log', `RSS\u8ffd\u52a0: ${url}`, 'success');\n      document.getElementById('rss-url').value = '';\n    }\n\n    function delRssFeed(i) {\n      if (!sharedRssFeeds&#91;i]) return;\n      if (!confirm('\u3053\u306e\u30d5\u30a3\u30fc\u30c9\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f')) return;\n      const url = sharedRssFeeds&#91;i];\n      sharedRssFeeds.splice(i, 1);\n      delete sharedRssEnabled&#91;url];\n      delete sharedRssLastIds&#91;url];\n      saveSharedRss();\n      updateRssUI();\n      addLog('rss-log', 'RSS\u524a\u9664', 'info');\n    }\n\n    function setRssInterval() {\n      const iv = document.getElementById('rss-interval').valueAsNumber || 300;\n      if (iv &lt; 10) return alert('\u9593\u9694\u306f10\u79d2\u4ee5\u4e0a\u3067\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002');\n      sharedRssInterval = iv;\n      saveSharedRss();\n      updateRssUI();\n      startRssAuto();\n      addLog('rss-log', `\u81ea\u52d5\u6295\u7a3f\u9593\u9694\u3092${iv}\u79d2\u306b\u8a2d\u5b9a`, 'success');\n    }\n\n    function fetchRssNow() { fetchRssFeeds(); }\n\n    \/\/ ===== RSS\u53d6\u5f97\uff08OFF\u306e\u30d5\u30a3\u30fc\u30c9\u306f\u30b9\u30ad\u30c3\u30d7\uff09 =====\n    function fetchRssFeeds() {\n      if (!sharedRssFeeds || sharedRssFeeds.length === 0) return;\n      sharedRssFeeds.forEach(feedUrl => {\n        if (sharedRssEnabled&#91;feedUrl] === false) {\n          addLog('rss-log', `OFF\u306e\u305f\u3081\u53d6\u5f97\u30b9\u30ad\u30c3\u30d7: ${feedUrl}`, 'info');\n          return;\n        }\n        fetch('https:\/\/api.rss2json.com\/v1\/api.json?rss_url=' + encodeURIComponent(feedUrl))\n          .then(resp => resp.json())\n          .then(data => {\n            if (!data.items || !data.items.length) return;\n            let lastId = sharedRssLastIds&#91;feedUrl] || '';\n            let newItems = &#91;];\n            for (const item of data.items) {\n              const guid = item.guid || item.link || item.pubDate || item.title;\n              if (!lastId || String(guid) > String(lastId)) newItems.push(item);\n            }\n            if (newItems.length === 0) return;\n\n            newItems.reverse().forEach(item => {\n              const guid = item.guid || item.link || item.pubDate || item.title;\n              \/\/ FEED\u672c\u6587\u306f\u7701\u7565\uff08\u30bf\u30a4\u30c8\u30eb+\u30ea\u30f3\u30af\u306e\u307f\u30dd\u30b9\u30c8\uff09\n              if (!posts.some(p => p.type === 'feed' &amp;&amp; p.link === item.link)) {\n                createPost(item.title, 'feed', 'FEEDBOT', 'https:\/\/cdn-icons-png.flaticon.com\/512\/3416\/3416046.png', { link: item.link });\n                addLog('rss-log', `\u65b0\u3057\u3044\u8a18\u4e8b: ${item.title}`, 'success');\n              }\n              sharedRssLastIds&#91;feedUrl] = guid;\n            });\n            saveSharedRss();\n          })\n          .catch(() => addLog('rss-log', 'RSS\u53d6\u5f97\u30a8\u30e9\u30fc: ' + feedUrl, 'error'));\n      });\n    }\n\n    function startRssAuto() {\n      stopRssAuto();\n      fetchRssFeeds();\n      rssInterval = setInterval(fetchRssFeeds, (sharedRssInterval || 300) * 1000);\n      updateStatusIndicators();\n      addLog('rss-log', `RSS\u81ea\u52d5\u6295\u7a3f\u3092\u958b\u59cb (${sharedRssInterval}\u79d2\u9593\u9694)`, 'success');\n    }\n\n    function stopRssAuto() {\n      if (rssInterval) clearInterval(rssInterval);\n      rssInterval = null;\n      updateStatusIndicators();\n      addLog('rss-log', 'RSS\u81ea\u52d5\u6295\u7a3f\u3092\u505c\u6b62\u3057\u307e\u3057\u305f', 'info');\n    }\n\n    \/\/ ===== BOT =====\n    function postBotMessage() {\n      const ta = document.getElementById('botContent');\n      const txt = ta.value.trim();\n      if (!txt) return alert('BOT\u6295\u7a3f\u5185\u5bb9\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044\u3002');\n      if (!currentUser) return alert('\u30ed\u30b0\u30a4\u30f3\u304c\u5fc5\u8981\u3067\u3059\u3002');\n      if (createPost(txt, 'bot', 'BOT', profile.icon)) {\n        ta.value = '';\n        addLog('bot-log', `BOT\u6295\u7a3f: \"${txt.substring(0, 30)}...\"`, 'success');\n      }\n    }\n\n    function generateMarkovText() {\n      \/\/ FEED\uff08\u5916\u90e8\u8a18\u4e8b\uff09\u306f\u5b66\u7fd2\u5bfe\u8c61\u304b\u3089\u9664\u5916\u3057\u3001\u30e6\u30fc\u30b6\u30fc\u3068BOT\u6295\u7a3f\u306e\u307f\u5b66\u7fd2\n      let text = posts\n        .filter(p => &#91;'user','bot'].includes(p.type))\n        .map(p => {\n          const d = document.createElement('div');\n          d.innerHTML = p.content;\n          return (d.textContent || d.innerText || '')\n            .replace(\/\\s+\/g, ' ').replace(\/https?:\\\/\\\/\\S+\/g, '').trim();\n        }).join(' ');\n\n      if (text.length &lt; 20) {\n        const fallbacks = &#91;\"\u4eca\u65e5\u306f\u3044\u3044\u5929\u6c17\u3067\u3059\u306d\uff01\",\"\u6700\u8fd1\u9762\u767d\u3044\u30cb\u30e5\u30fc\u30b9\u3042\u308a\u307e\u3057\u305f\u304b\uff1f\",\"\u65b0\u3057\u3044\u30a2\u30a4\u30c7\u30a2\u304c\u6d6e\u304b\u3093\u3067\u304d\u307e\u3057\u305f\u3002\",\"\u7686\u3055\u3093\u306f\u3069\u3046\u601d\u3044\u307e\u3059\u304b\uff1f\"];\n        return fallbacks&#91;Math.floor(Math.random() * fallbacks.length)];\n      }\n\n      const tokens = text.match(\/&#91;\\u4e00-\\u9fff\\u3040-\\u309f\\u30a0-\\u30ff\\w]+|&#91;\u3002\u3001\uff01\uff1f\\r\\n]\/g) || &#91;];\n      if (tokens.length &lt; 2) return tokens.join('');\n\n      const markov = {};\n      for (let i = 0; i &lt; tokens.length - 2; i++) {\n        const key = tokens&#91;i] + '|' + tokens&#91;i+1];\n        if (!markov&#91;key]) markov&#91;key] = &#91;];\n        markov&#91;key].push(tokens&#91;i+2]);\n      }\n\n      let idx = Math.floor(Math.random() * (tokens.length - 2));\n      let key = tokens&#91;idx] + '|' + tokens&#91;idx+1];\n      let result = &#91;tokens&#91;idx], tokens&#91;idx+1]];\n      let maxLen = 60 + Math.floor(Math.random() * 40);\n\n      for (let i = 0; i &lt; maxLen; i++) {\n        const nexts = markov&#91;key];\n        if (!nexts || nexts.length === 0) break;\n        const next = nexts&#91;Math.floor(Math.random() * nexts.length)];\n        result.push(next);\n        if (\/&#91;\u3002\uff01\uff1f\\n]\/.test(next)) break;\n        key = result&#91;result.length - 2] + '|' + result&#91;result.length - 1];\n      }\n      return result.join('').replace(\/\\n\/g, '');\n    }\n\n    function postMarkovBot() {\n      const txt = generateMarkovText();\n      if (createPost(txt, 'markov', 'MarkovBOT', profile.icon)) {\n        addLog('bot-log', `\u30de\u30eb\u30b3\u30d5\u6295\u7a3f: \"${txt.substring(0, 40)}...\"`, 'success');\n      }\n    }\n\n    function startBotAutoPost() {\n      const iv = document.getElementById('botIntervalSec').valueAsNumber || 60;\n      if (iv &lt; 10) { alert('\u9593\u9694\u306f10\u79d2\u4ee5\u4e0a\u3067\u8a2d\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002'); return; }\n      stopBotAutoPost();\n      setTimeout(postMarkovBot, 3000);\n      botInterval = setInterval(postMarkovBot, iv * 1000);\n      updateStatusIndicators();\n      addLog('bot-log', `\u30de\u30eb\u30b3\u30d5BOT\u81ea\u52d5\u6295\u7a3f\u958b\u59cb (${iv}\u79d2\u9593\u9694)`, 'success');\n    }\n\n    function stopBotAutoPost() {\n      if (botInterval) {\n        clearInterval(botInterval);\n        botInterval = null;\n        updateStatusIndicators();\n        addLog('bot-log', '\u30de\u30eb\u30b3\u30d5BOT\u81ea\u52d5\u6295\u7a3f\u3092\u505c\u6b62\u3057\u307e\u3057\u305f', 'info');\n      }\n    }\n\n    \/\/ ===== \u5171\u901aUI\/\u4fdd\u5b58 =====\n    function addLog(id, msg, type = 'info') {\n      const el = document.getElementById(id);\n      const ts = new Date().toLocaleTimeString('ja-JP');\n      const div = document.createElement('div');\n      const cls = { error: 'error-message', success: 'success-message', info: 'text-white opacity-90' }&#91;type] || 'text-white opacity-90';\n      div.className = cls;\n      div.innerHTML = `&lt;span class=\"opacity-75\">&#91;${ts}]&lt;\/span> ${escapeHtml(msg)}`;\n      if (el) {\n        el.appendChild(div);\n        el.scrollTop = el.scrollHeight;\n        while (el.children.length > 100) el.removeChild(el.firstChild);\n      }\n      try { console.log(`&#91;${ts}] ${msg}`); } catch(_) {}\n    }\n\n    function updateStatusIndicators() {\n      const botI = document.getElementById('bot-status');\n      const botT = document.getElementById('bot-status-text');\n      if (botI &amp;&amp; botT) {\n        const active = botInterval !== null;\n        botI.className = `status-indicator ${active ? 'status-active' : 'status-inactive'}`;\n        botT.textContent = active ? '\u52d5\u4f5c\u4e2d' : '\u505c\u6b62\u4e2d';\n      }\n      const rssI = document.getElementById('rss-status');\n      const rssT = document.getElementById('rss-status-text');\n      if (rssI &amp;&amp; rssT) {\n        const active = rssInterval !== null;\n        rssI.className = `status-indicator ${active ? 'status-active' : 'status-inactive'}`;\n        rssT.textContent = active ? '\u52d5\u4f5c\u4e2d' : '\u505c\u6b62\u4e2d';\n      }\n    }\n\n    function showSystemStatus() {\n      alert(\n`=== Verse \u30b7\u30b9\u30c6\u30e0\u30b9\u30c6\u30fc\u30bf\u30b9 ===\\n\u5168\u4f53\u6295\u7a3f\u6570: ${posts.length}\\nRSS\u767b\u9332\u6570: ${sharedRssFeeds.length}\\nBOT\u6295\u7a3f\u6570: ${posts.filter(p => &#91;'bot', 'markov'].includes(p.type)).length}\\n\\nBOT\u81ea\u52d5\u6295\u7a3f: ${botInterval ? '\u52d5\u4f5c\u4e2d' : '\u505c\u6b62\u4e2d'}\\nRSS\u81ea\u52d5\u6295\u7a3f: ${rssInterval ? '\u52d5\u4f5c\u4e2d' : '\u505c\u6b62\u4e2d'}`\n      );\n    }\n\n    function uploadProfileIcon(e) {\n      const f = e.target.files&#91;0];\n      if (!f) return;\n      if (f.size > 5 * 1024 * 1024) { alert('5MB\u4ee5\u4e0b\u306b\u3057\u3066\u304f\u3060\u3055\u3044\u3002'); return; }\n      const r = new FileReader();\n      r.onload = () => {\n        profile.icon = r.result;\n        saveProfileNoAlert();\n        updateAllUI();\n        alert('\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u753b\u50cf\u66f4\u65b0\uff01');\n      };\n      r.readAsDataURL(f);\n    }\n\n    function saveProfile() {\n      const un = document.getElementById('username').value.trim();\n      const si = document.getElementById('self-intro').value.trim();\n      if (un.length > 20) { alert('\u30e6\u30fc\u30b6\u30fc\u540d\u306f20\u6587\u5b57\u4ee5\u5185\u3067\u3002'); return; }\n      profile.username = un || '\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc';\n      profile.selfIntro = si;\n      saveProfileNoAlert();\n      updateAllUI();\n      alert('\u30d7\u30ed\u30d5\u30a3\u30fc\u30eb\u4fdd\u5b58\uff01');\n    }\n\n    function saveProfileNoAlert() {\n      users = JSON.parse(localStorage.getItem('verse_users') || '&#91;]');\n      const idx = users.findIndex(u => u.email === (currentUser &amp;&amp; currentUser.email));\n      if (idx >= 0) {\n        users&#91;idx].profile = profile;\n        localStorage.setItem('verse_users', JSON.stringify(users));\n      }\n    }\n\n    function updateAllUI() {\n      const pi = document.getElementById('profile-icon');\n      const hi = document.getElementById('header-profile-icon');\n      if (pi) pi.src = profile.icon;\n      if (hi) hi.src = profile.icon;\n      &#91;'username-preview','header-username'].forEach(id => {\n        const el = document.getElementById(id);\n        if (el) el.textContent = profile.username;\n      });\n      const sip = document.getElementById('self-intro-preview');\n      if (sip) sip.textContent = profile.selfIntro || '\u307e\u3060\u81ea\u5df1\u7d39\u4ecb\u304c\u3042\u308a\u307e\u305b\u3093';\n      const emailEl = document.getElementById('header-user-email');\n      if (emailEl &amp;&amp; currentUser) emailEl.textContent = currentUser.email;\n      renderTimeline();\n    }\n\n    function updateCharCount() {\n      const pc = document.getElementById('postContent');\n      const cc = document.getElementById('char-count');\n      if (pc &amp;&amp; cc) {\n        const l = pc.value.length;\n        cc.textContent = `(${l}\/500)`;\n        cc.style.color = l > 450 ? '#ef4444' : '';\n      }\n    }\n\n    function toggleDarkMode() {\n      isDarkMode = !isDarkMode;\n      if (isDarkMode) {\n        document.body.classList.add('dark');\n        document.body.style.background = 'linear-gradient(135deg, #1a202c 0%, #2d3748 100%)';\n      } else {\n        document.body.classList.remove('dark');\n        document.body.style.background = 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)';\n      }\n      localStorage.setItem('verse_darkMode', isDarkMode.toString());\n    }\n\n    function saveData() { localStorage.setItem('verse_posts', JSON.stringify(posts)); }\n\n    \/\/ \u5165\u529bUI\u30d5\u30c3\u30af\n    document.addEventListener('DOMContentLoaded', () => {\n      const pc = document.getElementById('postContent');\n      if (pc) {\n        pc.addEventListener('input', updateCharCount);\n        pc.addEventListener('keydown', e => { if (e.key === 'Enter' &amp;&amp; e.ctrlKey) { e.preventDefault(); createUserPost(); } });\n      }\n      const ui = document.getElementById('username');\n      if (ui) ui.addEventListener('input', () => {\n        const v = ui.value.trim() || '\u30b2\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc';\n        &#91;'username-preview','header-username'].forEach(id => {\n          const el = document.getElementById(id);\n          if (el) el.textContent = v;\n        });\n      });\n      const si = document.getElementById('self-intro');\n      if (si) si.addEventListener('input', () => {\n        const v = si.value.trim() || '\u307e\u3060\u81ea\u5df1\u7d39\u4ecb\u304c\u3042\u308a\u307e\u305b\u3093';\n        const el = document.getElementById('self-intro-preview');\n        if (el) el.textContent = v;\n      });\n    });\n\n    \/\/ \u7d42\u4e86\u51e6\u7406\u30fb\u30a8\u30e9\u30fc\n    window.addEventListener('beforeunload', () => { stopBotAutoPost(); stopRssAuto(); saveData(); });\n    window.addEventListener('error', e => { addLog('bot-log', `\u30b7\u30b9\u30c6\u30e0\u30a8\u30e9\u30fc: ${e.message}`, 'error'); });\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":[4,87],"tags":[41,3],"class_list":["post-26146","post","type-post","status-publish","format-standard","hentry","category-programming","category-web","tag-javascript","tag-programming"],"aioseo_notices":[],"jetpack_featured_media_url":"","_links":{"self":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/26146","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=26146"}],"version-history":[{"count":2,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/26146\/revisions"}],"predecessor-version":[{"id":26148,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=\/wp\/v2\/posts\/26146\/revisions\/26148"}],"wp:attachment":[{"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=26146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=26146"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.tyosuke20xx.com\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=26146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}