{"id":49223,"date":"2025-12-05T15:22:36","date_gmt":"2025-12-05T20:22:36","guid":{"rendered":"https:\/\/bitcoinmagazine.com\/?page_id=49223"},"modified":"2026-08-24T13:36:26","modified_gmt":"2026-08-24T18:36:26","slug":"video","status":"publish","type":"page","link":"https:\/\/bitcoinmagazine.com\/video","title":{"rendered":"Video"},"content":{"rendered":"<div id=\"tdi_1\" class=\"tdc-zone\"><div class=\"tdc_zone tdi_2  wpb_row td-pb-row\"  >\n<style scoped>\n\/* custom css - generated by TagDiv Composer *\/\n\n\/* custom css - generated by TagDiv Composer *\/\n.tdi_2{\r\n                    min-height: 0;\r\n                }\n<\/style><div id=\"tdi_3\" class=\"tdc-row stretch_row_content td-stretch-content\"><div class=\"vc_row tdi_4  wpb_row td-pb-row tdc-element-style\" >\n<style scoped>\n\/* custom css - generated by TagDiv Composer *\/\n\n\/* custom css - generated by TagDiv Composer *\/\n.tdi_4,\r\n                .tdi_4 .tdc-columns{\r\n                    min-height: 0;\r\n                }.tdi_4,\r\n\t\t\t\t.tdi_4 .tdc-columns{\r\n\t\t\t\t    display: block;\r\n\t\t\t\t}.tdi_4 .tdc-columns{\r\n\t\t\t\t    width: 100%;\r\n\t\t\t\t}.tdi_4:before,\r\n\t\t\t\t.tdi_4:after{\r\n\t\t\t\t    display: table;\r\n\t\t\t\t}\n\/* inline tdc_css att - generated by TagDiv Composer *\/\n\n.tdi_4{\n--tdb-scroll-anim:none !important;\nposition:relative;\n}\n\n.tdi_4 .td_block_wrap{ text-align:left }\n\n<\/style>\n<div class=\"tdi_3_rand_style td-element-style\" ><style>\n\/* custom css - generated by TagDiv Composer *\/\n\n.tdi_3_rand_style{\nbackground-color:#000000 !important;\n}\n <\/style><\/div><div class=\"vc_column tdi_6  wpb_column vc_column_container tdc-column td-pb-span12\">\n<style scoped>\n\/* custom css - generated by TagDiv Composer *\/\n\n\/* custom css - generated by TagDiv Composer *\/\n.tdi_6{\r\n                    vertical-align: baseline;\r\n                }.tdi_6 > .wpb_wrapper,\r\n\t\t\t\t.tdi_6 > .wpb_wrapper > .tdc-elements{\r\n\t\t\t\t    display: block;\r\n\t\t\t\t}.tdi_6 > .wpb_wrapper > .tdc-elements{\r\n\t\t\t\t    width: 100%;\r\n\t\t\t\t}.tdi_6 > .wpb_wrapper > .vc_row_inner{\r\n\t\t\t\t    width: auto;\r\n\t\t\t\t}.tdi_6 > .wpb_wrapper{\r\n\t\t\t\t    width: auto;\r\n\t\t\t\t    height: auto;\r\n\t\t\t\t}\n<\/style><div class=\"wpb_wrapper\" ><div class=\"wpb_wrapper td_block_wrap vc_raw_html tdi_8 \"><div class=\"td-fix-index\"><div id=\"yt-custom-root\" style=\"background-color: #000000 !important; color: #ffffff !important; font-family: Roboto, Arial, sans-serif !important; padding: 40px 15px 120px !important; min-height: 100vh !important; width: 100% !important; box-sizing: border-box !important; position: relative !important; z-index: 1 !important;\">\n\n  <!-- SEO Text -->\n  <div style=\"text-align:center;margin-bottom:30px;max-width:900px;margin-left:auto;margin-right:auto;\">\n    <h1 style=\"font-size:24px;font-weight:700;margin:0 0 20px;color:#ffffff !important;line-height:1.3;\">\n      Subscribe to the Bitcoin Magazine YouTube channel for Bitcoin news, expert market insights, and exclusive keynotes and panels from the world\u2019s largest Bitcoin conference.\n    <\/h1>\n  <\/div>\n\n  <!-- Subscribe Buttons -->\n  <div style=\"text-align:center;margin-bottom:70px;\">\n    <div style=\"display:flex;justify-content:center;gap:30px;flex-wrap:wrap;\">\n      <a href=\"https:\/\/www.youtube.com\/channel\/UCtOV5M-T3GcsJAq8QKaf0lg?sub_confirmation=1\" target=\"_blank\" class=\"yt-sub-btn\" rel=\"noopener\">\n        Subscribe to Bitcoin Magazine\n      <\/a>\n    <\/div>\n  <\/div>\n\n  <!-- Search Input -->\n  <div style=\"text-align:center;margin:0 auto 70px;max-width:600px;\">\n    <input type=\"text\" id=\"yt-search-input\" placeholder=\"Search all videos...\" style=\"width:100%;padding:18px 32px;font-size:18px;border-radius:50px;background:#111111;border:1px solid #333;outline:none;color:#ffffff;\">\n  <\/div>\n\n  <!-- Status \/ Loading -->\n  <div id=\"yt-status-msg\" style=\"text-align:center;padding:80px 0;font-size:20px;color:#aaaaaa;\">\n    Loading videos from YouTube...\n  <\/div>\n\n  <!-- Grid Container -->\n  <div id=\"yt-grid-container\" style=\"display:grid;gap:26px;max-width:1600px;margin:0 auto;\"><\/div>\n\n  <!-- Bottom Message -->\n  <div style=\"text-align:center;margin:100px 0 60px;\">\n    <p style=\"font-size:20px;margin:0 0 30px;color:#ffffff !important;line-height:1.4;\">\n      To view our extensive full video archive and stay informed on future content, please subscribe to our YouTube Channel.\n    <\/p>\n    <div style=\"display:flex;justify-content:center;gap:30px;flex-wrap:wrap;\">\n      <a href=\"https:\/\/www.youtube.com\/channel\/UCtOV5M-T3GcsJAq8QKaf0lg?sub_confirmation=1\" target=\"_blank\" class=\"yt-sub-btn\" rel=\"noopener\">\n        Subscribe to Bitcoin Magazine\n      <\/a>\n    <\/div>\n  <\/div>\n\n<\/div>\n\n<style>\n  #yt-custom-root, \n  #yt-custom-root * { \n    box-sizing: border-box; \n  }\n  \n  #yt-search-input::placeholder { color: #888888; opacity: 1; }\n\n  #yt-custom-root h1 { font-size: 20px; }\n  @media (max-width: 768px) { #yt-custom-root h1 { font-size: 14px; line-height: 1.4; } }\n\n  .yt-sub-btn {\n    padding: 18px 40px;\n    background: #F86800 !important;\n    color: #ffffff !important;\n    font-size: 18px;\n    font-weight: 600;\n    border-radius: 50px;\n    text-decoration: none !important;\n    box-shadow: 0 12px 40px rgba(248,104,0,.7);\n    transition: all .3s;\n    min-width: 260px;\n    display: inline-block;\n  }\n  .yt-sub-btn:hover {\n    transform: translateY(-5px);\n    box-shadow: 0 20px 50px rgba(248,104,0,.9);\n  }\n\n  #yt-grid-container { grid-template-columns: repeat(4, 1fr); }\n  @media(max-width:1200px){ #yt-grid-container { grid-template-columns: repeat(3, 1fr); } }\n  @media(max-width:900px){ #yt-grid-container { grid-template-columns: repeat(2, 1fr); } }\n  @media(max-width:640px){ #yt-grid-container { grid-template-columns: 1fr; } }\n\n  .yt-card {\n    background: #111111;\n    border-radius: 20px;\n    overflow: hidden;\n    cursor: pointer;\n    transition: transform .4s, box-shadow .4s;\n    box-shadow: 0 4px 15px rgba(0,0,0,.3);\n  }\n  .yt-card:hover {\n    transform: translateY(-12px);\n    box-shadow: 0 25px 60px rgba(248,104,0,.7);\n  }\n  .yt-card img { width: 100%; display: block; height: auto; }\n  .yt-card-body { padding: 16px; }\n  .yt-card-title { font-weight: 600; font-size: 16px; line-height: 1.35; color: #ffffff; margin-bottom: 8px; }\n  .yt-card-meta { font-size: 13px; color: #aaaaaa; }\n<\/style>\n\n<script>\n(function() {\n  var API_KEY = \"AIzaSyD5f71jseELIUiD-YAq47kELWssy73MkXM\";\n  var CHANNEL_ID = \"UCtOV5M-T3GcsJAq8QKaf0lg\";\n  var allVideos = [];\n\n  function fetchYouTubeData() {\n    var statusEl = document.getElementById(\"yt-status-msg\");\n    var channelUrl = \"https:\/\/youtube.googleapis.com\/youtube\/v3\/channels?part=contentDetails&id=\" + CHANNEL_ID + \"&key=\" + API_KEY;\n\n    fetch(channelUrl)\n      .then(function(res) { return res.json(); })\n      .then(function(data) {\n        if (!data.items || data.items.length === 0) {\n          throw new Error(data.error ? data.error.message : \"Invalid Channel ID or API Key issue.\");\n        }\n        var uploadsPlaylistId = data.items[0].contentDetails.relatedPlaylists.uploads;\n        var playlistUrl = \"https:\/\/youtube.googleapis.com\/youtube\/v3\/playlistItems?part=snippet&maxResults=50&playlistId=\" + uploadsPlaylistId + \"&key=\" + API_KEY;\n        return fetch(playlistUrl);\n      })\n      .then(function(res) { return res.json(); })\n      .then(function(data) {\n        if (!data.items) {\n          throw new Error(data.error ? data.error.message : \"Could not retrieve videos.\");\n        }\n\n        var videoIds = [];\n        var tempVideosMap = {};\n\n        data.items.forEach(function(item) {\n          var snip = item.snippet;\n          if (snip && snip.thumbnails && snip.thumbnails.medium) {\n            var vId = snip.resourceId.videoId;\n            var title = snip.title;\n\n            \/\/ Basic Title Filter: Exclude titles containing #shorts or #short\n            if (!\/#shorts?\/i.test(title)) {\n              videoIds.push(vId);\n              tempVideosMap[vId] = {\n                id: vId,\n                title: title,\n                thumb: snip.thumbnails.medium.url,\n                date: snip.publishedAt,\n                channel: snip.videoOwnerChannelTitle || \"Bitcoin Magazine\"\n              };\n            }\n          }\n        });\n\n        if (videoIds.length === 0) {\n          if (statusEl) statusEl.style.display = \"none\";\n          renderCards([]);\n          return;\n        }\n\n        \/\/ Fetch details for duration verification (removes Shorts < 60s)\n        var detailsUrl = \"https:\/\/youtube.googleapis.com\/youtube\/v3\/videos?part=contentDetails&id=\" + videoIds.join(\",\") + \"&key=\" + API_KEY;\n        return fetch(detailsUrl).then(function(res) { return res.json(); }).then(function(detailsData) {\n          if (detailsData.items) {\n            detailsData.items.forEach(function(vidDetail) {\n              var duration = vidDetail.contentDetails.duration; \/\/ ISO 8601 format\n              \n              \/\/ Exclude videos with 'PT' followed only by seconds (e.g., PT45S, PT59S) or under 1 minute\n              var isShortDuration = \/^PT\\d+S$\/i.test(duration) || \/^PT0M\/i.test(duration);\n\n              if (!isShortDuration && tempVideosMap[vidDetail.id]) {\n                allVideos.push(tempVideosMap[vidDetail.id]);\n              }\n            });\n          } else {\n            \/\/ Fallback if details query fails: use title-filtered videos\n            allVideos = Object.keys(tempVideosMap).map(function(k) { return tempVideosMap[k]; });\n          }\n\n          if (statusEl) statusEl.style.display = \"none\";\n          renderCards(allVideos);\n        });\n      })\n      .catch(function(err) {\n        console.error(\"YouTube Error: \", err);\n        if (statusEl) {\n          statusEl.innerHTML = \"<span style='color:#ff5555;'>Failed to load videos.<\/span><br><small style='font-size:14px;color:#888;'>\" + err.message + \"<\/small>\";\n        }\n      });\n  }\n\n  function renderCards(videos) {\n    var grid = document.getElementById(\"yt-grid-container\");\n    if (!grid) return;\n    \n    grid.innerHTML = \"\";\n\n    videos.slice(0, 40).forEach(function(v) {\n      var card = document.createElement(\"div\");\n      card.className = \"yt-card\";\n      card.innerHTML = \n        '<img decoding=\"async\" src=\"' + v.thumb + '\" loading=\"lazy\" alt=\"thumbnail\">' +\n        '<div class=\"yt-card-body\">' +\n          '<div class=\"yt-card-title\">' + v.title + '<\/div>' +\n          '<div class=\"yt-card-meta\">' + getTimeAgo(v.date) + ' \u2022 ' + v.channel + '<\/div>' +\n        '<\/div>';\n      \n      card.onclick = function() { openModal(v.id); };\n      grid.appendChild(card);\n    });\n  }\n\n  function getTimeAgo(dateStr) {\n    var sec = Math.floor((Date.now() - new Date(dateStr)) \/ 1000);\n    if (sec < 3600) return Math.floor(sec \/ 60) + \"m ago\";\n    if (sec < 86400) return Math.floor(sec \/ 3600) + \"h ago\";\n    if (sec < 2592000) return Math.floor(sec \/ 86400) + \"d ago\";\n    return Math.floor(sec \/ 2592000) + \"mo ago\";\n  }\n\n  function openModal(id) {\n    var overlay = document.createElement(\"div\");\n    overlay.style.cssText = \"position:fixed;top:0;left:0;width:100vw;height:100vh;background:rgba(0,0,0,0.95);display:flex;align-items:center;justify-content:center;z-index:999999;\";\n    overlay.innerHTML = \n      '<div style=\"position:relative;width:90%;max-width:1100px;\">' +\n        '<iframe src=\"https:\/\/www.youtube.com\/embed\/' + id + '?autoplay=1&rel=0\" frameborder=\"0\" allowfullscreen style=\"width:100%;aspect-ratio:16\/9;\"><\/iframe>' +\n        '<button id=\"close-yt-modal\" style=\"position:absolute;top:-55px;right:0;background:none;border:none;color:#fff;font-size:45px;cursor:pointer;line-height:1;\">&times;<\/button>' +\n      '<\/div>';\n\n    document.body.appendChild(overlay);\n    document.getElementById(\"close-yt-modal\").onclick = function() {\n      overlay.remove();\n    };\n  }\n\n  \/\/ Search filter listener\n  document.addEventListener(\"input\", function(e) {\n    if (e.target && e.target.id === \"yt-search-input\") {\n      var query = e.target.value.toLowerCase();\n      var filtered = allVideos.filter(function(v) {\n        return v.title.toLowerCase().indexOf(query) !== -1;\n      });\n      renderCards(filtered);\n    }\n  });\n\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", fetchYouTubeData);\n  } else {\n    fetchYouTubeData();\n  }\n})();\n<\/script><\/div><\/div><div class=\"td_block_wrap td_block_raw_css tdi_9 td-pb-border-top td_block_template_1\"  data-td-block-uid=\"tdi_9\" ><div id=tdi_9 class=\"td_block_inner td-fix-index\"><style>.td-crumb-container > .entry-crumbs,\n.td-page-title,\nspan.td-bred-no-url-last,\n.entry-crumbs {\n  display: none !important;\n}\n<\/style><\/div><\/div><\/div><\/div><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":5,"featured_media":41001,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"categories":[],"class_list":["post-49223","page","type-page","status-publish","has-post-thumbnail"],"_links":{"self":[{"href":"https:\/\/bitcoinmagazine.com\/wp-json\/wp\/v2\/pages\/49223","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bitcoinmagazine.com\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bitcoinmagazine.com\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bitcoinmagazine.com\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/bitcoinmagazine.com\/wp-json\/wp\/v2\/comments?post=49223"}],"version-history":[{"count":3,"href":"https:\/\/bitcoinmagazine.com\/wp-json\/wp\/v2\/pages\/49223\/revisions"}],"predecessor-version":[{"id":54318,"href":"https:\/\/bitcoinmagazine.com\/wp-json\/wp\/v2\/pages\/49223\/revisions\/54318"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/bitcoinmagazine.com\/wp-json\/wp\/v2\/media\/41001"}],"wp:attachment":[{"href":"https:\/\/bitcoinmagazine.com\/wp-json\/wp\/v2\/media?parent=49223"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bitcoinmagazine.com\/wp-json\/wp\/v2\/categories?post=49223"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}