๐Ÿ› ️ [์ตœ์ข… ๊ฐ€์ด๋“œ] ๋ธ”๋กœ๊ทธ์ŠคํŒŸ(Blogger)์— Google ํŠธ๋ Œ๋“œ ์Šคํฌ๋กค ๋‰ด์Šค ํ‹ฐ์ปค ์‚ฝ์ž…ํ•˜๊ธฐ

๐Ÿ› ️ [์ตœ์ข… ๊ฐ€์ด๋“œ] ๋ธ”๋กœ๊ทธ์ŠคํŒŸ(Blogger)์— Google ํŠธ๋ Œ๋“œ ์Šคํฌ๋กค ๋‰ด์Šค ํ‹ฐ์ปค ์‚ฝ์ž…ํ•˜๊ธฐ

๐Ÿ“Œ ๋…ธ๋™ ์—†์ด ์ƒ๋‹จ ์˜์—ญ์„ '์‹ค์‹œ๊ฐ„ ํŠธ๋ Œ๋“œ'๋กœ ์ฑ„์šฐ๋Š” ๋ฒ•

Google ํŠธ๋ Œ๋“œ ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰์–ด(RSS ํ”ผ๋“œ)๋ฅผ ๋ธ”๋กœ๊ทธ ์ƒ๋‹จ์— ํ˜๋Ÿฌ๊ฐ€๊ฒŒ ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์€ ๋…์ž์˜ ์‹œ์„ ์„ ์‚ฌ๋กœ์žก๊ณ  ์‹œ์˜์„ฑ ์žˆ๋Š” ์ฃผ์ œ๋กœ ํŠธ๋ž˜ํ”ฝ์„ ์œ ๋„ํ•˜๋Š” ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

์ด ๊ฐ€์ด๋“œ๋Š” ๋ณต์žกํ•œ API ์—ฐ๋™ ์—†์ด, ๋ธ”๋กœ๊ทธ์ŠคํŒŸ์˜ HTML/JavaScript ์œ„์ ฏ๊ณผ ๋งž์ถคํ˜• CSS/JS ์ฝ”๋“œ๋งŒ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒ๋‹จ์— ์ „๋ฌธ์ ์ธ ๋‰ด์Šค ํ‹ฐ์ปค(Ticker)๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ตœ์ข… ์ ˆ์ฐจ์ž…๋‹ˆ๋‹ค.

์ค€๋น„๋ฌผ๋‚ด์šฉ
RSS ํ”ผ๋“œ URL๋Œ€ํ•œ๋ฏผ๊ตญ ์ผ๋ณ„ ์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด RSS ์ฃผ์†Œ: https://trends.google.com/trends/trendingsearches/daily/rss?geo=KR
ํ•ต์‹ฌ ๊ธฐ์ˆ HTML (๊ตฌ์กฐ) + CSS (๋ชจ์–‘) + JavaScript (๋ถ€๋“œ๋Ÿฌ์šด ์Šคํฌ๋กค)

1๋‹จ๊ณ„: CSS ์ฝ”๋“œ ์‚ฝ์ž… (์Šคํฌ๋กค๋ฐ”์˜ ๋ชจ์–‘๊ณผ ํ‹€ ์žก๊ธฐ)

์Šคํฌ๋กค๋ฐ”์˜ ๋””์ž์ธ๊ณผ ์• ๋‹ˆ๋ฉ”์ด์…˜ ํ‹€์„ ์žก๋Š” CSS ์ฝ”๋“œ๋ฅผ ๋ธ”๋กœ๊ทธ์ŠคํŒŸ ํ…Œ๋งˆ์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

  1. [๋ธ”๋กœ๊ทธ์ŠคํŒŸ ๊ด€๋ฆฌ][ํ…Œ๋งˆ] → **[HTML ์ˆ˜์ •]**์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. <b:skin> ํƒœ๊ทธ ๋‚ด๋ถ€ ๋˜๋Š” </head> ํƒœ๊ทธ ์œ„์— ๋‹ค์Œ CSS ์ฝ”๋“œ๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

CSS
/* ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰์–ด ์Šคํฌ๋กค๋ฐ” CSS */
.trending-ticker-wrap {
    display: flex; 
    align-items: center; 
    height: 35px; /* ๋†’์ด ์„ค์ • */
    background-color: #f7f7f7; /* ๋ฐฐ๊ฒฝ์ƒ‰ */
    padding: 0 15px;
    overflow: hidden; /* **ํ•„์ˆ˜**: ๋„˜์น˜๋Š” ๋‚ด์šฉ ์ˆจ๊น€ */
    border-bottom: 1px solid #ddd; 
    margin-bottom: 20px; 
}

.trending-ticker-wrap span {
    font-weight: bold;
    color: #e60000; /* ๊ฐ•์กฐ ์ƒ‰์ƒ */
    margin-right: 15px;
    flex-shrink: 0; 
}

#scrolling-keywords {
    width: 100%;
    overflow: hidden; 
    position: relative;
}

