def _parse_reviews_response(self, user, reverse, data): #logging.info('%s Reviews' % data['reviews']['number_of_results'] ) if data is None or 'reviews' not in data or 'review' not in data['reviews']: return 0 reviewdata = data['reviews']['review'] if int(data['reviews']['number_of_results']) == 1: reviewdata = [reviewdata] #add single item to a list so for loop is consistent numdone = 0 itr = iter(reviewdata) if reverse: itr = reversed(reviewdata) for item in itr: if(item == '' or (int(item.get('updated', 0)) > 0 and int(item.get('updated', 0)) <= user.last_netflix_review)): continue numdone = numdone+1 title_id = None for link in item['link']: if link['rel'] == 'http://schemas.netflix.com/catalog/title': title_id = link['href'] title = NetflixTitle.get_by_key_name(title_id); #logging.info('Movie %s' % item.get('title').get('regular')) if not title: addTask(url='/workeraddtitle', params={'title_id':title_id, 'item':simplejson.dumps(item)}) #self._create_title(title_id, item, user) addTask(url='/workeraddreview', params={'user_key':user.key().name(), 'title_key':title_id, 'rating':item.get('user_rating','0.0'), 'review':item.get('write-up'), 'submitted':item.get('updated')}) if numdone > 0: addTask(url='/workersharerating', params={'user_key':user.key().name(), 'title_key':title_id}) logging.info('%d Reviews Done' % numdone) return numdone
def _parse_ratings_response(self, user, reverse, data): if data is None or 'ratings_item' not in data['ratings']: if user.rating_count > 0: logging.warning('No ratings for user: %s' % user.key().name ) return 0 #logging.info('%d Ratings' % len(data['ratings']['ratings_item']) ) ratingsdata = data['ratings']['ratings_item'] item = None try: itr = iter(ratingsdata) for item in itr: if item: testvar = item.get('release_year'); except: ratingsdata = [ratingsdata] #add single item to a list so for loop is consistent numdone = 0 itr = iter(ratingsdata) if reverse: itr = reversed(ratingsdata) for item in itr: try: if(item == '' or item.get('user_rating') is None or item.get('average_rating','0.0') == '0.0' or (int(item.get('updated', 0)) > 0 and int(item.get('updated', 0)) < user.last_netflix_rating)): continue except: logging.info('item.get error, was %s' % item) continue title_id = None for link in item['link']: if link['rel'] == 'http://schemas.netflix.com/catalog/title': title_id = link['href'] title = NetflixTitle.get_by_key_name(title_id); if not title: addTask(url='/workeraddtitle', params={'title_id':title_id, 'item':simplejson.dumps(item)}) else: #check if we already did this rating (its possible for a new rating to have the same updated date as a rating weve already seen) if (int(item.get('updated', 0)) > 0 and int(item.get('updated', 0)) == user.last_netflix_rating): existingrating = NetflixRating(title=title, user=user).all().filter('user ='******'title =', title).get() if existingrating is not None: continue numdone = numdone+1 #task - add rating addTask(url='/workeraddrating', params={'user_key':user.key().name(), 'title_key':title_id, 'rating':item.get('user_rating'), 'submitted':item.get('updated')}) if numdone > 0: addTask(url='/workersharerating', params={'user_key':user.key().name(), 'title_key':title_id}) logging.info('%d Ratings Done' % numdone) return numdone