{"id":17,"date":"2025-11-28T11:49:30","date_gmt":"2025-11-28T11:49:30","guid":{"rendered":"https:\/\/reisekupp.no\/?page_id=17"},"modified":"2025-11-28T14:49:11","modified_gmt":"2025-11-28T14:49:11","slug":"velkommen-til-reisekupp-no","status":"publish","type":"page","link":"https:\/\/reisekupp.no\/","title":{"rendered":""},"content":{"rendered":"\n<p><strong>Reisekupp.no lanseres i 2026<\/strong><\/p>\n\n\n\n<p>Reisekupp kan v\u00e6re mange ting, men fellesnevneren er f\u00f8lelsen av \u00e5 finne <strong>ferie<\/strong>, <strong>hotell<\/strong> og <strong>flyreiser<\/strong> til en pris som nesten virker for god til \u00e5 v\u00e6re sann. Det handler om \u00e5 lete litt smartere, sammenligne alternativer og ha \u00f8ynene \u00e5pne for uventede muligheter. I en tid hvor reiser ofte kan bli dyre, gir reisekuppene oss sjansen til \u00e5 oppleve verden uten \u00e5 t\u00f8mme lommeboken.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"686\" src=\"https:\/\/reisekupp.no\/wp-content\/uploads\/2025\/11\/reisekupp.no_-1024x686.jpg\" alt=\"Ferie og reise\" class=\"wp-image-14\" srcset=\"https:\/\/reisekupp.no\/wp-content\/uploads\/2025\/11\/reisekupp.no_-1024x686.jpg 1024w, https:\/\/reisekupp.no\/wp-content\/uploads\/2025\/11\/reisekupp.no_-300x201.jpg 300w, https:\/\/reisekupp.no\/wp-content\/uploads\/2025\/11\/reisekupp.no_-768x514.jpg 768w, https:\/\/reisekupp.no\/wp-content\/uploads\/2025\/11\/reisekupp.no_.jpg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Et reisekupp kan v\u00e6re en restplass til solfylte <strong>Gran Canaria<\/strong>, der du f\u00e5r en uke p\u00e5 et hyggelig hotell med basseng for en br\u00f8kdel av normal pris. Det kan ogs\u00e5 v\u00e6re en ekstra billig flyreise til <strong>Barcelona<\/strong>, hvor du f\u00e5r muligheten til \u00e5 nyte tapas, arkitektur og strandliv uten \u00e5 betale premium for reisen. Eller kanskje frister en helgetur til <strong>Berlin<\/strong>, kjent for kultur, historie og pulserende uteliv \u2013 perfekt n\u00e5r flybillettene plutselig koster mindre enn en middag hjemme.<\/p>\n\n\n\n<p>Noen reisende finner reisekupp ved \u00e5 v\u00e6re fleksible med datoer og destinasjoner. Andre jakter aktivt p\u00e5 kampanjer, rabatter og sesongtilbud. Det finnes ogs\u00e5 de som f\u00f8lger med p\u00e5 prisvarsler for flyreiser, sammenligner ulike hotellportaler eller bruker pakkereiser for \u00e5 sikre seg den beste totalprisen. Uansett metode handler det om \u00e5 kombinere litt innsats med litt flaks.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"682\" src=\"https:\/\/reisekupp.no\/wp-content\/uploads\/2025\/11\/reisekupp-barcelona-1024x682.jpg\" alt=\"\" class=\"wp-image-64\" srcset=\"https:\/\/reisekupp.no\/wp-content\/uploads\/2025\/11\/reisekupp-barcelona-1024x682.jpg 1024w, https:\/\/reisekupp.no\/wp-content\/uploads\/2025\/11\/reisekupp-barcelona-300x200.jpg 300w, https:\/\/reisekupp.no\/wp-content\/uploads\/2025\/11\/reisekupp-barcelona-768x512.jpg 768w, https:\/\/reisekupp.no\/wp-content\/uploads\/2025\/11\/reisekupp-barcelona.jpg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>En av fordelene med \u00e5 jakte reisekupp er at man ofte ender opp med \u00e5 oppdage nye steder. Kanskje er det et tilbud p\u00e5 hotell i <strong>Praha<\/strong> som gj\u00f8r at du plutselig bestemmer deg for \u00e5 dra dit \u2013 og oppdager at det er en av Europas mest stemningsfulle byer. Eller kanskje du kommer over rimelige flyreiser til <strong>Athen<\/strong>, og finner ut at kombinasjonen av historie, sol og gresk mat er akkurat det du trenger.<\/p>\n\n\n\n<p>For mange er jakten p\u00e5 det beste reisekuppet nesten en del av opplevelsen. Det gir en egen tilfredsstillelse \u00e5 vite at ferien ikke bare blir minnerik, men ogs\u00e5 \u00f8konomisk smart. Og i en verden der reiselysten stadig \u00f8ker, gir reisekupp oss muligheten til \u00e5 komme oss ut, skape nye opplevelser og samtidig holde kostnadene nede.<\/p>\n\n\n\n<p>Til syvende og sist handler reisekupp om mer enn lave priser. Det handler om friheten til \u00e5 utforske, om gleden ved spontanitet og om \u00e5 f\u00e5 mest mulig ut av ferien \u2013 for minst mulig penger. N\u00e5r hotell, flyreiser og aktiviteter g\u00e5r opp i en perfekt, rimelig helhet, \u00e5pner det d\u00f8ren til flere reiser og flere eventyr. Og nettopp d\u00e9t gj\u00f8r reisekupp s\u00e5 uimotst\u00e5elige.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<!doctype html>\n<html lang=\"no\">\n<head>\n<meta charset=\"utf-8\" \/>\n<meta name=\"viewport\" content=\"width=device-width,initial-scale=1\" \/>\n<title>Reisekupp &#8211; Reise nyheter<\/title>\n<meta name=\"description\" content=\"Siste reiserelaterte nyheter p\u00e5 norsk samlet automatisk for Reisekupp.no\" \/>\n<style>\nbody { font-family: Inter, system-ui, -apple-system, \"Segoe UI\", Roboto, Arial; margin:0; background:#f6f7fb; color:#111; }\n.container { max-width:1100px; margin:24px auto; padding:0 16px; }\nheader { display:flex; justify-content:space-between; flex-wrap:wrap; margin-bottom:16px; }\nh1 { font-size:1.25rem; margin:0; }\n.cards { display:grid; grid-template-columns:repeat(auto-fill,minmax(300px,1fr)); gap:14px; }\n.card { background:white; border-radius:12px; box-shadow:0 6px 18px rgba(17,24,39,0.06); padding:14px; display:flex; flex-direction:column; gap:8px; }\n.card img { width:100%; height:auto; border-radius:8px; object-fit:cover; }\n.card h3 { margin:0; font-size:1rem; }\n.meta { font-size:0.85rem; color:#666; display:flex; gap:8px; align-items:center; flex-wrap:wrap; }\n.summary { font-size:0.93rem; color:#222; margin-top:6px; flex:1; }\n.source-badge { background:#eef2ff; color:#3730a3; padding:3px 8px; border-radius:999px; font-weight:600; font-size:0.78rem; }\n.time { color:#6b7280; font-size:0.78rem; }\nbutton { padding:8px 10px; border-radius:8px; border:0; cursor:pointer; background:#111827; color:white; font-weight:600; margin-right:6px; }\nbutton.secondary { background:#eef2ff; color:#111827; font-weight:700; }\n.small { font-size:0.85rem; color:#374151; }\n.error { color:#b91c1c; background:#fff1f2; padding:8px; border-radius:8px; margin:10px 0; }\nfooter { margin:20px 0; color:#6b7280; font-size:0.85rem; }\n@media (max-width:520px){ .cards{grid-template-columns:1fr} }\n<\/style>\n<\/head>\n<body>\n<div class=\"container\" id=\"app\">\n  <header>\n    <div>\n      <h1>Reisekupp \u2014 Siste nyheter p\u00e5 norsk<\/h1>\n      <div class=\"small\">Automatisk samling av reiserelaterte nyheter fra norske kilder<\/div>\n    <\/div>\n    <div>\n      <button id=\"refreshBtn\">Oppdater n\u00e5<\/button>\n      <div class=\"small\" id=\"lastUpdated\">Sist oppdatert: \u2014<\/div>\n    <\/div>\n  <\/header>\n\n  <div id=\"error\" style=\"display:none\" class=\"error\"><\/div>\n  <main>\n    <section class=\"cards\" id=\"cards\"><\/section>\n  <\/main>\n\n  <footer>\n    <div>Kilder: norske RSS-feeds. Lenke til originalen vises alltid. \u00a9 Reisekupp.no<\/div>\n  <\/footer>\n<\/div>\n\n<script>\n(() => {\n  const FEEDS = [\n    { name: 'VG Reise', url: 'https:\/\/www.vg.no\/rss\/nyheter\/reise' },\n    { name: 'Dagbladet Reise', url: 'https:\/\/www.dagbladet.no\/rss\/reise' },\n    { name: 'Aftenposten Reise', url: 'https:\/\/www.aftenposten.no\/rss\/reise' }\n  ];\n  const ALLORIGINS = 'https:\/\/api.allorigins.win\/raw?url=';\n  const STORAGE_KEY = 'reisekupp_news_cache_v1';\n  const TTL_MS = 1000 * 60 * 10; \/\/ 10 min\n  const AUTO_REFRESH_MS = 1000 * 60 * 10;\n\n  const cardsEl = document.getElementById('cards');\n  const lastUpdatedEl = document.getElementById('lastUpdated');\n  const errorEl = document.getElementById('error');\n  const refreshBtn = document.getElementById('refreshBtn');\n\n  let autoTimer = null;\n\n  function formatTime(iso) {\n    const d = new Date(iso);\n    if(isNaN(d)) return iso||'';\n    return d.toLocaleString('no-NO',{ year:'numeric', month:'short', day:'numeric', hour:'2-digit', minute:'2-digit' });\n  }\n\n  function showError(msg){ errorEl.style.display='block'; errorEl.textContent=msg; }\n  function clearError(){ errorEl.style.display='none'; errorEl.textContent=''; }\n\n  function loadCache(){ try{ const raw=localStorage.getItem(STORAGE_KEY); if(!raw) return null; const obj=JSON.parse(raw); if(!obj||!obj.ts) return null; if(Date.now()-obj.ts>TTL_MS) return null; return obj.data; } catch(e){return null;} }\n  function saveCache(data){ try{ localStorage.setItem(STORAGE_KEY, JSON.stringify({ts:Date.now(),data})); } catch(e){} }\n\n  function parseRSS(xmlString, sourceName){\n    const parser = new DOMParser();\n    const doc = parser.parseFromString(xmlString,'text\/xml');\n    const items = Array.from(doc.querySelectorAll('item,entry')).slice(0,20);\n    return items.map(node=>{\n      const title = (node.querySelector('title')?.textContent)||'Uten tittel';\n      let linkNode=node.querySelector('link');\n      let link=linkNode?.getAttribute('href') || linkNode?.textContent || node.querySelector('guid')?.textContent || '';\n      const pubDate = (node.querySelector('pubDate')?.textContent) || (node.querySelector('updated')?.textContent) || '';\n      const description = (node.querySelector('description')?.textContent) || (node.querySelector('summary')?.textContent) || '';\n      const tmp = document.createElement('div'); tmp.innerHTML=description;\n      const summary = (tmp.textContent || tmp.innerText || '').trim().slice(0,320);\n\n      \/\/ hent bilde fra <media:content> eller <enclosure>\n      const mediaNode = node.querySelector('media\\\\:content, enclosure');\n      let imageUrl = mediaNode ? mediaNode.getAttribute('url') : '';\n      return {title:title.trim(), link:link.trim(), pubDate:pubDate.trim(), summary, sourceName, imageUrl};\n    }).filter(i=>i.link);\n  }\n\n  async function fetchFeedRaw(feedUrl){\n    const encoded = encodeURIComponent(feedUrl);\n    const res = await fetch(ALLORIGINS + encoded, {cache:'no-store'});\n    if(!res.ok) throw new Error(`Feil ved henting: ${res.status}`);\n    return await res.text();\n  }\n\n  async function fetchAllFeeds(){\n    clearError();\n    const jobs = FEEDS.map(async f => {\n      try{\n        const raw = await fetchFeedRaw(f.url);\n        return parseRSS(raw,f.name);\n      } catch(err){ console.warn('Feed error',f.url,err); return []; }\n    });\n    const settled = await Promise.all(jobs);\n    return settled.flat();\n  }\n\n  function renderCards(items){\n    cardsEl.innerHTML='';\n    if(!items.length){ cardsEl.innerHTML='<div class=\"small\">Ingen nyheter funnet akkurat n\u00e5.<\/div>'; return; }\n    items.sort((a,b)=> (Date.parse(b.pubDate)||0)-(Date.parse(a.pubDate)||0));\n    for(const it of items){\n      const card=document.createElement('article'); card.className='card';\n      if(it.imageUrl){ const img=document.createElement('img'); img.src=it.imageUrl; card.appendChild(img);}\n      const title=document.createElement('h3'); const a=document.createElement('a'); a.href=it.link; a.target='_blank'; a.rel='noopener noreferrer'; a.textContent=it.title; a.style.color='inherit'; a.style.textDecoration='none'; title.appendChild(a);\n      const meta=document.createElement('div'); meta.className='meta';\n      const sourceBadge=document.createElement('span'); sourceBadge.className='source-badge'; sourceBadge.textContent=it.sourceName||'Kilde';\n      const time=document.createElement('span'); time.className='time'; time.textContent=it.pubDate?formatTime(it.pubDate):'';\n      meta.appendChild(sourceBadge); meta.appendChild(time);\n      const summary=document.createElement('div'); summary.className='summary'; summary.textContent=it.summary||'';\n      const readMore=document.createElement('div'); const openBtn=document.createElement('a'); openBtn.href=it.link; openBtn.target='_blank'; openBtn.rel='noopener noreferrer'; openBtn.textContent='Les originalen'; openBtn.style.fontWeight='700'; readMore.appendChild(openBtn);\n      card.appendChild(title); card.appendChild(meta); card.appendChild(summary); card.appendChild(readMore);\n      cardsEl.appendChild(card);\n    }\n  }\n\n  async function updateNow(){\n    try{\n      const cached = loadCache(); if(cached) renderCards(cached);\n      const items = await fetchAllFeeds();\n      if(items.length){ saveCache(items); renderCards(items); lastUpdatedEl.textContent='Sist oppdatert: '+formatTime(new Date().toISOString()); }\n      else lastUpdatedEl.textContent='Sist oppdatert: Ingen data';\n    } catch(err){ showError('Oppdatering feilet: '+(err.message||err)); }\n  }\n\n  refreshBtn.addEventListener('click', ()=>updateNow());\n\n  \/\/ automatisk oppdatering hvert 10 minutt\n  autoTimer = setInterval(updateNow, AUTO_REFRESH_MS);\n\n  \/\/ initial oppdatering\n  updateNow();\n})();\n<\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>Reisekupp.no lanseres i 2026 Reisekupp kan v\u00e6re mange ting, men fellesnevneren er f\u00f8lelsen av \u00e5 finne ferie, hotell og flyreiser til en pris som nesten virker for god til \u00e5 v\u00e6re sann. Det handler om \u00e5 lete litt smartere, sammenligne alternativer og ha \u00f8ynene \u00e5pne for uventede muligheter. I en tid hvor reiser ofte kan [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":66,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-17","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/reisekupp.no\/index.php\/wp-json\/wp\/v2\/pages\/17","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/reisekupp.no\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/reisekupp.no\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/reisekupp.no\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/reisekupp.no\/index.php\/wp-json\/wp\/v2\/comments?post=17"}],"version-history":[{"count":11,"href":"https:\/\/reisekupp.no\/index.php\/wp-json\/wp\/v2\/pages\/17\/revisions"}],"predecessor-version":[{"id":80,"href":"https:\/\/reisekupp.no\/index.php\/wp-json\/wp\/v2\/pages\/17\/revisions\/80"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/reisekupp.no\/index.php\/wp-json\/wp\/v2\/media\/66"}],"wp:attachment":[{"href":"https:\/\/reisekupp.no\/index.php\/wp-json\/wp\/v2\/media?parent=17"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}