use google search

This commit is contained in:
Gordon Shumway 2019-12-05 07:57:59 -05:00 committed by GitHub
parent 8fe0c3d930
commit 905823b1fd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 42 additions and 11 deletions

View File

@ -11,8 +11,11 @@ import supybot.plugins as plugins
import supybot.ircutils as ircutils import supybot.ircutils as ircutils
import supybot.callbacks as callbacks import supybot.callbacks as callbacks
import supybot.ircmsgs as ircmsgs import supybot.ircmsgs as ircmsgs
from bs4 import BeautifulSoup
import requests
import re import re
import pylyrics3 import pylyrics3
from fake_useragent import UserAgent
try: try:
from supybot.i18n import PluginInternationalization from supybot.i18n import PluginInternationalization
@ -26,21 +29,49 @@ class Lyrics(callbacks.Plugin):
"""Retrieves song lyrics""" """Retrieves song lyrics"""
threaded = True threaded = True
def dosearch(self, lyric):
try:
searchurl = "https://www.google.com/search?&q={0} site:lyrics.fandom.com/wiki/".format(lyric)
ua = UserAgent()
header = {'User-Agent':str(ua.random)}
data = requests.get(searchurl, headers=header)
soup = BeautifulSoup(data.text)
elements = soup.select('.r a')
url = elements[0]['href']
url = re.split('https?://', url)[-1]
url = re.sub("&rct=.*", "", url)
url = "https://{0}".format(url)
title = soup.find("h3").getText()
except Exception:
return
else:
return title, url
def getlyrics(self, url):
try:
lyrics = pylyrics3.get_lyrics_from_url(url)
lyrics = re.sub('(?<!\.|\!|\?)\s\\n', '.', lyrics).replace(" \n", "")
except Exception:
lyrics = pylyrics3.get_lyrics_from_url(url)
lyrics = re.sub('(?<!\.|\!|\?)\s\\n', '.', lyrics).replace(" \n", "")
else:
return lyrics
def lyric(self, irc, msg, args, lyric): def lyric(self, irc, msg, args, lyric):
"""<text> """<text>
Get song lyrics from Lyrics Wiki. Format searches as artist, song name Get song lyrics from Lyrics Wiki. Search powered by Google.
""" """
if ',' in lyric: try:
lyric = lyric.split(',', 1) title, url = self.dosearch(lyric)
except Exception:
irc.reply("No results found for {0}".format(lyric))
else: else:
irc.reply("Lyric searches must be formatted as artist, song name") try:
return lyrics = self.getlyrics(url)
lyrics = pylyrics3.get_song_lyrics(lyric[0].strip(), lyric[1].strip()) irc.reply(title.replace(":", " - "))
if lyrics and lyrics != 'None': irc.reply(lyrics)
lyrics = re.sub('(?<!\.|\!|\?)\s\\n', '.', lyrics).replace(" \n", "") except Exception:
irc.reply(lyrics) irc.reply("Unable to retrieve lyrics from {0}".format(url))
else:
irc.reply("No results found")
lyric = wrap(lyric, ['text']) lyric = wrap(lyric, ['text'])
Class = Lyrics Class = Lyrics