def get(self, boker_id): boker = Boker.get_by_id(int(boker_id)) if boker: deferred.defer(update_num_view, str(boker.key())) # Check post type, Video or Photo if boker.video_id and boker.video_source: self.template = 'video.html' if self.current_user is not None: user = User.get_by_key_name(self.current_user['id']) can_like = not Like.already_like(user, boker) else: can_like = False else: active_contest = Contest.active_contest() if active_contest: is_nominee = Contest.is_nominee(boker) if self.current_user is not None: user = User.get_by_key_name(self.current_user['id']) can_vote = not Vote.already_vote(user) can_like = not Like.already_like(user, boker) else: can_vote = False can_like = False querystring = self.request.GET return self.render_response(self.template, locals()) else: self.abort(404)
def like_boker(user_key, boker_key, explicitly_shared=False): """Like a boker""" user = User.get_by_key_name(user_key) boker = Boker.get(boker_key) boker_owner = boker.user if user and boker and not Like.already_like(user, boker): # Create like like = Like(user=user, boker=boker) like.put() # Update like numbers boker.num_like += 1 boker.put() if not settings.DEBUG: # Post to FB try: boker_url = "%s/boker/%s" % (settings.APP_DOMAIN, boker.key().id()) graph = facebook.GraphAPI(user.access_token) graph.request('me/og.likes', post_args={'object': boker_url, 'fb:explicitly_shared': str(explicitly_shared).lower()}) except Exception as e: print e # Notify Boker owner if user != boker_owner: try: boker_url = encode_url("/boker/%s" % boker.key().id()) graph = facebook.GraphAPI(settings.FACEBOOK_APP_ACCESS_TOKEN) graph.request('%s/notifications' % boker_owner.id, post_args={ 'href': '?to=' + boker_url, 'template': '@[%s] menyukai boker anda.' % user.id, }) except Exception as e: print e else: logging.info('Runtask: post_like_story...')
def get(self): qs = {} page = int(self.request.get('page') or 1) limit = int(self.request.get('limit') or settings.PAGINATION_LIMIT) sort_name, sort_field = self.sorter() qs['sort'] = sort_name bokers = Boker.all().order(sort_field) # Current loggedin User current_user = None if self.current_user: current_user = User.get_by_key_name(self.current_user['id']) # Filter by user user_filter = self.request.get('username') if user_filter: qs['username'] = user_filter user = User.gql("WHERE username=:1", user_filter).get() bokers.filter('user ='******'s objects = [] for b in bokers: # Check if user can like a boker user_can_like = False if current_user: user_can_like = not Like.already_like(current_user, b) data = { 'user': { 'id': b.user.id, 'username': b.user.username, 'name': b.user.name, 'url': self.uri_for('user', username=b.user.username), }, 'current_user': { 'id': None, 'username': None, }, 'id': b.key().id(), 'key': str(b.key()), 'created': naturaltime(b.created), 'is_new': is_new(b.created), 'description': b.description, 'permalink': self.uri_for('boker_view', boker_id=b.key().id()), 'num_comment': b.num_comment, 'num_view': b.num_view, 'num_like': b.num_like, 'can_like': user_can_like, } if b.photo: data['type'] = 'photo' data['photo'] = {'key': str(b.photo.key())} if b.video_id: data['type'] = 'video' data['embed'] = {'id': b.video_id, 'url': 'http://www.youtube.com/embed/' + b.video_id} if self.current_user: data['current_user'] = { 'id': self.current_user.get('id'), 'username': self.current_user.get('username'), } objects.append(data) # metadata qs.update({'page': page+1}) next_qs = self._build_qs(qs) qs.update({'page': page-1}) previous_qs = self._build_qs(qs) meta = { 'count': len(objects), 'limit': limit, 'page': page, 'next_url': '%s?%s' % (self.uri_for('streams'), next_qs) if page < num_pages else None, 'previous_url': '%s?%s' % (self.uri_for('streams'), previous_qs) if page > 1 else None, 'pages': num_pages, } streams = dict( meta=meta, objects=objects, ) self.response.headers['Content-Type'] = 'application/json' self.response.out.write(json.dumps(streams))