diff --git a/ox/web/google.py b/ox/web/google.py
index fc1f420..72aa32f 100644
--- a/ox/web/google.py
+++ b/ox/web/google.py
@@ -21,11 +21,11 @@ def find(query, max_results=DEFAULT_MAX_RESULTS, timeout=DEFAULT_TIMEOUT):
"""
Return max_results tuples with title, url, description
- >>> find("The Matrix site:imdb.com", 1)[0][0]
- u'The Matrix (1999) - IMDb'
+ >>> str(find("The Matrix site:imdb.com", 1)[0][0])
+ 'The Matrix (1999) - IMDb'
- >>> find("The Matrix site:imdb.com", 1)[0][1]
- u'http://www.imdb.com/title/tt0133093/'
+ >>> str(find("The Matrix site:imdb.com", 1)[0][1])
+ 'http://www.imdb.com/title/tt0133093/'
"""
results = []
offset = 0
diff --git a/ox/web/imdb.py b/ox/web/imdb.py
index cc0cc48..fa9925e 100644
--- a/ox/web/imdb.py
+++ b/ox/web/imdb.py
@@ -7,7 +7,7 @@ import time
import unicodedata
from six.moves.urllib.parse import urlencode
-from six import string_types
+from six import text_type, string_types
from .. import find_re, strip_tags, decode_html
from .. import cache
@@ -27,11 +27,11 @@ def get_url(id):
class Imdb(SiteParser):
'''
- >>> Imdb('0068646')['title']
- u'The Godfather'
+ >>> Imdb('0068646')['title'] == text_type(u'The Godfather')
+ True
- >>> Imdb('0133093')['title']
- u'The Matrix'
+ >>> Imdb('0133093')['title'] == text_type(u'The Matrix')
+ True
'''
regex = {
'alternativeTitles': {
@@ -313,11 +313,11 @@ class Imdb(SiteParser):
return self._cache[url]
def __init__(self, id, timeout=-1):
- #use akas.imdb.com to always get original title:
- #http://www.imdb.com/help/show_leaf?titlelanguagedisplay
+ # use akas.imdb.com to always get original title:
+ # http://www.imdb.com/help/show_leaf?titlelanguagedisplay
self.baseUrl = "http://akas.imdb.com/title/tt%s/" % id
super(Imdb, self).__init__(timeout)
-
+
url = self.baseUrl + 'combined'
page = self.read_url(url, timeout=-1)
if '
IMDb: Page not found' in page \
@@ -640,25 +640,25 @@ def get_movie_by_title(title, timeout=-1):
If there is more than one film with that title for the year
Title (Year/I)
- >>> get_movie_by_title(u'"Father Knows Best" (1954) {(#5.34)}')
- u'1602860'
+ >>> str(get_movie_by_title(u'"Father Knows Best" (1954) {(#5.34)}'))
+ '1602860'
- >>> get_movie_by_title(u'The Matrix (1999)')
- u'0133093'
+ >>> str(get_movie_by_title(u'The Matrix (1999)'))
+ '0133093'
- >>> get_movie_by_title(u'Little Egypt (1951)')
- u'0043748'
+ >>> str(get_movie_by_title(u'Little Egypt (1951)'))
+ '0043748'
+
+ >>> str(get_movie_by_title(u'Little Egypt (1897/I)'))
+ '0214882'
- >>> get_movie_by_title(u'Little Egypt (1897/I)')
- u'0214882'
-
>>> get_movie_by_title(u'Little Egypt')
None
- >>> get_movie_by_title(u'"Dexter" (2006) {Father Knows Best (#1.9)}')
- u'0866567'
+ >>> str(get_movie_by_title(u'"Dexter" (2006) {Father Knows Best (#1.9)}'))
+ '0866567'
'''
- params = {'s':'tt','q': title}
+ params = {'s': 'tt', 'q': title}
if not isinstance(title, bytes):
try:
params['q'] = unicodedata.normalize('NFKC', params['q']).encode('latin-1')
@@ -676,20 +676,21 @@ def get_movie_by_title(title, timeout=-1):
def get_movie_id(title, director='', year='', timeout=-1):
'''
- >>> get_movie_id('The Matrix')
- u'0133093'
+ >>> str(get_movie_id('The Matrix'))
+ '0133093'
- >>> get_movie_id('2 or 3 Things I Know About Her', 'Jean-Luc Godard')
- u'0060304'
+ >>> str(get_movie_id('2 or 3 Things I Know About Her', 'Jean-Luc Godard'))
+ '0060304'
- >>> get_movie_id('2 or 3 Things I Know About Her', 'Jean-Luc Godard', '1967')
- u'0060304'
+ >>> str(get_movie_id('2 or 3 Things I Know About Her', 'Jean-Luc Godard', '1967'))
+ '0060304'
- >>> get_movie_id(u"Histoire(s) du cinema: Le controle de l'univers", 'Jean-Luc Godard')
- u'0179214'
+ >>> str(get_movie_id(u"Histoire(s) du cinema: Le controle de l'univers", u'Jean-Luc Godard'))
+ '0179214'
+
+ >>> str(get_movie_id(u"Histoire(s) du cinéma: Le contrôle de l'univers", u'Jean-Luc Godard'))
+ '0179214'
- >>> get_movie_id(u"Histoire(s) du cinéma: Le contrôle de l'univers", 'Jean-Luc Godard')
- u'0179214'
'''
imdbId = {
(u'Le jour se l\xe8ve', u'Marcel Carn\xe9'): '0031514',
@@ -772,9 +773,6 @@ def get_movie_poster(imdbId):
'''
>>> get_movie_poster('0133093')
'http://ia.media-imdb.com/images/M/MV5BMjEzNjg1NTg2NV5BMl5BanBnXkFtZTYwNjY3MzQ5._V1._SX338_SY475_.jpg'
-
- >>> get_movie_poster('0994352')
- 'http://ia.media-imdb.com/images/M/MV5BMjA3NzMyMzU1MV5BMl5BanBnXkFtZTcwNjc1ODUwMg@@._V1._SX594_SY755_.jpg'
'''
info = ImdbCombined(imdbId)
if 'posterId' in info:
@@ -806,7 +804,7 @@ def max_votes():
url = 'http://www.imdb.com/search/title?num_votes=500000,&sort=num_votes,desc'
data = cache.read_url(url)
votes = max([int(v.replace(',', ''))
- for v in re.compile('([\d,]+) | ').findall(data)])
+ for v in re.compile('([\d,]+) | ').findall(data)])
return votes
def guess(title, director='', timeout=-1):
diff --git a/ox/web/impawards.py b/ox/web/impawards.py
index 855fbb1..f11ca12 100644
--- a/ox/web/impawards.py
+++ b/ox/web/impawards.py
@@ -10,14 +10,14 @@ from ox.text import find_re
def get_data(id):
'''
- >>> get_data('1991/silence_of_the_lambs')['imdbId']
- u'0102926'
+ >>> str(get_data('1991/silence_of_the_lambs')['imdbId'])
+ '0102926'
- >>> get_data('1991/silence_of_the_lambs')['posters'][0]
- u'http://www.impawards.com/1991/posters/silence_of_the_lambs_ver1.jpg'
+ >>> str(get_data('1991/silence_of_the_lambs')['posters'][0])
+ 'http://www.impawards.com/1991/posters/silence_of_the_lambs_ver1.jpg'
- >>> get_data('1991/silence_of_the_lambs')['url']
- u'http://www.impawards.com/1991/silence_of_the_lambs_ver1.html'
+ >>> str(get_data('1991/silence_of_the_lambs')['url'])
+ 'http://www.impawards.com/1991/silence_of_the_lambs_ver1.html'
'''
data = {
'url': get_url(id)
@@ -46,7 +46,6 @@ def get_data(id):
else:
poster = 'http://www.impawards.com/%s/%s' % (data['year'], find_re(html, '', re.DOTALL).findall(html)
for result in results:
url = 'http://impawards.com/%s' % result
ids.append(get_id(url))
return set(ids)
- #get all
- html = read_url('http://www.impawards.com/archives/latest.html', timeout = 60*60, unicode=True)
+ # get all
+ html = read_url('http://www.impawards.com/archives/latest.html', timeout=60*60, unicode=True)
pages = int(find_re(html, '')) + 1
for page in range(pages, 0, -1):
for id in get_ids(page):
- if not id in ids:
+ if id not in ids:
ids.append(id)
return ids
+
def get_url(id):
url = u"http://www.impawards.com/%s.html" % id
html = read_url(url, unicode=True)
diff --git a/ox/web/mininova.py b/ox/web/mininova.py
deleted file mode 100644
index 799390c..0000000
--- a/ox/web/mininova.py
+++ /dev/null
@@ -1,121 +0,0 @@
-# -*- coding: utf-8 -*-
-# vi:si:et:sw=4:sts=4:ts=4
-from datetime import datetime
-import re
-import socket
-from six.moves.urllib.parse import quote
-
-from ox.cache import read_url
-from ox import find_re, cache, strip_tags, decode_html, get_torrent_info, int_value, normalize_newlines
-from ox.normalize import normalize_imdbid
-import ox
-
-from torrent import Torrent
-
-
-def _parse_results_page(data, max_results=10):
- results=[]
- regexp = '''(.*?) | (.*?)(.*?).*? | .*?
'''
- for row in re.compile(regexp, re.DOTALL).findall(data):
- torrentDate = row[0]
- torrentExtra = row[1]
- torrentId = row[2]
- torrentTitle = decode_html(row[3]).strip()
- torrentLink = "http://www.mininova.org/tor/" + torrentId
- privateTracker = 'priv.gif' in torrentExtra
- if not privateTracker:
- results.append((torrentTitle, torrentLink, ''))
- return results
-
-def find_movie(query=None, imdb=None, max_results=10):
- '''search for torrents on mininova
- '''
- if imdb:
- url = "http://www.mininova.org/imdb/?imdb=%s" % normalize_imdbid(imdb)
- else:
- url = "http://www.mininova.org/search/%s/seeds" % quote(query)
- data = read_url(url, unicode=True)
- return _parse_results_page(data, max_results)
-
-def get_id(mininovaId):
- mininovaId = unicode(mininovaId)
- d = find_re(mininovaId, "/(\d+)")
- if d:
- return d
- mininovaId = mininovaId.split('/')
- if len(mininovaId) == 1:
- return mininovaId[0]
- else:
- return mininovaId[-1]
-
-def exists(mininovaId):
- mininovaId = get_id(mininovaId)
- data = ox.net.read_url("http://www.mininova.org/tor/%s" % mininovaId)
- if not data or 'Torrent not found...' in data:
- return False
- if 'tracker of this torrent requires registration.' in data:
- return False
- return True
-
-def get_data(mininovaId):
- _key_map = {
- 'by': u'uploader',
- }
- mininovaId = get_id(mininovaId)
- torrent = dict()
- torrent[u'id'] = mininovaId
- torrent[u'domain'] = 'mininova.org'
- torrent[u'comment_link'] = "http://www.mininova.org/tor/%s" % mininovaId
- torrent[u'torrent_link'] = "http://www.mininova.org/get/%s" % mininovaId
- torrent[u'details_link'] = "http://www.mininova.org/det/%s" % mininovaId
-
- data = read_url(torrent['comment_link'], unicode=True) + read_url(torrent['details_link'], unicode=True)
- if 'Torrent not found...
' in data:
- return None
-
- for d in re.compile('.(.*?):(.*?)
', re.DOTALL).findall(data):
- key = d[0].lower().strip()
- key = _key_map.get(key, key)
- value = decode_html(strip_tags(d[1].strip()))
- torrent[key] = value
-
- torrent[u'title'] = find_re(data, '(.*?):.*?')
- torrent[u'imdbId'] = find_re(data, 'title/tt(\d{7})')
- torrent[u'description'] = find_re(data, '(.*?)
')
- if torrent['description']:
- torrent['description'] = normalize_newlines(decode_html(strip_tags(torrent['description']))).strip()
- t = read_url(torrent[u'torrent_link'])
- torrent[u'torrent_info'] = get_torrent_info(t)
- return torrent
-
-class Mininova(Torrent):
- '''
- >>> Mininova('123')
- {}
- >>> Mininova('1072195')['infohash']
- '72dfa59d2338e4a48c78cec9de25964cddb64104'
- '''
- def __init__(self, mininovaId):
- self.data = get_data(mininovaId)
- if not self.data:
- return
- Torrent.__init__(self)
- ratio = self.data['share ratio'].split(',')
- self['seeder'] = -1
- self['leecher'] = -1
- if len(ratio) == 2:
- val = int_value(ratio[0].replace(',','').strip())
- if val:
- self['seeder'] = int(val)
- val = int_value(ratio[1].replace(',','').strip())
- if val:
- self['leecher'] = int(val)
- val = int_value(self.data['downloads'].replace(',','').strip())
- if val:
- self['downloaded'] = int(val)
- else:
- self['downloaded'] = -1
- published = self.data['added on']
- published = published.split(' +')[0]
- self['published'] = datetime.strptime(published, "%a, %d %b %Y %H:%M:%S")
-
diff --git a/ox/web/startpage.py b/ox/web/startpage.py
index 1df25a4..ca18437 100644
--- a/ox/web/startpage.py
+++ b/ox/web/startpage.py
@@ -21,10 +21,10 @@ def find(query, max_results=DEFAULT_MAX_RESULTS, timeout=DEFAULT_TIMEOUT):
Return max_results tuples with title, url, description
>>> find("The Matrix site:imdb.com", 1)[0][0]
- u'The Matrix (1999) - IMDb'
+ 'The Matrix (1999) - IMDb'
>>> find("The Matrix site:imdb.com", 1)[0][1]
- u'http://www.imdb.com/title/tt0133093/'
+ 'http://www.imdb.com/title/tt0133093/'
"""
results = []
url = 'https://eu1.startpage.com/do/search?nosteeraway=1&abp=1&language=english&cmd=process_search&query=%s&x=0&y=0&cat=web&engine0=v1all' % quote_plus(query)
diff --git a/ox/web/thepiratebay.py b/ox/web/thepiratebay.py
index 125ce7d..e9a6445 100644
--- a/ox/web/thepiratebay.py
+++ b/ox/web/thepiratebay.py
@@ -9,11 +9,10 @@ from ox import find_re, cache, strip_tags, decode_html, get_torrent_info, normal
from ox.normalize import normalize_imdbid
import ox
-from torrent import Torrent
-
cache_timeout = 24*60*60 # cache search only for 24 hours
season_episode = re.compile("S..E..", re.IGNORECASE)
+baseurl = "https://thepiratebay.org/"
def read_url(url, data=None, headers=cache.DEFAULT_HEADERS, timeout=cache.cache_timeout, valid=None, unicode=False):
@@ -25,7 +24,7 @@ def find_movies(query=None, imdb=None, max_results=10):
if imdb:
query = "tt" + normalize_imdbid(imdb)
results = []
- next = ["https://thepiratebay.se/search/%s/0/3/200" % quote(query), ]
+ next = [baseurl + "hsearch/%s/0/3/200" % quote(query), ]
page_count = 1
while next and page_count < 4:
page_count += 1
@@ -33,12 +32,12 @@ def find_movies(query=None, imdb=None, max_results=10):
if not url.startswith('http'):
if not url.startswith('/'):
url = "/" + url
- url = "https://thepiratebay.se" + url
+ url = baseurl + url
data = read_url(url, timeout=cache_timeout, unicode=True)
regexp = '''(.*?).*?'''
for row in re.compile(regexp, re.DOTALL).findall(data):
torrentType = row[0]
- torrentLink = "https://thepiratebay.se" + row[1]
+ torrentLink = baseurl + row[1]
torrentTitle = decode_html(row[2])
# 201 = Movies , 202 = Movie DVDR, 205 TV Shows
if torrentType in ['201']:
@@ -61,7 +60,7 @@ def get_id(piratebayId):
def exists(piratebayId):
piratebayId = get_id(piratebayId)
- return ox.net.exists("https://thepiratebay.se/torrent/%s" % piratebayId)
+ return ox.net.exists(baseurl + "torrent/%s" % piratebayId)
def get_data(piratebayId):
_key_map = {
@@ -75,7 +74,7 @@ def get_data(piratebayId):
torrent = dict()
torrent[u'id'] = piratebayId
torrent[u'domain'] = 'thepiratebay.org'
- torrent[u'comment_link'] = 'https://thepiratebay.se/torrent/%s' % piratebayId
+ torrent[u'comment_link'] = baseurl + 'torrent/%s' % piratebayId
data = read_url(torrent['comment_link'], unicode=True)
torrent[u'title'] = find_re(data, '(.*?) \(download torrent\) - TPB')
@@ -84,33 +83,15 @@ def get_data(piratebayId):
torrent[u'title'] = decode_html(torrent[u'title']).strip()
torrent[u'imdbId'] = find_re(data, 'title/tt(\d{7})')
title = quote(torrent['title'].encode('utf-8'))
- torrent[u'torrent_link']="http://torrents.thepiratebay.org/%s/%s.torrent" % (piratebayId, title)
+ torrent[u'magent_link']= find_re(data, '"(magnet:.*?)"')
+ torrent[u'infohash'] = find_re(torrent[u'magent_link'], "btih:(.*?)&")
for d in re.compile('dt>(.*?):.*?(.*?)', re.DOTALL).findall(data):
key = d[0].lower().strip()
key = _key_map.get(key, key)
value = decode_html(strip_tags(d[1].strip()))
- torrent[key] = value
+ if not '<' in key:
+ torrent[key] = value
torrent[u'description'] = find_re(data, '(.*?)
')
if torrent[u'description']:
torrent['description'] = normalize_newlines(decode_html(strip_tags(torrent['description']))).strip()
- t = read_url(torrent[u'torrent_link'])
- torrent[u'torrent_info'] = get_torrent_info(t)
return torrent
-
-class Thepiratebay(Torrent):
- '''
- >>> Thepiratebay('123')
- {}
-
- >>> Thepiratebay('3951349')['infohash']
- '4e84415d36ed7b54066160c05a0b0f061898d12b'
- '''
- def __init__(self, piratebayId):
- self.data = get_data(piratebayId)
- if not self.data:
- return
- Torrent.__init__(self)
- published = self.data['uploaded']
- published = published.replace(' GMT', '').split(' +')[0]
- self['published'] = datetime.strptime(published, "%Y-%m-%d %H:%M:%S")
-
diff --git a/ox/web/torrent.py b/ox/web/torrent.py
deleted file mode 100644
index 1312075..0000000
--- a/ox/web/torrent.py
+++ /dev/null
@@ -1,37 +0,0 @@
-# -*- coding: utf-8 -*-
-# vi:si:et:sw=4:sts=4:ts=4
-from ox import int_value
-
-
-class Torrent(dict):
- '''
- >>> Torrent()
- {'files': 1, 'domain': u'', 'subtitle language': u'', 'seeder': -1, 'description': u'', 'language': u'', 'title': u'', 'imdbId': u'', 'downloaded': -1, 'leecher': -1, 'torrent_link': u'', 'torrent_info': {}, 'published': u'', 'announce': '', 'infohash': '', 'id': u'', 'comment_link': u'', 'size': -1}
- '''
- _string_keys = ('id', 'title', 'description', 'infohash', 'torrent_link', 'comment_link',
- 'imdbId', 'announce', 'domain', 'published', 'language', 'subtitle language')
- _int_keys = ('size', 'seeder', 'leecher', 'downloaded', 'files')
- _dict_keys = ('torrent_info', )
- _list_keys = ()
- data = {'torrent_info': {}}
-
- def __init__(self):
- for key in self._string_keys:
- self[key] = self.data.get(key, u'')
- for key in self._dict_keys:
- self[key] = self.data.get(key, {})
- for key in self._list_keys:
- self[key] = self.data.get(key, [])
- for key in self._int_keys:
- value = self.data.get(key, -1)
- if not isinstance(value, int):
- value = int(int_value(value))
- self[key] = value
- self['infohash'] = self.data['torrent_info'].get('hash', '')
- self['size'] = self.data['torrent_info'].get('size', -1)
- self['announce'] = self.data['torrent_info'].get('announce', '')
- if 'files' in self.data['torrent_info']:
- self['files'] = len(self.data['torrent_info']['files'])
- else:
- self['files'] = 1
-