#scrolling-keywords ul {
    list-style: none;
    margin: 0;
    padding: 0;
    white-space: nowrap; /* ์ค„ ๋ฐ”๊ฟˆ ๋ฐฉ์ง€ */
    /* JS๊ฐ€ transform์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. CSS ์• ๋‹ˆ๋ฉ”์ด์…˜์€ ์—ฌ๊ธฐ์„œ ์ œ๊ฑฐ๋ฉ๋‹ˆ๋‹ค. */
    cursor: pointer; 
}

#scrolling-keywords li {
    display: inline-block;
    margin-right: 30px;
}

#scrolling-keywords a {
    text-decoration: none;
    color: #333;
    font-size: 14px;
}
  1. ์šฐ์ธก ์ƒ๋‹จ์˜ [์ €์žฅ] ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ CSS ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.


2๋‹จ๊ณ„: HTML ๊ตฌ์กฐ ๋ฐ JavaScript ์ฝ”๋“œ ์‚ฝ์ž… (๋ฐ์ดํ„ฐ์™€ ์›€์ง์ž„ ๊ตฌํ˜„)

์ด ๋‹จ๊ณ„์—์„œ๋Š” HTML ๊ตฌ์กฐ์™€ ์Šคํฌ๋กค๋ง์„ ๋‹ด๋‹นํ•  JS ์ฝ”๋“œ๋ฅผ HTML/JavaScript ์œ„์ ฏ ํ•˜๋‚˜์— ๋ชจ๋‘ ๋„ฃ์Šต๋‹ˆ๋‹ค.

  1. [๋ธ”๋กœ๊ทธ์ŠคํŒŸ ๊ด€๋ฆฌ] [๋ ˆ์ด์•„์›ƒ]์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. ์Šคํฌ๋กค๋ฐ”๋ฅผ ์œ„์น˜์‹œํ‚ฌ ์˜์—ญ(์˜ˆ: 'Header' ์•„๋ž˜)์—์„œ [๊ฐ€์ ฏ ์ถ”๊ฐ€]๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

  3. ๋ชฉ๋ก์—์„œ [HTML/JavaScript]๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

  4. ์œ„์ ฏ ์„ค์ • ์ฐฝ์˜ '์ฝ˜ํ…์ธ ' ์˜์—ญ์— ๋‹ค์Œ HTML ๋ฐ JS ์ฝ”๋“œ ์ „์ฒด๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.

๐Ÿ“œ HTML ๋ฐ JavaScript ์ฝ”๋“œ

HTML
<div class="trending-ticker-wrap">
    <span>๐Ÿ“ˆ Google ์‹ค์‹œ๊ฐ„ ํŠธ๋ Œ๋“œ</span>
    <div id="scrolling-keywords">
        <ul>
            <li><a href="https://www.google.com/search?q=ํ‚ค์›Œ๋“œ1" target="_blank">์˜ค๋Š˜์˜ ํƒ‘ ์ฃผ์ œ 1</a></li>
            <li><a href="https://www.google.com/search?q=ํ‚ค์›Œ๋“œ2" target="_blank">Google ํŠธ๋ Œ๋“œ 2์œ„</a></li>
            <li><a href="https://www.google.com/search?q=ํ‚ค์›Œ๋“œ3" target="_blank">์ธ๊ธฐ ํ‚ค์›Œ๋“œ 3์œ„ (์ตœ์‹ )</a></li>
            <li><a href="https://www.google.com/search?q=ํ‚ค์›Œ๋“œ4" target="_blank">๊ธ‰์ƒ์Šน ์ด์Šˆ ํ‚ค์›Œ๋“œ</a></li>
            <li><a href="https://www.google.com/search?q=ํ‚ค์›Œ๋“œ5" target="_blank">์ถ”๊ฐ€ ์ธ๊ธฐ ๊ฒ€์ƒ‰์–ด</a></li>
            </ul>
    </div>
</div>

