Last active
May 12, 2016 17:39
-
-
Save sli/08637ee09b420395ddf1c39698f4812c to your computer and use it in GitHub Desktop.
DragonBallGo.co API
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import re | |
import requests | |
import urllib.parse | |
from bs4 import BeautifulSoup | |
url_base = 'http://dragonballgo.co/series/' | |
episode_base = 'http://dragonballgo.co/lib/picasa.php' | |
post_re = re.compile('data: (.*?)') | |
class Episode(object): | |
def __init__(self, title, url_base): | |
self.title = title.replace(' (Subbed)', '').replace(' (Dubbed)', '').strip() | |
self.url_base = url_base | |
self.number = self.title.split(' ')[-1] | |
self.episode_url = None | |
def __repr__(self): | |
return u'<Episode ({} [#{}])>'.format(self.title, self.number) | |
def get_episode_url(self): | |
if not self.episode_url: | |
r = requests.get(self.url_base) | |
if r.status_code == 200: | |
soup = BeautifulSoup(r.text, 'html.parser') | |
for s in soup.select('script'): | |
try: | |
s.text.index('data: ') | |
break | |
except: | |
s = None | |
pvars = s.text.strip().split('\n')[6].strip()[7:-2] | |
r = requests.post(episode_base, data=urllib.parse.parse_qs(pvars)) | |
soup = BeautifulSoup(r.text, 'html.parser') | |
self.episode_url = soup.select('source')[0]['src'] | |
return self.episode_url | |
else: | |
return None | |
else: | |
return self.episode_url | |
class Show(object): | |
def __init__(self, title, url_base): | |
self.url_base = url_base | |
t_parts = title.strip().split(' ') | |
if t_parts[-1] == '(Dubbed)': | |
self.type = 'Dub' | |
else: | |
self.type = 'Sub' | |
self.title = ' '.join(t_parts[:-1]) | |
self.episodes = None | |
def __repr__(self): | |
return u'<Show ({} [{}])>'.format(self.title, self.type) | |
def get_episodes(self): | |
if not self.episodes: | |
r = requests.get(self.url_base) | |
if r.status_code == 200: | |
soup = BeautifulSoup(r.text, 'html.parser') | |
self.episodes = [Episode(s.text, s['href']) for s in soup.select('table.listing > tbody > tr > td > a')] | |
self.episodes.reverse() | |
return self.episodes | |
else: | |
return None | |
else: | |
return self.episodes | |
class DragonBallGo(object): | |
def __init__(self): | |
self.shows = None | |
def get_shows(self): | |
if not self.shows: | |
r = requests.get(url_base) | |
if r.status_code == 200: | |
soup = BeautifulSoup(r.text, 'html.parser') | |
self.shows = [Show(s.select('span.title')[0].text, s['href']) for s in soup.select('h2 > a')] | |
return self.shows | |
else: | |
return None | |
else: | |
return self.shows | |
if __name__ == '__main__': | |
dbg = DragonBallGo() | |
shows = dbg.get_shows() | |
s = shows[0] | |
e = s.get_episodes()[0] | |
print(e.get_episode_url()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment