Skip to content

Instantly share code, notes, and snippets.

@sli
Last active May 12, 2016 17:39
Show Gist options
  • Save sli/08637ee09b420395ddf1c39698f4812c to your computer and use it in GitHub Desktop.
Save sli/08637ee09b420395ddf1c39698f4812c to your computer and use it in GitHub Desktop.
DragonBallGo.co API
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