opensub almost done

This commit is contained in:
Julien Veyssier 2013-02-25 03:20:08 +01:00
commit d9ddfaafb0
2 changed files with 55 additions and 25 deletions

View file

@ -42,17 +42,21 @@ class OpensubtitlesBrowser(BaseBrowser):
def iter_subtitles(self, language, pattern):
lang = self.LANGUAGE_CONV[language]
self.location('http://www.opensubtitles.org/search2/sublanguageid-%s/moviename-%s' % (lang,pattern.encode('utf-8')))
assert self.is_on_page(SearchPage) or self.is_on_page(SubtitlesPage) or self.browser.is_on_page(SubtitlePage)
assert self.is_on_page(SearchPage) or self.is_on_page(SubtitlesPage) or self.is_on_page(SubtitlePage)
return self.page.iter_subtitles()
def get_subtitle(self, id):
""" the id is formed this way : id_movie|id_file
the id_movie helps to find the page
the id_file help to find the file into the page
if NO id_movie set, using id_file to form the URL
"""
ids = id.split('|')
id_movie = ids[0]
id_file = ids[1]
self.location('http://www.opensubtitles.org/search/sublanguageid-all/idmovie-%s' % id_movie)
if len(id_movie) > 0:
self.location('http://www.opensubtitles.org/search/sublanguageid-all/idmovie-%s' % id_movie)
else:
self.location('http://www.opensubtitles.org/subtitles/%s' % id_file)
assert self.is_on_page(SubtitlesPage) or self.is_on_page(SubtitlePage)
return self.page.get_subtitle(id_file)

View file

@ -29,6 +29,7 @@ from weboob.capabilities.subtitle import Subtitle
from weboob.capabilities.base import NotAvailable
from weboob.tools.browser import BasePage
from weboob.tools.misc import get_bytes_size
import time
__all__ = ['SubtitlesPage','SearchPage']
@ -42,19 +43,17 @@ class SearchPage(BasePage):
if len(tabresults) > 0:
table = tabresults[0]
# for each result line, explore the subtitle list page to iter subtitles
for line in table.getiterator('tr'):
for line in self.parser.select(table,'tr'):
links = self.parser.select(line,'a')
if len(links) > 0:
a = links[0]
url = a.attrib.get('href','')
if "ads.opensubtitles" in url:
continue
self.browser.location("http://www.opensubtitles.org%s"%url)
# TODO verifier si on ne chope pas toutes les lignes. plusieurs tableaux ?
assert self.browser.is_on_page(SubtitlesPage) or self.browser.is_on_page(SubtitlePage)
# subtitles page does the job
for subtitle in self.browser.page.iter_subtitles():
yield subtitle
if "ads.opensubtitles" not in url:
self.browser.location("http://www.opensubtitles.org%s"%url)
assert self.browser.is_on_page(SubtitlesPage) or self.browser.is_on_page(SubtitlePage)
# subtitles page does the job
for subtitle in self.browser.page.iter_subtitles():
yield subtitle
class SubtitlesPage(BasePage):
@ -65,35 +64,43 @@ class SubtitlesPage(BasePage):
if len(tabresults) > 0:
table = tabresults[0]
# for each result line, get informations
for line in table.getiterator('tr'):
idline = line.attrib.get('id','').replace('name','')
if idline == id_file:
for line in self.parser.select(table,'tr'):
id_line = line.attrib.get('id','').replace('name','')
# TODO gerer le multi pages
if id_line.strip() == id_file.strip():
return self.get_subtitle_from_line(line)
def iter_subtitles(self):
# TODO verifier les ads
tabresults = self.parser.select(self.document.getroot(),'table#search_results')
if len(tabresults) > 0:
table = tabresults[0]
# for each result line, get informations
for line in table.getiterator('tr'):
yield self.get_subtitle_from_line(line)
for line in self.parser.select(table,'tr'):
# some lines are useless, specially ads
if line.attrib.get('id','').startswith('name'):
yield self.get_subtitle_from_line(line)
def get_subtitle_from_line(self,line):
id_movie = line.attrib.get('id','').replace('name','')
id_movie = self.browser.geturl().split('idmovie-')[-1].split('/')[0]
cells = self.parser.select(line,'td')
if len(cells) > 0:
first_cell = cells[0]
links = self.parser.select(line,'a')
a = links[0]
urldetail = a.attrib.get('href','')
name = a.text
long_name = self.parser.select(first_cell,'span').attrib.get('title','')
name = u" ".join(a.text.strip().split())
spanlist = self.parser.select(first_cell,'span')
if len(spanlist) > 0:
long_name = spanlist[0].attrib.get('title','')
else:
long_name = "plop"
# TODO
#long_name = first_cell.content().split('<br>')[1]
name = "%s (%s)"%(name,long_name)
second_cell = cells[1]
link = self.parser.select(second_cell,'a',1)
lang = link.attrib.get('onclick','').split('/')[-1].split('-')[-1]
nb_cd = cells[2].text.strip().lower().replace('CD','')
lang = link.attrib.get('href','').split('/')[-1].split('-')[-1]
nb_cd = int(cells[2].text.strip().lower().replace('cd',''))
fps = 0
desc = ''
cell_dl = cells[4]
@ -115,8 +122,27 @@ class SubtitlePage(BasePage):
""" Page which contains a single subtitle for a movie
"""
def get_subtitle(self,id):
return []
father = self.parser.select(self.document.getroot(),'a#app_link',1).getparent()
a = self.parser.select(father,'a')[1]
id_file = a.attrib.get('href','').split('/')[-1]
url = "http://www.opensubtitles.org/subtitleserve/sub/%s"%id_file
id_movie = ""
sid = "%s|%s"%(id_movie,id_file)
link = self.parser.select(self.document.getroot(),'link[rel=bookmark]',1)
title = link.attrib.get('title','')
nb_cd = int(title.lower().split('cd')[0].split()[-1])
lang = title.split('(')[1].split(')')[0]
# TODO improve
name = title
fps = 0
subtitle = Subtitle(sid,name)
subtitle.url = url
subtitle.fps = fps
subtitle.language = lang
subtitle.nb_cd = nb_cd
subtitle.description = "no desc"
return subtitle
def iter_subtitles(self):
return
yield "plop"
yield self.get_subtitle(None)