jojoa

빠르고 정확하게. 세상 모든 정보를 한 곳에서 검색하세요.

오늘 날씨 부산 맛집 최신 뉴스 파이썬 튜토리얼 주식 시황
about

심플한 시작 페이지

외부 검색 API와 캐시를 활용해 빠르게 검색 결과를 제공합니다. 로그인하면 단축키를 클라우드에 저장할 수 있습니다.

🔎

웹 검색

검색 캐시 오류가 있어도 검색이 멈추지 않도록 안전하게 처리했습니다.

빠른 접근

자주 가는 사이트를 단축키로 등록해 첫 화면에서 바로 이동할 수 있습니다.

☁️

로그인 연동

Firebase 연결 시 로그인과 단축키 동기화를 함께 사용할 수 있습니다.

단축키 관리

아이콘
🏠
💬
🎵
📺
🛒
색상
추천 단축키
계정
로그인 후 단축키를 동기화할 수 있습니다.
또는
async function searchDuckDuckGo(query) { try { // CORS 문제를 해결하기 위해 allorigins 프록시를 사용합니다. const proxyUrl = "https://api.allorigins.win/get?url="; const targetUrl = `https://html.duckduckgo.com/html/?q=${encodeURIComponent(query)}`; const response = await fetch(proxyUrl + encodeURIComponent(targetUrl)); if (!response.ok) throw new Error(`HTTP ${response.status}`); const data = await response.json(); const parser = new DOMParser(); const doc = parser.parseFromString(data.contents, "text/html"); // DuckDuckGo HTML 버전의 결과 클래스(.result)를 탐색합니다. const resultElements = doc.querySelectorAll('.result'); const results = []; resultElements.forEach(el => { const titleEl = el.querySelector('.result__title a'); const snippetEl = el.querySelector('.result__snippet'); if (titleEl) { let rawUrl = titleEl.getAttribute('href'); // DuckDuckGo의 리다이렉트 URL에서 실제 주소를 추출합니다. let cleanUrl = rawUrl; if (rawUrl.includes('uddg=')) { cleanUrl = decodeURIComponent(rawUrl.split('uddg=')[1].split('&')[0]); } else if (rawUrl.startsWith('//')) { cleanUrl = 'https:' + rawUrl; } results.push({ title: titleEl.innerText.trim(), url: cleanUrl, content: snippetEl ? snippetEl.innerText.trim() : "설명이 없습니다." }); } }); return results; } catch (error) { console.error('실제 검색 결과 추출 실패:', error); return []; } }