JavScript

一站式体验,JavBus & JavDB 兼容

< Feedback on JavScript

Review: Good - script works

§
Posted: 20.4.2026

如果预览图加载不出来的话,把 Class Apis 里面的两个函数复制替换就好了。

      static async fetchBlogJav(code) {
          if (FC2_REGEX.test(code)) code = code.replace("-PPV-", " PPV ");
          const re = { img: "" };

          const requests = [
              {
                  url: `https://blogjav.net/?s=${code}`,
                  selectors: "#main .entry-title a",
              },
              {
                  url: `https://duckduckgo.com/?q=${code} site:blogjav.net`,
                  selectors: ".react-results--main h2 a",
              },
              {
                  url: `https://www.google.com/search?q=${code} site:blogjav.net`,
                  selectors: "#search .yuRUbf span > a",
              },
          ];
          let list = await Promise.allSettled(requests.map(item => request(item.url)));

          const { regex } = codeParse(code);
          code = code.toUpperCase();
          let url = "";
          for (let index = 0, { length } = requests; index < length; index++) {
              const { status, value } = list[index];
              if (status !== "fulfilled" || !value) continue;

              const href = Array.from(value?.querySelectorAll(requests[index].selectors) ?? []).find(item => {
                  const str = item.textContent.toUpperCase();
                  return regex.test(str) && str.includes(code);
              })?.href;
            //   console.log("fetchBlogJav href: ", href);
              if (!href) continue;

              url = href;
              break;
          }
          if (!url) return re;

          list = await Promise.allSettled([
              request(url),
              request(`http://webcache.googleusercontent.com/search?q=cache:${url}`),
          ]);
          url = "";
          for (let index = 0, { length } = list; index < length; index++) {
              const { status, value } = list[index];
              if (status !== "fulfilled" || !value) continue;
              let href = value.querySelector("#main .entry-content a")?.href;
              if (href && /\.(jpg|png)$/i.test(href)){
                url = href;
                // console.log("fetchBlogJav if: ", url);
                break;
              }
              else{
                let img = Array.from(value?.querySelectorAll("#main .entry-content img") ?? []).find(item => {
                  const str = item.data-src.toUpperCase() ?? item.data-lazy-src.toUpperCase();
                  return /demosaic\.(jpg|png)$/i.test(str);
                })?.data-src;
                if (!img) continue;
                url = img.replace("//t", "//img").replace("thumbs", "images");
                // console.log("fetchBlogJav else: ", url);
                break;
              }
          }
          re.img = url;
          return re;
      }
      static async fetchJavStore(code) {
          if (FC2_REGEX.test(code)) code = code.replace("-PPV-", "PPV ");
          const re = { img: "" };

          let res = await request(`https://javstore.net/search?q=${code}`);
          if (!res) return re;

          res = res.querySelectorAll(".grid > a");
          if (!res.length) return re;

          const { regex } = codeParse(code);
          code = code.toUpperCase();
          res = Array.from(res).find(item => {
            //   const str = item.title.toUpperCase();
              const str = item.querySelector('h3')?.innerText.toUpperCase();
              return str.includes(code) && regex.test(str) && item.querySelector("img").src.startsWith("https");
          });

          const relativePath = res?.getAttribute('href');
          if (!relativePath) return re;

          res = await request(`https://javstore.net${relativePath}`);
          if (!res) return re;

          const img = res.querySelector(".prose > a")?.href;
          if (img && /\.(jpg|png)$/i.test(img)) re.img = img;
        //   console.log("fetchJavStore re: ", re);
          return re;
      }

Post reply

Sign in to post a reply.