<script>
    function startTickerScroll() {
        const scrollContainer = document.getElementById('scrolling-keywords');
        if (!scrollContainer) return;

        const ul = scrollContainer.querySelector('ul');
        if (!ul) return;

        // 1. ๋ฆฌ์ŠคํŠธ ๋‚ด์šฉ ๋ณต์ œ (๋Š๊น€ ์—†๋Š” ๋ฃจํ”„๋ฅผ ์œ„ํ•จ)
        ul.innerHTML += ul.innerHTML;

        let position = 0;
        // ์Šคํฌ๋กค ์†๋„ ์„ค์ • (์ˆซ์ž๊ฐ€ ์ž‘์„์ˆ˜๋ก ๋А๋ฆฌ๊ณ  ๋ถ€๋“œ๋Ÿฌ์›€)
        const scrollSpeed = 0.5;
        
        // ์›๋ณธ ์ฝ˜ํ…์ธ ์˜ ๋„ˆ๋น„ ๊ณ„์‚ฐ
        const totalContentWidth = ul.scrollWidth / 2;

        function scrollTick() {
            // 2. ์ฝ˜ํ…์ธ ๋ฅผ ์™ผ์ชฝ์œผ๋กœ ์ด๋™
            position -= scrollSpeed;
            
            // 3. ๋ฃจํ”„ ์ฒ˜๋ฆฌ: ์›๋ณธ ๋ชฉ๋ก์ด ์ง€๋‚˜๊ฐ€๋ฉด ์œ„์น˜ ๋ฆฌ์…‹
            if (position < -totalContentWidth) {
                position += totalContentWidth; 
            }
            
            // CSS Transform์œผ๋กœ ์œ„์น˜ ๋ณ€๊ฒฝ (๋ถ€๋“œ๋Ÿฌ์šด ์• ๋‹ˆ๋ฉ”์ด์…˜)
            ul.style.transform = `translateX(${position}px)`;

            requestAnimationFrame(scrollTick);
        }

        // ๋งˆ์šฐ์Šค ์˜ค๋ฒ„ ์‹œ ๋ฉˆ์ถค, ๋งˆ์šฐ์Šค ์•„์›ƒ ์‹œ ๋‹ค์‹œ ์‹œ์ž‘ (UX ๊ฐœ์„ )
        scrollContainer.addEventListener('mouseenter', () => {
            ul.style.animationPlayState = 'paused';
        });
        scrollContainer.addEventListener('mouseleave', () => {
            ul.style.animationPlayState = 'running';
        });

        // ์• ๋‹ˆ๋ฉ”์ด์…˜ ์‹œ์ž‘
        requestAnimationFrame(scrollTick);
    }

    // ํŽ˜์ด์ง€ ๋กœ๋“œ ํ›„ ์‹คํ–‰ ๋ณด์žฅ
    if (document.readyState === 'loading') {
        window.addEventListener('load', startTickerScroll);
    } else {
        startTickerScroll();
    }
</script>
  1. [์ €์žฅ] ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜์—ฌ ์œ„์ ฏ์„ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.


3๋‹จ๊ณ„: ์ตœ์ข… ํ™•์ธ ๋ฐ ๋ฐ์ดํ„ฐ ๊ด€๋ฆฌ

  1. [๋ ˆ์ด์•„์›ƒ] ํŽ˜์ด์ง€์—์„œ ์œ„์ ฏ์ด ์›ํ•˜๋Š” ์ƒ๋‹จ ์œ„์น˜์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ , [์ €์žฅ]์„ ๋ˆŒ๋Ÿฌ ์ตœ์ข… ๋ฐฐ์น˜ํ•ฉ๋‹ˆ๋‹ค.

  2. ๋ธ”๋กœ๊ทธ๋ฅผ ์ƒˆ๋กœ๊ณ ์นจํ•˜์—ฌ ์Šคํฌ๋กค๋˜๋Š” ๋‰ด์Šค ํ‹ฐ์ปค๊ฐ€ ๋Š๊น€ ์—†์ด ๋ถ€๋“œ๋Ÿฝ๊ฒŒ ์›€์ง์ด๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

⚠️ ํ•ต์‹ฌ ๊ด€๋ฆฌ ๋ฃจํ‹ด: ๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ

์ด ์‹œ์Šคํ…œ์€ JavaScript๋กœ ์Šคํฌ๋กค๋ง ํšจ๊ณผ๋งŒ ์ž๋™ํ™”ํ•˜๋ฉฐ, ํŠธ๋ Œ๋“œ ๋ฐ์ดํ„ฐ๋Š” ์ž๋™ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๊ด€๋ฆฌ ์ฃผ๊ธฐ: ๋งค์ผ ๋˜๋Š” 2~3์ผ์— ํ•œ ๋ฒˆ์”ฉ https://trends.google.com/trends/trendingsearches/daily/rss?geo=KR RSS ํ”ผ๋“œ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

  • ์—…๋ฐ์ดํŠธ: 2๋‹จ๊ณ„์—์„œ ์‚ฝ์ž…ํ–ˆ๋˜ HTML/JavaScript ์œ„์ ฏ์œผ๋กœ ๋Œ์•„๊ฐ€์„œ <ul> ๋ชฉ๋ก ์•ˆ์˜ ํ‚ค์›Œ๋“œ์™€ ๋งํฌ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์ˆ˜์ •ํ•ด ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

#๊ฐ€๋‚˜ ํˆฌ๋ฐ์ด #ganatoday

๊ทธ๋ฆฐ์•„ํ”„๋กœ

์ธ๊ธฐ ๊ธ€

prfparkst

๋ฒ„ํ‚ท๋ฆฌ์ŠคํŠธ, ๊ฑธ์–ด์„œ122๊ฐœ๊ตญ์—ฌํ–‰, ์ฑ—์ง€ํ”ผํ‹ฐ, ์• ๋“œ์„ผ์Šค,๋ธ”๋กœ๊ทธ,์‹œ๋‚˜๋ฆฌ์˜ค,์ˆ์ธ 

๋Œ“๊ธ€ ์“ฐ๊ธฐ

๋‹ค์Œ ์ด์ „