add mutagen / tagging

This commit is contained in:
Tomáš Mládek 2019-05-01 10:50:21 +02:00 committed by Tomáš Mládek
parent 4c7c43f39f
commit e7ad85fac9
3 changed files with 24 additions and 5 deletions

View file

@ -11,6 +11,7 @@ from glob import glob
import filetype import filetype
import markovify import markovify
import mutagen.id3
import pytumblr import pytumblr
import requests import requests
import youtube_dl import youtube_dl
@ -70,7 +71,7 @@ class DelojzaBot:
return True return True
return False return False
def download_ytdl(self, urls, subdir, date, extract=False, filename=None): def download_ytdl(self, urls, subdir, date, message, extract=False, filename=None):
ydl_opts = { ydl_opts = {
'noplaylist': True, 'noplaylist': True,
'restrictfilenames': True, 'restrictfilenames': True,
@ -86,14 +87,30 @@ class DelojzaBot:
with youtube_dl.YoutubeDL(ydl_opts) as ydl: with youtube_dl.YoutubeDL(ydl_opts) as ydl:
ydl.download(urls) ydl.download(urls)
out_dir = os.path.join(self.out_dir, subdir) out_dir = os.path.join(self.out_dir, subdir)
for filename in map(ydl.prepare_filename, map(ydl.extract_info, urls)): for info in [ydl.extract_info(url, download=False) for url in urls]:
filename = ydl.prepare_filename(info)
globbeds = glob(os.path.splitext(filename)[0] + '.*') globbeds = glob(os.path.splitext(filename)[0] + '.*')
for globbed in globbeds: for globbed in globbeds:
if globbed.endswith("mp3"):
title = info['track'] or (info['title'].split("-")[1]
if "-" in info['title'] else info['title'])
title = title.strip()
artist = info['artist'] or (info['title'].split("-")[0]
if "-" in info['title'] else info['title'])
artist = artist.strip()
message.reply_text("Tagging as \"{}\" by \"{}\"".format(title, artist))
self.logger.info("Tagging %s w/ $s - $s...".format(globbed, title, artist))
id3 = mutagen.id3.ID3(globbed)
id3.add(mutagen.id3.TIT2(encoding=3, text=title))
if artist and (not info['artist'] and artist != title):
id3.add(mutagen.id3.TOPE(encoding=3, text=artist))
id3.add(mutagen.id3.TPE1(encoding=3, text=artist))
id3.save()
self.logger.info("Moving %s to %s..." % (globbed, out_dir)) self.logger.info("Moving %s to %s..." % (globbed, out_dir))
shutil.move(globbed, out_dir) shutil.move(globbed, out_dir)
return [] return []
def download_raw(self, urls, subdir, date, extract=False, filename=None): def download_raw(self, urls, subdir, date, _, extract=False, filename=None):
filenames = [] filenames = []
for url in urls: for url in urls:
local_filename = os.path.join(self.out_dir, subdir, local_filename = os.path.join(self.out_dir, subdir,
@ -163,7 +180,7 @@ class DelojzaBot:
message.reply_text(reply) message.reply_text(reply)
filenames = download_fn(urls, hashtag or '.', message.date, extract=extract, filename=filename) filenames = download_fn(urls, hashtag or '.', message.date, message, extract=extract, filename=filename)
if hashtag == 'TUMBLR' and self.client: if hashtag == 'TUMBLR' and self.client:
message.reply_text('(btw, queueing to tumblr)') message.reply_text('(btw, queueing to tumblr)')
for filename in filenames: for filename in filenames:

View file

@ -2,5 +2,6 @@ python-telegram-bot
youtube-dl youtube-dl
requests requests
filetype filetype
mutagen
markovify markovify
pytumblr pytumblr

View file

@ -2,7 +2,7 @@
# This file is autogenerated by pip-compile # This file is autogenerated by pip-compile
# To update, run: # To update, run:
# #
# pip-compile --output-file requirements.txt requirements.in # pip-compile
# #
asn1crypto==0.24.0 # via cryptography asn1crypto==0.24.0 # via cryptography
certifi==2018.8.24 # via python-telegram-bot, requests certifi==2018.8.24 # via python-telegram-bot, requests
@ -13,6 +13,7 @@ filetype==1.0.1
future==0.16.0 # via python-telegram-bot, pytumblr future==0.16.0 # via python-telegram-bot, pytumblr
idna==2.7 # via cryptography, requests idna==2.7 # via cryptography, requests
markovify==0.7.1 markovify==0.7.1
mutagen==1.42.0
oauthlib==2.1.0 # via requests-oauthlib oauthlib==2.1.0 # via requests-oauthlib
pycparser==2.19 # via cffi pycparser==2.19 # via cffi
python-telegram-bot==11.1.0 python-telegram-bot==11.1.0