100 lines
2.4 KiB
Python
100 lines
2.4 KiB
Python
#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)
|
|
|