#download files from youtube using rss feeds import urllib.request import xml.etree.ElementTree as ET import requests import csv import os.path import re import shutil from datetime import datetime def getname(name,scheme): #find matching [*] locs=re.findall('(?<=\[)[^\[\]]+(?=\])',scheme) digits=[] for loc in locs: mstr='(?<='+loc+')[0-9]+' dig=re.findall(mstr,name) if(len(dig)>0): digits.append(dig[0]) schema=re.split('(\[[^\[\]]+\])',scheme) nname='' count=0 for bit in schema: if(re.match('\[.*\]',bit)): if(len(digits)>count): nname+=digits[count].zfill(2) count+=1 else: nname+=bit if(count == len(locs)): return nname else: return name def downloadfile(name,dest,url): name=name+".mp4" print('Saving to: '+name) urllib.request.urlretrieve(url,name) print('Moving to: '+dest+name) shutil.move(name,dest+name) print('Done') def downloadfromfeed(feed): url=feed[1] dest=feed[2] filt=feed[3] scheme=feed[4] lastdl=datetime.strptime(feed[5], '%Y-%m-%d %H:%M:%S') response = urllib.request.urlopen(url) data = response.read() text = data.decode('utf-8') root = ET.fromstring(text) for child in root.findall('.//item'): title=child.find('.//title') date=datetime.strptime(child.find('.//pubDate').text, '%a, %d %b %Y %H:%M:%S %Z') if(date>lastdl): if(filt in title.text): if(date>datetime.strptime(feed[5], '%Y-%m-%d %H:%M:%S')): feed[5]=date.strftime('%Y-%m-%d %H:%M:%S') enc=child.find('.//enclosure') name=title.text target=enc.attrib.get('url') print('Downloading: '+name) fname=getname(name,scheme) downloadfile(fname,dest,target) def downloadfeeds(feeds): for feed in feeds: downloadfromfeed(feed) def readcsv(f,base): data=[] if(os.path.exists(f)): with open(f) as csvfile: reader=csv.reader(csvfile, delimiter='\t') for row in reader: data.append(row) dnames=[row[0] for row in data] with open(base) as basefile: reader=csv.reader(basefile, delimiter='\t') for row in reader: if(row[0] not in dnames): row.append('2000-01-01 01:01:01') data.append(row) dnames.append(row[0]) return data def savecsv(data,f): with open(f, 'w') as csvfile: writer=csv.writer(csvfile, delimiter='\t') writer.writerows(data) os.chdir('/root/scripts/ytdownloader') csvfile='feeds.csv' csvbase='feedsbase.csv' data=readcsv(csvfile,csvbase) downloadfeeds(data) print(data) savecsv(data,csvfile)