예제 #1
0
def files():
    #Needs own API key, can register at https://saucenao.com/user.php?page=search-api
    sauce = SauceNao(saucenao_API_key)
    onlyfiles = [f for f in listdir('Images') if isfile(join('Images', f))]
    count = 4
    for filename in onlyfiles:
        count = count - 1
        fileSource = open('Images/' + filename, "rb")
        results = sauce.from_file(fileSource)  # or from_file()
        if (bool(results)):
            webbrowser.open(''.join(
                results[0].urls))  # Opens must relevant source
        else:
            print("Image Not Found")
        if (count == 0):
            count = 4
            time.sleep(40)
예제 #2
0
def get_saucenao(request_data:Pic_item):
    return_data=[]
    sauce = SauceNao()
    new = base64.b64decode(request_data.pic_data.encode())
    results = sauce.from_file(BytesIO(new))  # or from_file()
    for result in results[:min(3,len(results))]:
        r = requests.get(result.thumbnail)
        preview = str(base64.b64encode(r.content), "utf-8")
        if result.urls:
            url=result.urls[0]
        else:
            url = result.thumbnail
        return_data.append({"preview":preview,"title":result.title,"url":url,"similarity":result.similarity})
    return return_data


# if __name__ == '__main__':
#     import uvicorn
#     uvicorn.run(app=app,host="0.0.0.0",port=25621,workers=1)
예제 #3
0
def saucenao_caching(image_hash):
    '''
    Caches the result from the given url\n
    Project Erina\n
    © Anime no Sekai - 2020
    '''
    try:
        log("ErinaCaches", f"Caching {str(image_hash)} SauceNAO data...")
        if str(config.Caches.keys.saucenao).replace(" ", "") not in ["None", ""]:
            saucenao_api = SauceNao(api_key=config.Caches.keys.saucenao, numres=1)
        else:
            saucenao_api = SauceNao(numres=1)
        if image_hash.has_url:
            try:
                api_results = saucenao_api.from_url(image_hash.url)[0]
            except:
                return CachingError("SAUCENAO_API_RESPONSE", "An error occured while retrieving SauceNAO API Data")
        else:
            try:
                api_results = saucenao_api.from_file(image_hash.ImageIO)[0]
            except:
                return CachingError("SAUCENAO_API_RESPONSE", "An error occured while retrieving SauceNAO API Data")
        
        StatsAppend(ExternalStats.saucenaoAPICalls)

        try:
            cache = saucenao.erina_from_api(api_results)
        except:
            traceback.print_exc()
            return CachingError("ERINA_CONVERSION", "An error occured while converting SauceNAO API Data to a caching format")
        try:
            TextFile(saucenao_cache_path + str(image_hash) + '.erina', blocking=False).write(cache)
        except:
            return CachingError("FILE_WRITE", "An error occured while writing out the cache data to a file")
        return saucenao_parser.SauceNAOCache(cache)
    except:
        return CachingError("UNKNOWN", "An unknown error occured while caching SauceNAO API Data")
예제 #4
0
class RequestResultProvider:
    def __init__(self, api_key: str, minimal_similarity: float):
        self.minimal_similarity = minimal_similarity
        self.sauce_api = SauceNao(api_key=api_key)

    def provide_response(self, path_to_file: str) -> List[RequestResult]:
        with open(path_to_file, "rb") as file:
            request_results = self.sauce_api.from_file(file)

        responses = [
            self.gen_response_obj(r) for r in request_results
            if r.similarity >= self.minimal_similarity
        ]
        return responses

    def gen_response_obj(self, response: BasicSauce) -> RequestResult:
        text = f"{response.similarity}\n"
        if response.urls != []:
            text += "\n".join(response.urls)
        else:
            text += f"Title:{response.title}\n" if response.title is not None else ""
            text += f"Author:{response.author}\n" if response.author is not None else ""
        thumbnail_url = response.thumbnail
        return RequestResult(thumbnail_url, text)
