def get_session(username=None, password=None): """Creates a requests session which is authenticated to trakt.""" session = Session() session.headers = { 'Content-Type': 'application/json', 'trakt-api-version': 2, 'trakt-api-key': API_KEY } if username: session.headers['trakt-user-login'] = username if username and password: auth = {'login': username, 'password': password} try: r = session.post(urljoin(API_URL, 'auth/login'), data=json.dumps(auth)) except RequestException as e: if e.response and e.response.status_code in [401, 403]: raise plugin.PluginError( 'Authentication to trakt failed, check your username/password: %s' % e.args[0]) else: raise plugin.PluginError('Authentication to trakt failed: %s' % e.args[0]) try: session.headers['trakt-user-token'] = r.json()['token'] except (ValueError, KeyError): raise plugin.PluginError( 'Got unexpected response content while authorizing to trakt: %s' % r.text) return session
def get_session(username=None, password=None): """Creates a requests session which is authenticated to trakt.""" session = Session() session.headers = { 'Content-Type': 'application/json', 'trakt-api-version': 2, 'trakt-api-key': API_KEY } if username: session.headers['trakt-user-login'] = username if username and password: auth = {'login': username, 'password': password} try: r = session.post(urljoin(API_URL, 'auth/login'), data=json.dumps(auth)) except Timeout: # requests.exceptions.Timeout raise plugin.PluginError('Authentication timed out to trakt') except RequestException as e: if hasattr(e, 'response') and e.response.status_code in [401, 403]: raise plugin.PluginError('Authentication to trakt failed, check your username/password: %s' % e.args[0]) else: raise plugin.PluginError('Authentication to trakt failed: %s' % e.args[0]) try: session.headers['trakt-user-token'] = r.json()['token'] except (ValueError, KeyError): raise plugin.PluginError('Got unexpected response content while authorizing to trakt: %s' % r.text) return session
def get_session(username=None, password=None): """Creates a requests session which is authenticated to trakt.""" session = Session() session.headers = {"Content-Type": "application/json", "trakt-api-version": 2, "trakt-api-key": API_KEY} if username: session.headers["trakt-user-login"] = username if username and password: auth = {"login": username, "password": password} try: r = session.post(urljoin(API_URL, "auth/login"), data=json.dumps(auth)) except Timeout: # requests.exceptions.Timeout raise plugin.PluginError("Authentication timed out to trakt") except RequestException as e: if hasattr(e, "response") and e.response.status_code in [401, 403]: raise plugin.PluginError("Authentication to trakt failed, check your username/password: %s" % e.args[0]) else: raise plugin.PluginError("Authentication to trakt failed: %s" % e.args[0]) try: session.headers["trakt-user-token"] = r.json()["token"] except (ValueError, KeyError): raise plugin.PluginError("Got unexpected response content while authorizing to trakt: %s" % r.text) return session
def search(self, entry, config=None): """ Search for entries on SceneAccess """ try: multip = int(config['gravity_multiplier']) except KeyError: multip = 1 # Login... params = {'username': config['username'], 'password': config['password'], 'submit': 'come on in'} session = Session() session.headers = {'User agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0'} log.debug('Logging in to %s...' % URL) session.post(URL + 'login', data=params) # Prepare queries... BASE_URLS = list() entries = set() for category in self.processCategories(config): BASE_URLS.append(URL + '%(url_path)s?method=2%(category_url_string)s' % category) # Search... for search_string in entry.get('search_strings', [entry['title']]): search_string_normalized = normalize_unicode(clean_title(search_string)) search_string_url_fragment = '&search=' + quote(search_string_normalized.encode('utf8')) for url in BASE_URLS: url += search_string_url_fragment log.debug('Search URL for `%s`: %s' % (search_string, url)) page = session.get(url).content soup = get_soup(page) for result in soup.findAll('tr', attrs={'class': 'tt_row'}): entry = Entry() entry['title'] = result.find('a', href=re.compile(r'details\?id=\d+'))['title'] entry['url'] = URL + result.find('a', href=re.compile(r'.torrent$'))['href'] entry['torrent_seeds'] = result.find('td', attrs={'class': 'ttr_seeders'}).string entry['torrent_leeches'] = result.find('td', attrs={'class': 'ttr_leechers'}).string entry['search_sort'] = torrent_availability(entry['torrent_seeds'], entry['torrent_leeches'])*multip size = result.find('td', attrs={'class': 'ttr_size'}).next size = re.search('(\d+(?:[.,]\d+)*)\s?([KMG]B)', size) if size: if size.group(2) == 'GB': entry['content_size'] = int(float(size.group(1)) * 1000 ** 3 / 1024 ** 2) elif size.group(2) == 'MB': entry['content_size'] = int(float(size.group(1)) * 1000 ** 2 / 1024 ** 2) elif size.group(2) == 'KB': entry['content_size'] = int(float(size.group(1)) * 1000 / 1024 ** 2) else: entry['content_size'] = int(float(size.group(1)) / 1024 ** 2) entries.add(entry) return entries