music-dl/src/extractors/zaycev.py

52 lines
1.9 KiB
Python
Raw Normal View History

2018-01-23 13:39:49 -06:00
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
from __future__ import unicode_literals # at top of module
2018-01-23 13:39:49 -06:00
import re
import json
import requests
import logging
2018-01-23 13:39:49 -06:00
from bs4 import BeautifulSoup
2018-01-24 17:41:18 -06:00
from . import baseFile
2018-01-23 13:39:49 -06:00
log = logging.getLogger("extractors.zaycev.net")
2018-01-23 13:39:49 -06:00
class interface(object):
2018-07-11 11:21:55 -05:00
name = "zaycev.net"
2018-01-23 13:39:49 -06:00
def __init__(self):
self.results = []
self.needs_transcode = False
log.debug("Started extraction service for zaycev.net")
2018-01-23 13:39:49 -06:00
def search(self, text, page=1):
if text == "" or text == None:
raise ValueError("Text must be passed and should not be blank.")
2018-12-28 19:46:26 -06:00
site = "http://zaycev.net/search.html?query_search=%s" % (text,)
log.debug("Retrieving data from {0}...".format(site,))
2018-01-23 13:39:49 -06:00
r = requests.get(site)
soup = BeautifulSoup(r.text, 'html.parser')
2018-12-28 19:46:26 -06:00
search_results = soup.find_all("div", {"class": "musicset-track__title track-geo__title"})
2018-01-23 13:39:49 -06:00
self.results = []
2018-12-28 19:46:26 -06:00
for i in search_results:
# The easiest method to get artist and song names is to fetch links. There are only two links per result here.
data = i.find_all("a")
# from here, data[0] contains artist info and data[1] contains info of the retrieved song.
s = baseFile.song(self)
2018-12-28 19:46:26 -06:00
s.title = data[1].text
s.artist = data[0].text
s.url = "http://zaycev.net%s" % (data[1].attrs["href"])
# s.duration = self.hd[i]["duration"]
# s.size = self.hd[i]["size"]
# s.bitrate = self.hd[i]["bitrate"]
2018-01-23 13:39:49 -06:00
self.results.append(s)
log.debug("{0} results found.".format(len(self.results)))
2018-01-23 13:39:49 -06:00
def get_download_url(self, url):
log.debug("Getting download URL for {0}".format(url,))
2018-01-23 13:39:49 -06:00
soups = BeautifulSoup(requests.get(url).text, 'html.parser')
data = json.loads(requests.get('http://zaycev.net' + soups.find('div', {'class':"musicset-track"}).get('data-url')).text)
log.debug("Download URL: {0}".format(data["url"]))
return data["url"]
def format_track(self, item):
return "{0}. {1}. {2}".format(item.title, item.duration, item.size)