Skip to content

Instantly share code, notes, and snippets.

@ColinGreybosh
Created August 17, 2018 23:11
Show Gist options
  • Save ColinGreybosh/d8ab335efdeb19dbb7a3e4a26cda8489 to your computer and use it in GitHub Desktop.
Save ColinGreybosh/d8ab335efdeb19dbb7a3e4a26cda8489 to your computer and use it in GitHub Desktop.
from collections import OrderedDict
from urllib.parse import quote
from mp3_tagger import *
import requests
import bs4
import os
__dirpath__ = f'{os.path.dirname(os.path.abspath(__file__))}/'
def get_google_results(query):
base_url = 'https://www.google.com/search?q='
url = base_url + quote(query)
headers = {'user-agent':
'Mozilla/5.0 (Windows NT 10.0; Win64; x64) '
'AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/60.0.3112.113 Safari/537.36'}
res = requests.get(url, headers=headers)
res.raise_for_status()
return res
def save_html_to_file(res, file_name):
html_filename = f'data/{file_name}.html'
os.makedirs(os.path.dirname(html_filename), exist_ok=True)
with open(html_filename, "wb") as html_file:
for chunk in res.iter_content(100000):
html_file.write(chunk)
html_file.close()
def parse_results(res):
soup = bs4.BeautifulSoup(res.text, "lxml")
labels = soup.select('span.w8qArf > a')
info = soup.select('span.LrzXr.kno-fv')
list(OrderedDict.fromkeys(labels))
list(OrderedDict.fromkeys(info))
return list(zip([tag.getText() for tag in labels],
[tag.getText() for tag in info]))
def save_tags(tags, mp3_filename):
print(tags)
song = MP3File(f'{__dirpath__}{mp3_filename}')
for tag in tags:
if 'Genre' in tag[0]:
print(tag[1])
song.set_version(VERSION_2)
song.genre = tag[1].replace(', ', ';')
song.set_version(VERSION_BOTH)
if 'Released' in tag[0]:
print(tag[1])
song.year = tag[1]
song.save()
def main():
directory = os.fsencode(__dirpath__)
for file in os.listdir(directory):
mp3_filename = os.fsdecode(file)
if mp3_filename.endswith(".mp3"):
song_name = mp3_filename[:-4]
print(song_name)
res = get_google_results(f'{song_name} song genre and released')
save_html_to_file(res, song_name)
music_tags = parse_results(res)
if len(music_tags) != 0:
save_tags(music_tags, mp3_filename)
print('')
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment