Added functionality to download an entire playlist based off of a textfile. Also wrote instructions for how to do it in the README

This commit is contained in:
Kepoor Hampond 2016-07-14 13:06:53 -07:00
parent ba18e8026c
commit 5cb3c3b201
2 changed files with 60 additions and 13 deletions

View file

@ -67,15 +67,32 @@ $ irs (stream | download) movie <movie-name>
$ irs (stream | download) tv <tv-show> <episode> $ irs (stream | download) tv <tv-show> <episode>
$ irs (stream | download) song <song-name> by <artist> $ irs (stream | download) song <song-name> by <artist>
$ irs (stream | download) album <album-name> by <artist> $ irs (stream | download) album <album-name> by <artist>
$ irs (stream | download) playlist <txt-file-name>
``` ```
##### Examples The text file should be formatted like so: `<song>: <artist>`
```
Unforgettable: Nat King Cole
99 Luftballons: Nena
Ride Of The Valkyries: Budapest Symphony Orchestra
MTV Theme "Man On The Moon": Jonathan Elias & John Peterson
The Times They Are A-Changin': Bob Dylan
Everybody Wants To Rule The World: Studio Group
Protest: Philip Glass
The Sound Of Silence: Simon & Garfunkel
All Along The Watchtower: Jimi Hendrix
Desolation Row: My Chemical Romance
First We Take Manhattan: Dominic Frontiere
```
#### Examples
```bash ```bash
$ irs stream movie Fight Club $ irs stream movie Fight Club
$ irs download album A Night At The Opera by Queen $ irs download album A Night At The Opera by Queen
$ irs stream song Where Is My Mind by The Pixies $ irs stream song Where Is My Mind by The Pixies
$ irs download tv mr.robot s01e01 $ irs download tv mr.robot s01e01
$ irs stream album A Day At The Races by Queen $ irs stream album A Day At The Races by Queen
$ irs download playlist "Raid The Arcade.txt"
``` ```
### Disclaimer ### Disclaimer
Copyrighted content may be illegal to stream and/or download in your country. Copyrighted content may be illegal to stream and/or download in your country.

52
irs.py
View file

@ -120,13 +120,13 @@ def rip_mp3(song, author, album, tracknum):
def output(string): def output(string):
if string == "q": if string == "q":
return colored("[?]", "magenta") return colored("[?]", "cyan", attrs=['bold'])
elif string == "e": elif string == "e":
return colored("[-]", "red") return colored("[-]", "red", attrs=['bold'])
elif string == "g": elif string == "g":
return colored("[+]", "green") return colored("[+]", "green", attrs=['bold'])
elif string == "s": elif string == "s":
return colored("[*]", "blue") return colored("[*]", "blue", attrs=['bold'])
def visible(element): def visible(element):
if element.parent.name in ['style', 'script', '[document]', 'head', 'title']: if element.parent.name in ['style', 'script', '[document]', 'head', 'title']:
@ -187,20 +187,47 @@ def get_torrent_url(args, category):
search_request_response = requests.get(search_url, verify=True) search_request_response = requests.get(search_url, verify=True)
soup = BeautifulSoup(search_request_response.text, 'html.parser') soup = BeautifulSoup(search_request_response.text, 'html.parser')
choice = False choice = False
results = True
i = 0 i = 0
print ("") print ("")
while choice == False: while choice == False:
movie_page = soup.find_all("a", class_="cellMainLink") movie_page = soup.find_all("a", class_="cellMainLink")
for number in range(0,5): for number in range(0,10):
try:
print ("%s. " % (number + 1) + movie_page[number].string) print ("%s. " % (number + 1) + movie_page[number].string)
except Exception:
print (output('e') + " End of results.")
# Errors should never pass silently.
pass # - Zen of Python
a = int(str(input("\n%s What torrent would you like? " % output("q")))) - 1 a = int(str(input("\n%s What torrent would you like? " % output("q")))) - 1
if a in (0, 1, 2, 3, 4): if a in tuple(range(0, 10)):
search_url = requests.get('https://kat.cr' + movie_page[a].get('href'), verify=True) search_url = requests.get('https://kat.cr' + movie_page[a].get('href'), verify=True)
soup = BeautifulSoup(search_url.text, 'html.parser') soup = BeautifulSoup(search_url.text, 'html.parser')
torrent_url = 'https:' + soup.find_all('a', class_='siteButton')[0].get('href') torrent_url = 'https:' + soup.find_all('a', class_='siteButton')[0].get('href')
choice = True choice = True
return torrent_url return torrent_url
def rip_playlist(file_name, what_to_do):
txt_file = open(file_name, 'r')
things_that_went_wrong = []
something_went_wrong = False
for line in txt_file:
try:
arr = line.split(": ")
song = arr[0]
artist = arr[1]
if what_to_do == "download":
rip_mp3(song, artist, "", "")
elif what_to_do == "stream":
os.system("mpv '%s' --no-video" % find_mp3(song, artist))
except Exception as e:
something_went_wrong = True
things_that_went_wrong.append(line)
pass
if something_went_wrong == True:
print ("%s Something was wrong with the formatting of the following lines:" % output("e"))
for i in things_that_went_wrong: print ("\t%s" % i)
def main(): def main():
try: try:
i = 0 i = 0
@ -226,6 +253,9 @@ def main():
album_name = (" ".join(args)).split(" by ") album_name = (" ".join(args)).split(" by ")
get_album(album_name[0], album_name[1], what_to_do) get_album(album_name[0], album_name[1], what_to_do)
elif media == "playlist":
rip_playlist(args[-1], what_to_do)
elif media == "movie": elif media == "movie":
if what_to_do == "stream": if what_to_do == "stream":
os.system('peerflix "%s" -a -d --vlc' % get_torrent_url(args, 'movie')) os.system('peerflix "%s" -a -d --vlc' % get_torrent_url(args, 'movie'))
@ -250,22 +280,22 @@ def main():
else: else:
print ("%s Something went wrong:\n" % output("e") + repr(e) + "\n") print ("%s Something went wrong:\n" % output("e") + repr(e) + "\n")
def columns(columns):
for row in columns:
print("{: >15} {: >15}".format(*row))
def invalid_format(): def invalid_format():
# I feel like there should be an easier way to write out help for command-line interfaces ... # I feel like there should be an easier way to write out help for command-line interfaces ...
print ("Usage:") print ("Usage:")
print (""" irs (stream | download) movie <movie-name> print (""" irs (stream | download) movie <movie-name>
irs (stream | download) tv <tv-show> <episode> irs (stream | download) tv <tv-show> <episode>
irs (stream | download) song <song-name> by <artist> irs (stream | download) song <song-name> by <artist>
irs (stream | download) album <album-name> by <artist>""") irs (stream | download) album <album-name> by <artist>
irs (stream | download) playlist <txt-file-name>""")
print ("Examples:") print ("Examples:")
print (""" irs stream movie Fight Club print (""" irs stream movie Fight Club
irs download album A Night At The Opera by Queen irs download album A Night At The Opera by Queen
irs stream song Where Is My Mind by The Pixies irs stream song Where Is My Mind by The Pixies
irs download tv mr.robot s01e01 irs download tv mr.robot s01e01
irs stream album A Day At The Races by Queen""") irs stream album A Day At The Races by Queen
irs download playlist "Rock Save The Queen.txt" """)
print ("\nFor more info see: https://github.com/kepoorhampond/IngeniousRedistributionSystem")
if __name__ == '__main__': if __name__ == '__main__':
main() main()