def post(self): data = json.loads(self.request.body) actions = data.get('userActions', []) for action in actions: if 'payload' in action: credentials = StorageByKeyName(Credentials, data['userToken'], 'credentials').get() token = self._get_auth_token(data['userToken']) if credentials and token: mirror_service = util.create_service('mirror', 'v1', credentials) timeline_item = mirror_service.timeline().get(id=data['itemId']).execute() if action['payload'] == 'save': logging.debug('save to feedly') fa = FeedlyAPI(FEEDLY_USER, FEEDLY_SECRET) id_parts = self._parse_source_id(timeline_item['sourceItemId']) fa.addTagSave(id_parts['userId'], id_parts['entryId'], token) elif action['payload'] == 'refresh': logging.debug('sourceId:'+timeline_item['sourceItemId']) #refreshCard = db.GqlQuery("SELECT * FROM RefreshCards WHERE id = :1", timeline_item['sourceItemId']).get() #if memcache.get(key=timeline_item['sourceItemId']): #memcache.delete(timeline_item['sourceItemId']) if self._del_refresh_card(timeline_item['sourceItemId']): logging.debug('refresh items') logging.debug(data) self._refresh_stream(mirror_service, token=token) self.response.set_status(200) self.response.out.write("")
def _handle_feedly_auth(self, code): fa = FeedlyAPI(FEEDLY_USER, FEEDLY_SECRET) resp = fa.getToken(code, FEEDLY_REDIRECT) user = db.GqlQuery("SELECT * FROM FeedlyUser WHERE id = :1", self.userid).get() logging.debug(resp) if 'access_token' in resp: if not user: user = FeedlyUser(id=self.userid) user.feedly_access_token=resp['access_token'] user.feedly_refresh_token=resp['refresh_token'] logging.debug("insert "+str(self.userid)) user.put()
def _refresh_stream(self, mirror_service, token=None): if not token: token = self._get_auth_token() if token: fa = FeedlyAPI(FEEDLY_USER, FEEDLY_SECRET) profile = fa.getProfile(token) if 'errorCode' in profile: refresh_token = self._get_refresh_token() resp = fa.refreshToken(refresh_token) if 'access_token' in resp: token = resp['access_token'] self._set_auth_token(token) profile = fa.getProfile(None) userId = profile['id'] if hasattr(self,'userid'): self._subscribeTimelineEvent(mirror_service, self.userid) existing_cards = self._clearTimeline(mirror_service) batch = BatchHttpRequest() if not existing_cards[CARD_COVER_TITLE]: cardCover = self._create_bundle_cover(1) batch.add( mirror_service.timeline().insert(body=cardCover), request_id=str(userId)+'-cover' ) else: batch.add( mirror_service.timeline().update(id=existing_cards[CARD_COVER_TITLE]['id'], body=existing_cards[CARD_COVER_TITLE]), request_id=str(userId)+'-cover' ) if not existing_cards[CARD_REFRESH_TITLE]: cardRefresh = self._create_refresh_card(self._get_refresh_id(userId), 1) batch.add( mirror_service.timeline().insert(body=cardRefresh), request_id=str(userId)+'-refresh' ) else: self._del_refresh_card(existing_cards[CARD_REFRESH_TITLE]['sourceItemId']) id = self._get_refresh_id(userId) self._set_refresh_card(id) existing_cards[CARD_REFRESH_TITLE]['sourceItemId'] = id batch.add( mirror_service.timeline().update(id=existing_cards[CARD_REFRESH_TITLE]['id'], body=existing_cards[CARD_REFRESH_TITLE]), request_id=str(userId)+'-refresh' ) feed_content = fa.getStreamContentUser(token, userId, count=5, unreadOnly='true') logging.debug(feed_content) if feed_content['items']: markEntryIds = [] for item in feed_content['items']: logging.debug(item['title']) image = None if 'thumbnail' in item: image = item['thumbnail'][0]['url'] elif 'visual' in item and 'url' in item['visual']: image = item['visual']['url'] elif 'summary' in item and 'content' in item['summary'] and 'src=' in item['summary']['content']: start_loc = item['summary']['content'].find('src="') end_loc = item['summary']['content'].find('"', start_loc+5) if start_loc != -1 and end_loc != -1: image = item['summary']['content'][start_loc+5:end_loc] markEntryIds.append(item['id']) source_id = self._get_source_id(userId,item['id']) body = self._create_card(source_id, item['title'], item['origin']['title'], image, item['alternate'][0]['href'], 1) batch.add( mirror_service.timeline().insert(body=body), request_id=item['id'] ) batch.execute(httplib2.Http()) fa.markAsRead(token, markEntryIds)