{"id":62,"date":"2026-08-13T18:40:58","date_gmt":"2026-08-13T18:40:58","guid":{"rendered":"https:\/\/bibliotea.com\/?page_id=62"},"modified":"2026-08-13T18:41:24","modified_gmt":"2026-08-13T18:41:24","slug":"buscar-y-valorar","status":"publish","type":"page","link":"https:\/\/bibliotea.com\/?page_id=62","title":{"rendered":"Buscar y valorar"},"content":{"rendered":"\n<div class=\"bt-buscar\">\n  <div class=\"bt-b-inner\">\n    <h1>Buscar y valorar<\/h1>\n    <p class=\"bt-b-intro\">Busca un libro por t\u00edtulo o autor. Al elegirlo se rellenan solos el t\u00edtulo, el autor y el a\u00f1o.<\/p>\n    <div class=\"bt-b-search\">\n      <input id=\"bq\" type=\"text\" placeholder=\"Ej.: Cien a\u00f1os de soledad, Orwell, Dostoievski...\">\n      <button class=\"bt-btn\" id=\"bSearchBtn\">Buscar<\/button>\n    <\/div>\n    <div class=\"bt-b-source\" id=\"bSource\"><\/div>\n    <div class=\"bt-b-results\" id=\"bResults\"><\/div>\n    <p class=\"bt-b-hint\" id=\"bHint\">Escribe algo y pulsa Buscar para empezar.<\/p>\n  <\/div>\n  <div class=\"bt-ml-overlay\" id=\"bOverlay\">\n    <div class=\"bt-ml-modal\">\n      <div class=\"bt-mc-modhead\">\n        <img id=\"bmCover\" alt=\"\">\n        <div style=\"min-width:0\">\n          <h2 id=\"bmTitle\"><\/h2>\n          <div class=\"bt-ml-who\" id=\"bmWho\"><\/div>\n          <div class=\"bt-ml-stars\" id=\"bmStars\"><\/div>\n        <\/div>\n      <\/div>\n      <label for=\"bmOpinion\">Tu opini\u00f3n<\/label>\n      <textarea id=\"bmOpinion\" placeholder=\"Escribe tu rese\u00f1a...\"><\/textarea>\n      <div class=\"bt-ml-actions\">\n        <button class=\"bt-btn ghost\" id=\"bmCancel\">Cancelar<\/button>\n        <button class=\"bt-btn\" id=\"bmSave\">Guardar valoraci\u00f3n<\/button>\n      <\/div>\n    <\/div>\n  <\/div>\n  <div class=\"bt-toast\" id=\"bToast\"><\/div>\n<\/div>\n<style>\n.bt-buscar{position:relative;left:50%;right:50%;width:100vw!important;max-width:100vw!important;margin-left:-50vw!important;margin-right:-50vw!important;box-sizing:border-box;background:#f5efe4;color:#2b2118;font-family:\"Iowan Old Style\",\"Palatino Linotype\",Georgia,serif;padding:2.5rem 1.2rem}\n.bt-b-inner{max-width:1100px;margin:0 auto}\n.bt-b-inner h1{font-size:1.9rem;margin:0 0 .2rem}\n.bt-b-intro{color:#7a6a58;margin:0 0 1rem}\n.bt-b-search{display:flex;gap:.6rem;flex-wrap:wrap;margin-bottom:.6rem}\n.bt-b-search input{flex:1;min-width:220px;padding:.7rem .9rem;border:1px solid #e4d8c5;border-radius:12px;font-family:inherit;font-size:1rem;background:#fffdf8;color:#2b2118}\n.bt-b-source{color:#7a6a58;font-size:.82rem;margin-bottom:.6rem}\n.bt-b-results{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:1rem}\n.bt-b-card{display:flex;gap:.8rem;background:#fffdf8;border:1px solid #e4d8c5;border-radius:14px;padding:.8rem;box-shadow:0 10px 30px rgba(60,40,20,.10)}\n.bt-b-card .th{width:64px;min-width:64px;height:96px;border-radius:6px;object-fit:cover;background:#8a5a3a}\n.bt-b-card .mt{display:flex;flex-direction:column;min-width:0}\n.bt-b-card .mt h3{font-size:1rem;margin:0 0 .15rem}\n.bt-b-card .mt .au{color:#7a6a58;font-size:.85rem}\n.bt-b-card .mt .yr{color:#7a6a58;font-size:.78rem;margin-bottom:.4rem}\n.bt-b-acts{display:flex;gap:.35rem;flex-wrap:wrap;margin-top:auto}\n.bt-b-hint{color:#7a6a58;font-style:italic;text-align:center;padding:1.6rem}\n.bt-btn{border:none;background:#9c3d2e;color:#fff;padding:.7rem 1.3rem;border-radius:12px;font-weight:600;font-size:1rem;cursor:pointer;font-family:inherit}\n.bt-btn.ghost{background:transparent;color:#9c3d2e;border:1px solid #9c3d2e}\n.bt-btn.sm{padding:.4rem .7rem;font-size:.82rem}\n.bt-ml-who{color:#7a6a58;margin-bottom:.4rem}\n.bt-ml-overlay{position:fixed;inset:0;background:rgba(20,12,6,.55);display:none;align-items:center;justify-content:center;z-index:99999;padding:1rem}\n.bt-ml-overlay.show{display:flex}\n.bt-ml-modal{background:#fffdf8;color:#2b2118;border-radius:16px;max-width:520px;width:100%;padding:1.6rem;box-shadow:0 20px 50px rgba(0,0,0,.35);font-family:inherit}\n.bt-mc-modhead{display:flex;gap:1rem;margin-bottom:.6rem}\n.bt-mc-modhead img{width:80px;height:120px;border-radius:8px;object-fit:cover;background:#8a5a3a}\n.bt-ml-modal h2{margin:0 0 .2rem}\n.bt-ml-stars{display:flex;gap:.15rem;font-size:1.6rem}\n.bt-ml-stars .st{background:none;border:none;cursor:pointer;color:#e4d8c5;font-size:inherit;padding:0}\n.bt-ml-stars .st.on{color:#e0a12b}\n.bt-ml-modal label{display:block;font-weight:600;margin:.6rem 0 .35rem}\n.bt-ml-modal textarea{width:100%;min-height:110px;padding:.75rem;border:1px solid #e4d8c5;border-radius:10px;font-family:inherit;font-size:1rem;background:#f5efe4;color:#2b2118;resize:vertical}\n.bt-ml-actions{display:flex;gap:.6rem;justify-content:flex-end;margin-top:1.2rem}\n.bt-toast{position:fixed;bottom:1.5rem;left:50%;transform:translateX(-50%) translateY(20px);background:#2b2118;color:#f5efe4;padding:.7rem 1.3rem;border-radius:999px;box-shadow:0 10px 30px rgba(0,0,0,.3);opacity:0;transition:.3s;z-index:100000;font-size:.9rem;pointer-events:none}\n.bt-toast.show{opacity:1;transform:translateX(-50%) translateY(0)}\n<\/style>\n<script>\n(function(){\n  var AMP = String.fromCharCode(38);\n  var LS_R = 'biblio.reviews.v1', LS_W = 'biblio.wishlist.v1', LS_G = 'biblio.reading.v1';\n  function getArr(k){ try{ return JSON.parse(localStorage.getItem(k)) || []; }catch(e){ return []; } }\n  function setArr(k, v){ localStorage.setItem(k, JSON.stringify(v)); }\n  function uid(p){ return p + Date.now() + Math.random().toString(36).slice(2, 6); }\n  var bq = document.getElementById('bq');\n  var bResults = document.getElementById('bResults');\n  var bSource = document.getElementById('bSource');\n  var bHint = document.getElementById('bHint');\n  var toastEl = document.getElementById('bToast');\n  var toastT;\n  function toast(msg){ toastEl.textContent = msg; toastEl.classList.add('show'); clearTimeout(toastT); toastT = setTimeout(function(){ toastEl.classList.remove('show'); }, 2200); }\n  function normGB(it){\n    var v = it.volumeInfo || {}; var il = v.imageLinks || {};\n    var cover = (il.thumbnail || il.smallThumbnail || '').replace('http:\/\/', 'https:\/\/');\n    return { title: v.title || 'Sin titulo', authors: (v.authors || ['Autor desconocido']).join(', '), year: (v.publishedDate || '').slice(0, 4), cover: cover };\n  }\n  function normOL(doc){\n    var cover = '';\n    if(doc.cover_i){ cover = 'https:\/\/covers.openlibrary.org\/b\/id\/' + doc.cover_i + '-M.jpg'; }\n    else if(doc.isbn){ if(doc.isbn[0]){ cover = 'https:\/\/covers.openlibrary.org\/b\/isbn\/' + doc.isbn[0] + '-M.jpg'; } }\n    return { title: doc.title || 'Sin titulo', authors: (doc.author_name || ['Autor desconocido']).join(', '), year: doc.first_publish_year ? String(doc.first_publish_year) : '', cover: cover };\n  }\n  async function gbSearch(query){\n    var url = 'https:\/\/www.googleapis.com\/books\/v1\/volumes?q=' + encodeURIComponent(query) + AMP + 'maxResults=15' + AMP + 'country=ES';\n    var r = await fetch(url);\n    if(!r.ok){ throw new Error('gb'); }\n    var d = await r.json();\n    return (d.items || []).map(normGB);\n  }\n  async function olSearch(query){\n    var url = 'https:\/\/openlibrary.org\/search.json?q=' + encodeURIComponent(query) + AMP + 'limit=15' + AMP + 'fields=title,author_name,first_publish_year,cover_i,isbn';\n    var r = await fetch(url);\n    if(!r.ok){ throw new Error('ol'); }\n    var d = await r.json();\n    return (d.docs || []).map(normOL);\n  }\n  async function search(query){\n    var gErr = false;\n    try{ var g = await gbSearch(query); if(g.length){ return { books: g, source: 'Google Books' }; } }catch(e){ gErr = true; }\n    try{ var o = await olSearch(query); if(o.length){ return { books: o, source: gErr ? 'Open Library (Google no disponible)' : 'Open Library' }; } }\n    catch(e2){ if(gErr){ throw new Error('Google Books no disponible ahora. Intentalo en un momento.'); } throw e2; }\n    return { books: [], source: '' };\n  }\n  function sameBook(a, b){ if(a.title !== b.title){ return false; } return (a.authors || '') === (b.authors || ''); }\n  function addWishlist(book){\n    var wl = getArr(LS_W);\n    var dup = wl.some(function(w){ return sameBook(w, book); });\n    if(dup){ toast('Ya est\u00e1 en tu wishlist'); return; }\n    wl.unshift({ id: uid('w'), title: book.title, authors: book.authors, year: book.year, cover: book.cover, kind: 'libro', date: Date.now() });\n    setArr(LS_W, wl); toast('A\u00f1adido a la wishlist');\n  }\n  function startReading(book){\n    var rd = getArr(LS_G);\n    var dup = rd.some(function(g){ return sameBook(g, book); });\n    if(dup){ toast('Ya est\u00e1 en Leyendo ahora'); return; }\n    rd.unshift({ id: uid('g'), title: book.title, authors: book.authors, year: book.year, cover: book.cover, kind: 'libro', date: Date.now() });\n    setArr(LS_G, rd);\n    var wl = getArr(LS_W).filter(function(w){ return !sameBook(w, book); });\n    setArr(LS_W, wl);\n    toast('Ahora leyendo');\n  }\n  function resultCard(bk){\n    var c = document.createElement('div'); c.className = 'bt-b-card';\n    if(bk.cover){ var im = document.createElement('img'); im.className = 'th'; im.src = bk.cover; im.alt = ''; c.appendChild(im); }\n    else { var ph = document.createElement('div'); ph.className = 'th'; c.appendChild(ph); }\n    var mt = document.createElement('div'); mt.className = 'mt';\n    var h = document.createElement('h3'); h.textContent = bk.title; mt.appendChild(h);\n    var au = document.createElement('div'); au.className = 'au'; au.textContent = bk.authors; mt.appendChild(au);\n    var yr = document.createElement('div'); yr.className = 'yr'; yr.textContent = bk.year || ''; mt.appendChild(yr);\n    var acts = document.createElement('div'); acts.className = 'bt-b-acts';\n    var v = document.createElement('button'); v.className = 'bt-btn sm'; v.textContent = 'Valorar'; v.onclick = function(){ openRate(bk, null); };\n    var w = document.createElement('button'); w.className = 'bt-btn ghost sm'; w.textContent = '+ Wishlist'; w.onclick = function(){ addWishlist(bk); };\n    var g = document.createElement('button'); g.className = 'bt-btn ghost sm'; g.textContent = '\ud83d\udcd6 Leyendo'; g.onclick = function(){ startReading(bk); };\n    acts.appendChild(v); acts.appendChild(w); acts.appendChild(g); mt.appendChild(acts);\n    c.appendChild(mt);\n    return c;\n  }\n  async function doSearch(){\n    var query = (bq.value || '').trim();\n    if(!query){ return; }\n    bSource.textContent = ''; bResults.innerHTML = ''; bHint.style.display = 'block'; bHint.textContent = 'Buscando...';\n    try{\n      var res = await search(query);\n      if(!res.books.length){ bHint.textContent = 'No se encontraron libros. Prueba con otras palabras.'; return; }\n      bHint.style.display = 'none';\n      res.books.forEach(function(bk){ bResults.appendChild(resultCard(bk)); });\n      if(res.source){ bSource.textContent = 'Resultados de ' + res.source; }\n    }catch(e){ bHint.style.display = 'block'; bHint.textContent = e.message || 'No se pudo completar la busqueda.'; }\n  }\n  document.getElementById('bSearchBtn').onclick = doSearch;\n  bq.addEventListener('keydown', function(e){ if(e.key === 'Enter'){ doSearch(); } });\n  var overlay = document.getElementById('bOverlay');\n  var mCover = document.getElementById('bmCover');\n  var mTitle = document.getElementById('bmTitle');\n  var mWho = document.getElementById('bmWho');\n  var mStars = document.getElementById('bmStars');\n  var mOpinion = document.getElementById('bmOpinion');\n  var currentBook = null, currentRating = 0;\n  function drawStars(){\n    mStars.innerHTML = '';\n    for(var i = 1; i <= 5; i++){ (function(n){ var b = document.createElement('button'); b.type = 'button'; b.className = 'st' + (n <= currentRating ? ' on' : ''); b.textContent = '\u2605'; b.onclick = function(){ currentRating = n; drawStars(); }; mStars.appendChild(b); })(i); }\n  }\n  function openRate(book){\n    currentBook = book; currentRating = 0;\n    if(book.cover){ mCover.src = book.cover; mCover.style.display = 'block'; } else { mCover.style.display = 'none'; }\n    mTitle.textContent = book.title || '';\n    mWho.textContent = [book.authors, book.year].filter(function(x){ return x; }).join(' \u00b7 ');\n    mOpinion.value = '';\n    drawStars(); overlay.classList.add('show');\n  }\n  document.getElementById('bmCancel').onclick = function(){ overlay.classList.remove('show'); };\n  overlay.onclick = function(e){ if(e.target === overlay){ overlay.classList.remove('show'); } };\n  document.getElementById('bmSave').onclick = function(){\n    if(currentRating === 0){ toast('Pon al menos una estrella'); return; }\n    var reviews = getArr(LS_R);\n    reviews.unshift({ id: uid('r'), title: currentBook.title, authors: currentBook.authors, year: currentBook.year, cover: currentBook.cover, rating: currentRating, opinion: (mOpinion.value || '').trim(), date: Date.now(), kind: 'libro' });\n    setArr(LS_R, reviews);\n    overlay.classList.remove('show'); toast('Valoraci\u00f3n guardada');\n  };\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Buscar y valorar Busca un libro por t\u00edtulo o autor. Al elegirlo se rellenan solos el t\u00edtulo, el autor y el a\u00f1o. Buscar Escribe algo y pulsa Buscar para empezar. Tu opini\u00f3n Cancelar Guardar valoraci\u00f3n<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-62","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/bibliotea.com\/index.php?rest_route=\/wp\/v2\/pages\/62","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bibliotea.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bibliotea.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bibliotea.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bibliotea.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=62"}],"version-history":[{"count":1,"href":"https:\/\/bibliotea.com\/index.php?rest_route=\/wp\/v2\/pages\/62\/revisions"}],"predecessor-version":[{"id":63,"href":"https:\/\/bibliotea.com\/index.php?rest_route=\/wp\/v2\/pages\/62\/revisions\/63"}],"wp:attachment":[{"href":"https:\/\/bibliotea.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=62"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}