av quick search

search av quickly

// ==UserScript==
// @name         av quick search
// @namespace    http://tampermonkey.net/
// @version      0.5.1
// @description  search av quickly
// @author       miles
// @match        https://pics-view.com/*
// @match        https://fc2ppvdb.com/public/articles/*
// @match        https://fc2ppvdb.com/articles/*
// @license      MIT
// @icon         data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAACBUExURUxpcWB9i2B9i2B9i2B9i2B9i2B9i2B9i2B9i2B9i2B9i2B9i2B9i2B9i2B9i////198il17idng49DY3PT297/K0MTP1M3X27rHzaCxupmstbTByK69xOfr7bfFy3WOmqi4wPz9/X+XomSBjqW1vZOmsN/l6GmFkomeqe7x8vn6+kv+1vUAAAAOdFJOUwDsAoYli9zV+lIqAZEDwV05SQAAAUZJREFUOMuFk+eWgjAUhGPBiLohjZACUqTp+z/gJkqJy4rzg3Nn+MjhwB0AANjv4BEtdITBHjhtQ4g+CIZbC4Qb9FGb0J4P0YrgCezQqgIA14EDGN8fYz+f3BGMASFkTJ+GDAYMUSONzrFL7SVvjNQIz4B9VERRmV0rbJWbrIwidnsd6ACMlEoip3uad3X2HJmqb3gCkkJELwk5DExRDxA6HnKaDEPSsBnAsZoANgJaoAkg12IJqBiPACImXQKF9IDULIHUkOk7kDpeAMykHqCEWACy8ACdSM7LGSg5F3HtAU1rrkaK9uGAshXS2lZ5QH/nVhmlD8rKlmbO3ZsZwLe8qnpdxJRnLaci1X1V5R32fjd5CndVkfYdGpy3D+htU952C/ypzPtdt3JflzZYBy7fi/O1euvl/XH1Pp+Cw3/1P1xOZwB+AWMcP/iw0AlKAAAAV3pUWHRSYXcgcHJvZmlsZSB0eXBlIGlwdGMAAHic4/IMCHFWKCjKT8vMSeVSAAMjCy5jCxMjE0uTFAMTIESANMNkAyOzVCDL2NTIxMzEHMQHy4BIoEouAOoXEXTyQjWVAAAAAElFTkSuQmCC
// @grant        GM_getValue
// @grant        GM_setValue
// @grant        GM_registerMenuCommand
// ==/UserScript==
;(function () {
  'use strict'

  // Default configuration
  const DEFAULT_CONFIG = {
    magnetSearchUrl: 'https://btdig.com/search?q=',
    avSearchUrl: 'https://123av.com/en/search?keyword=',
  }

  // Get configuration from Tampermonkey storage or use default
  const getConfig = () => ({
    magnetSearchUrl: GM_getValue('magnetSearchUrl', DEFAULT_CONFIG.magnetSearchUrl),
    avSearchUrl: GM_getValue('avSearchUrl', DEFAULT_CONFIG.avSearchUrl),
  })

  // Set configuration in Tampermonkey storage
  const setConfig = (config) => {
    GM_setValue('magnetSearchUrl', config.magnetSearchUrl)
    GM_setValue('avSearchUrl', config.avSearchUrl)
  }

  // Register menu command to configure magnet search URL
  GM_registerMenuCommand('Configure Magnet Search URL', () => {
    const config = getConfig()
    const newUrl = prompt('Enter the magnet search URL (with trailing = or ?q=):', config.magnetSearchUrl)
    if (newUrl !== null) {
      setConfig({ ...config, magnetSearchUrl: newUrl })
      alert('Magnet search URL updated successfully!')
    }
  })

  // Register menu command to configure AV search URL
  GM_registerMenuCommand('Configure AV Search URL', () => {
    const config = getConfig()
    const newUrl = prompt('Enter the AV search URL (with trailing = or ?keyword=):', config.avSearchUrl)
    if (newUrl !== null) {
      setConfig({ ...config, avSearchUrl: newUrl })
      alert('AV search URL updated successfully!')
    }
  })

  const renderButton = (container, text, onClick) => {
    const btn = document.createElement('button')
    btn.style.marginLeft = '5px'
    btn.style.padding = '2px'
    btn.style.border = '2px solid gray'
    btn.style.borderRadius = '9px'
    btn.innerText = text
    btn.onclick = onClick
    container.appendChild(btn)
  }

  const renderUI = (keyword, avKeyword) => {
    const container = document.createElement('div')
    container.style.position = 'absolute'
    container.style.zIndex = 1000
    container.style.background = 'white'
    renderButton(container, 'search google', () => {
      window.open(`https://google.com/search?q=${keyword}`)
    })
    renderButton(container, 'search AV', () => {
      const config = getConfig()
      window.open(`${config.avSearchUrl}${avKeyword}`)
    })
    renderButton(container, 'search Magnet', () => {
      const config = getConfig()
      window.open(`${config.magnetSearchUrl}${keyword}`)
    })
    document.body.prepend(container)
  }

  const runPicView = () => {
    if (!location.href.includes('pics-view.com')) {
      return
    }
    const maybeKeyword = location.href.split('/').pop().split('.')[0]
    const maybeWordList = maybeKeyword.split('-')
    if (maybeWordList[maybeWordList.length - 1].length < 2) {
      maybeWordList.pop()
    }
    const keyword = maybeWordList.join('-')
    renderUI(keyword, maybeWordList[maybeWordList.length - 1])
  }
  runPicView()
  const runFc2ppvdb = () => {
    const isTarget = location.href.includes('fc2ppvdb.com/public/articles') || location.href.includes('fc2ppvdb.com/articles')
    if (!isTarget) {
      return
    }
    const words = location.href.split('?')[0]?.split('#')[0].split('/')
    const index = words.findIndex((i) => i === 'articles')
    const code = words[index + 1]
    const keyword = `FC2-PPV-${code}`
    renderUI(keyword, keyword)
  }
  runFc2ppvdb()
})()