예제 #5
0
def sauce(update: Update, context: CallbackContext ):
  results = " "
  API = '1ee746dd98d9d3f2b6f366236cb35630d270cd90'
  sauce = SauceNao(api_key=API, db = 999, numres = 6)
  bot = context.bot 
  msg = update.effective_message 
  msg_id = update.effective_message.message_id 
  chat = update.effective_chat 
  reply = msg.reply_to_message
  filename_photo = "saucey.png"
  filename_gif = "saucey.gif" 
  if not reply:
    msg.reply_text("Reply to something baka...")
    return
  photo = "False"
  gif = "False"
  m = msg.reply_text("Where is my frying pan.. Ahh!! Hot Sauce-ing now!!", reply_markup = InlineKeyboardMarkup([[InlineKeyboardButton(text = "(^_-)", callback_data = "Nah")]]))
  if reply:
    if reply.photo:
      photo_id = reply.photo[-1].file_id
      photo = "True" 
    elif reply.animation:
      gif_id = reply.animation.file_id
      gif = "True" 
    elif reply.video:
      if reply.video.file_size >= 5:
        gif_id = reply.video.file_id
        gif = "True"
      else:
        m.edit_text("Ahh That is too big for setsuna, give a small sized one Nya!!")
    elif reply.sticker:
      photo_id = reply.sticker.file_id
      photo = "True" 
    else:
      m.edit_text("Nyah!!, give a gif, photo or a sticker!! ")
      return
    if photo == "True":
      file = bot.get_file(photo_id)
      dl = file.download(filename_photo)
      oo = open(dl, 'rb')
      results = sauce.from_file(oo)
      os.remove(dl)
    elif gif == "True" :
        file = bot.get_file(gif_id)
        dl = file.download(filename_gif)
        nyah = cv2.VideoCapture(dl)
        heh, nyo = nyah.read()
        cv2.imwrite("nyah.png", nyo)
        results = sauce.from_file(open("nyah.png", 'rb')) 
        nyah.release()
        os.remove(dl)
      #except Exception:
        #m.edit_text("Ahh its too big!!, Setsuna cant hanlde it Nya!")
    else:
      return
  ru = []
  rsu_1  = int(results[0].index_id) 
  rsu_2 = int(results[1].index_id)
  rsu_3 = int(results[2].index_id)
  rsu_4 = int(results[3].index_id) 
  rsu_5 = int(results[4].index_id)
  rsu_6 = int(results[5].index_id) 
  text = " "
  markup = " "
  tex_dan, url_dan, material_dan, creator_dan, source_dan, character_dan, tex_pix, mem_pix, url_pix,  anime_url, anime_title,  dan_simi, simi_pix, anime_year, anime_ep= " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "
  mal_url = "False"
  rsudan = "False"
  rsupix = "False"
  rsuAnime = "False"
  urgel = "False"
  
  if rsu_1 == 9:
    rsudan = "True"
    rsu = 0 
  elif rsu_2 == 9:
    rsudan = "True"
    rsu = 1
  elif rsu_3 == 9:
    rsudan = "True"
    rsu = 2 
  elif rsu_4 == 9:
    rsudan = "True"
    rsu = 3 
  elif rsu_5 == 9:
    rsudan = "True"
    rsu = 4 
  elif rsu_6 == 9:
    rsudan = "True"
    rsu = 5 
  else:
    print("Danboruu not found")
    
  if rsu_1 == 5:
    rsupix = "True"
    rsu2 = 0
  elif rsu_2 == 5:
    rsupix = "True"
    rsu2 = 1
  elif rsu_3 == 5:
    rsupix = "True"
    rsu2 = 2
  elif rsu_4 == 5:
    rsupix = "True"
    rsu2 = 3
  elif rsu_5 == 5:
    rsupix = "True"
    rsu2 = 4
  elif rsu_6 == 5:
    rsupix = "True"
    rsu2 = 5
  else:
    print("Pixiv not found...")
    
  if rsu_1 == 21:
    rsuAnime = "True"
    rsu3 = 0 
  elif rsu_2 == 21:
    rsuAnime = "True"
    rsu3 = 1
  elif rsu_3 == 21:
    rsuAnime = "True"
    rsu3 = 2
  elif rsu_4 == 21:
    rsuAnime = "True"
    rsu3 = 3
  elif rsu_5 == 21:
    rsuAnime = "True"
    rsu3 = 4
  elif rsu_6 == 21:
    rsuAnime = "True"
    rsu3 = 5
  else:
    print("Not found on Anime..")
    
  if rsudan == "True" :
    dan_simi = str(results[rsu].similarity)
    tex_dan = str(results[rsu].title)
    urdan = results[rsu].urls
    try:
      urgel = urdan[1]
    except IndexError:
      pass
    if len(urdan) >= 2:
      tit = urdan.pop()
    else:
      pass
    url_dan = " ".join(urdan)
    di = results[rsu].raw
    ik = di.get('data')
    if not ik == "None":
      creator_dan = ik.get('creator') 
      material_dan = ik.get('material')
      source_dan = ik.get('source')
      character_dan = ik.get('characters')
    print("Danboruu retrieving successful...")
  else:
    print("Danboruu either not found or retrieving unsuccessful")
    
  if rsuAnime == "True":
    raww = results[rsu3].raw
    anime_url = results[rsu3].urls
    try:
      anime_url = anime_url[0]
    except IndexError:
      pass 
    simi = str(results[rsu3].similarity) 
    deta = raww.get('data')
    anime_title = deta.get('source') 
    anime_ep = deta.get('part')
    anime_year = deta.get('year')
    anime_timestamp = deta.get('est_time' )
    print("Anime retrieving successful...")
    heh = Jikan()
    kek = heh.search('anime', anime_title, page=1)
    if kek:
      mal_url = kek['results'][0]['url']
    else:
      mal_url = "False"
  else:
    print("Anime not found or retrieving unsuccessful")
  
  if rsupix == "True" :
     url_pix = " ".join(results[rsu2].urls) 
     simi_pix = str(results[rsu2].similarity) 
     tex_pix = str(results[rsu2].title)
     kek = results[rsu2].raw
     ti = kek.get('data')
     if not ti == 'None':
       mem_pix = ti.get('member_name')
     pixiv = "True" 
     print("Pixiv retrieving successful...")
  else:
     print("Pixiv not found or retrieving unsuccessful")
    
  if rsuAnime == "True":
    text += f"*Title: {anime_title}\nEpisode: {anime_ep}* \n*Year Released*: `{anime_year}` \n*Timestamp:* `{anime_timestamp}`\n*Similarity:* `{simi}`"
    print(text)
    
  if rsudan == "True" :
    text += "*Title:*" + " " + f"*{tex_dan}*" + " " + "\n*Creator:*" + " " +  f"*{creator_dan}*" + "\n*Material:*" + " " + f" *{material_dan}*" + "\n*Character:*" + " " + f"*{character_dan}*" + "\n" + "*Similarity: " + " " + f"{dan_simi}*" 
    print(text)

  if rsupix == "True":
    if rsuAnime == "True":
      pass
    elif rsudan == "True":
      pass 
    else:
      text +=  "*Title:*" + " " + f"*{tex_pix}*" + "\n" +  "*Artist:*" + " " + f"*{mem_pix}*\n" + f"*Similarity: {simi_pix}*"
  
  if text == " ":
    text = "Sorry Not found!!, Setsuna sad... reeeee"
  #buttons made here 
  keybo = []
  if rsupix == "True":
    keybo.append([InlineKeyboardButton(text = "Pixiv", url = url_pix)])
  if rsudan == "True":
    if not urgel == "False":
      keybo.append([InlineKeyboardButton(text = "Danboruu", url = url_dan), InlineKeyboardButton(text = "Gelbooru", url = urgel)])
    elif url_dan == "False":
      if not urgel == "False":
        keybo.append([InlineKeyboardButton(text ="Gelbooru", url = urlgel)])
    else:
      keybo.append([InlineKeyboardButton (text = "Danboruu", url = url_dan)])
  if rsuAnime == "True":
      keybo.append([InlineKeyboardButton(text = "Anime-db", url = anime_url)])
  if not mal_url == "False":
      keybo.append([InlineKeyboardButton(text = "MAL", url = mal_url)])
  if len(keybo) >= 1:
    markup = InlineKeyboardMarkup(keybo)
    m.delete()
    msg.reply_text(text = text, reply_markup = markup, parse_mode = ParseMode.MARKDOWN)
  else:
    m.delete()
    msg.reply_text(text, parse_mode = ParseMode.MARKDOWN)