Ejemplo n.º 1
0
        def post(self):
		        broadcaster = BroadcastMessage()
                        userUtil = UserUtils()
			title = self.request.get('title', None)
			link = self.request.get('link', None)
			domain = self.request.get('domain', None)
                        user_id = self.request.get('user_id', None)
                        updated = self.request.get('updated', None)
                        embeded = self.request.get('e', None)
                        link_category = self.request.get('link_category', None)
                        subscribers = simplejson.loads(self.request.get('subscribers', None))

			message = Message( title = title, link = link , domain = domain)

                        user = SessionModel.gql('WHERE __key__ = :1', db.Key(user_id)).get()
                        if user is None:
                                logging.info('can\'t determine user by id: %s' % user_id)
                                return
                        logging.info('user %s' % user.instaright_account)
                        avatar = userUtil.getAvatar(user.instaright_account)
                        logging.info('avatar %s' %avatar)
                        messageAsJSON = [{'u':{'id':user_id, 't':title,'ol':link, 'l':LinkUtils.generate_instaright_link(user.url_encode26, LinkUtils.make_title(title)),'d':domain,'dd': LinkUtils.generate_domain_link(domain), 'a':avatar, 'u':updated, 'source': user.client, 'lc':link_category, 'html_lc':LinkUtils.getLinkCategoryHTML(user),  'e': embeded, 'n': int(time.mktime(datetime.datetime.now().timetuple()))}}]
                        logging.info('sending message %s ' %messageAsJSON)
			broadcaster.send_message(messageAsJSON)
			xmpp_handler.send_message(subscribers, message)
Ejemplo n.º 2
0
	def get(self, url_hash, title):
                try:
                        self.redirect_perm()
                        self.get_user()
                        url_hash = urllib.unquote(url_hash)
		        logging.info('url hash: %s' % url_hash)
                        logging.info('category screen_name %s' %self.screen_name)
			category=None
                        if self.avatar is None:
                                self.avatar='/static/images/noavatar.png'

                        sessionModel = SessionModel.gql('where url_encode26 = :1', url_hash).get()
                        if sessionModel is None:
                                logging.info('not article with hash %s ... redirecting' % url_hash)
                                self.redirect('/')
                                return
                        generated_title =  LinkUtils.make_title(sessionModel.title)
                        if title != generated_title:
                                self.redirect('/article/'+url_hash+'/'+generated_title)
                                return
                        instaright_link =  LinkUtils.generate_instaright_link(url_hash, generated_title)
                        links = Links.gql('where url_hash = :1', url_hash).get()
			userUtil = UserUtils()
                        if links is not None:
                                category = links.categories
                        sessionTitle = LinkUtils.generateUrlTitle(sessionModel.title)
                        template_variables = {'page_footer': PageUtils.get_footer(), 'user':self.screen_name, 'logout_url':'/account/logout', 'avatar':self.avatar,'story_avatar': userUtil.getAvatar(sessionModel.instaright_account), 'story_user': sessionModel.instaright_account, 'domain': sessionModel.domain, 'title':sessionModel.title, 'link': sessionModel.url, 'updated':sessionModel.date, 'id': str(sessionModel.key()), 'instaright_link': instaright_link, 'category': LinkUtils.getLinkCategoryHTML(sessionModel), 'dd': LinkUtils.generate_domain_link(sessionModel.domain)}
		        path = os.path.join(os.path.dirname(__file__), 'templates/article.html')
                        self.response.headers["Content-Type"] = "text/html; charset=utf-8"
		        self.response.out.write(template.render(path, template_variables))
                except:
                        e,e0 = sys.exc_info()[0], sys.exc_info()[1]
                        logging.error('handled error : %s, %s ' %( e, e0 ))
		        self.redirect('/')
Ejemplo n.º 3
0
	def get(self):
                memcache_key='feed_json_cache'
                cached_feed= memcache.get(memcache_key)
		format = self.request.get('format', None);
                cache_exp = datetime.datetime.now() + datetime.timedelta(minutes=5)
                cache_exp_ts = time.mktime(cache_exp.timetuple())
                userUtil = UserUtils()
                if format == 'json' and cached_feed:
			logging.info('getting json from cache')
			self.response.headers['Content-Type'] = "application/json"
                        self.response.out.write(simplejson.dumps(cached_feed, default=lambda o: {'u':{'id':str(o.key()), 't':unicode(o.title), 'dd': LinkUtils.generate_domain_link(o.domain), 'd':o.domain, 'user': urllib.unquote(o.instaright_account), 'source': o.client, 'u': int(time.mktime(o.date.timetuple())), 'l':LinkUtils.generate_instaright_link(o.url_encode26,LinkUtils.make_title(o.title)),'a':userUtil.getAvatar(o.instaright_account),'ol':o.url, 'lc':LinkUtils.getLinkCategory(o), 'html_lc':LinkUtils.getLinkCategoryHTML(o), 'e': o.embeded, 'n': int(time.mktime(datetime.datetime.now().timetuple()))}}))
                        return
		entries = SessionModel.gql('ORDER by date DESC').fetch(10)
		memcache.set(memcache_key, entries, time = cache_exp_ts)
		if not entries:
			self.response.out.write('Nothing here')
		#now = datetime.datetime.now().strftime("%Y-%m-%dT%H\:%i\:%sZ")
		if format is None or format == 'xml' or format == 'valid_xml':
                        updated_entries = [ (str(o.key()), unicode(o.title), LinkUtils.generate_domain_link(o.domain), LinkUtils.generate_instaright_link(o.url_encode26,LinkUtils.make_title(o.title)),userUtil.getAvatar(o.instaright_account), o.date, LinkUtils.generate_instaright_link(o.url_encode26,LinkUtils.make_title(o.title)) ) for o in entries ]
                        template_variables = { 'entries' : updated_entries, 'dateupdated' : datetime.datetime.today()}
                        if format == 'valid_xml':
			        path= os.path.join(os.path.dirname(__file__), 'templates/feed_valid.html')
                        else:
			        path= os.path.join(os.path.dirname(__file__), 'templates/feed.html')
			self.response.headers['Content-Type'] = "application/atom+xml"
			self.response.out.write(template.render(path,template_variables))
			return
		if format == 'json':
			self.response.headers['Content-Type'] = "application/json"
                        self.response.out.write(simplejson.dumps(entries, default=lambda o: {'u':{'id':str(o.key()), 't':unicode(o.title), 'dd': LinkUtils.generate_domain_link(o.domain), 'd':o.domain, 'user': o.instaright_account, 'u': int(time.mktime(o.date.timetuple())), 'l':LinkUtils.generate_instaright_link(o.url_encode26,LinkUtils.make_title(o.title)), 'a':userUtil.getAvatar(o.instaright_account),'ol':o.url, 'source': o.client, 'e': o.embeded, 'lc':LinkUtils.getLinkCategory(o), 'html_lc':LinkUtils.getLinkCategoryHTML(o), 'n': int(time.mktime(datetime.datetime.now().timetuple()))}}))
			return
Ejemplo n.º 4
0
 def _testKloutScore(self):
     user = "******"
     config = ConfigParser.ConfigParser()
     config.read(os.path.split(os.path.realpath(__file__))[0] + "/../properties/general.ini")
     klout_api_key = config.get("social", "klout_api_key")
     score = UserUtils.getKloutScore(user, klout_api_key)
     logging.info("got score %s for %s " % (score, user))
     self.assertTrue(score > 0)
Ejemplo n.º 5
0
        def post(self, user):
                logging.info('fetching info for user %s' % user)
                user_decoded = urllib.unquote(user)
                user_decoded = user_decoded.strip()
                logging.info('fetching info for user %s' % user_decoded)
                userDetail = UserUtils.gather_info(user_decoded)
                if userDetail.name:
                        userDetail.put()
	                logging.info('done fetching info for user %s' % user_decoded)
                	logging.info('fetching info for user %s' % user)
Ejemplo n.º 6
0
    def get(self):

	uu = UserUtils()
        logout_cookie = self.request.cookies.get('user_logged_out')
	user_details = uu.getUserDetails(self)
	screen_name = user_details["screen_name"]

	google_login_url = users.create_login_url('/') 

        if screen_name is None or logout_cookie is not None:
                template_variables = { 'google_login_url': google_login_url }
                path = os.path.join(os.path.dirname(__file__), 'templates/register.html')
                self.response.headers["Contant-Type"]= "text/html; charset=utf-8"
                self.response.out.write(template.render(path,template_variables))
        else:
                template_variables = {}
                path = os.path.join(os.path.dirname(__file__), 'templates/index.html')
                self.response.headers["Contant-Type"]= "text/html; charset=utf-8"
                self.response.out.write(template.render(path,template_variables))
Ejemplo n.º 7
0
        def get(self, domain):
                format=self.request.get('format',None)
                if domain is None or len(domain) == 0:
                        logging.info('not category in request. return empty')
                        return
                if format == 'json':
                        logging.info('domain %s json feed' % domain)
                        userUtil = UserUtils()
                        entries = SessionModel.gql('WHERE domain = :1 order by date desc', domain).fetch(10)
			self.response.headers['Content-Type'] = "application/json"
			#TODO insert categories for domain's view
                        self.response.out.write(simplejson.dumps(entries, default=lambda o: {'u':{'id':str(o.key()), 't':unicode(o.title), 'l': LinkUtils.generate_instaright_link(o.url_encode26, LinkUtils.make_title(o.title), o.url), 'user': urllib.unquote(o.instaright_account), 'source': o.client, 'html_lc':LinkUtils.getLinkCategoryHTML(o), 'd': o.domain, 'lc': LinkUtils.getLinkCategory(o), 'dd':LinkUtils.generate_domain_link(o.domain), 'u': o.date.strftime("%Y-%m-%dT%I:%M:%SZ"), 'a':userUtil.getAvatar(o.instaright_account),'ol':o.url}}))
			return
                self.response.headers['Content-Type'] = "application/json"
                self.response.out.write("[{}]")
Ejemplo n.º 8
0
	def get(self):
                cookie=self.request.get('cookie', None);
                instapaper_username = self.request.get('instapaper_username', None)
		if instapaper_username is None:
			logging.error('update user info based on bad instapaper account.hack')
			self.response.out.write('Done')
			return 
		ud = UserUtils.getUserDetailsFromCookie(cookie)
		if ud is None:
			logging.error('update user info based on bad cookie. hack')
			self.response.out.write('Done')
			return 
                ud.instapaper_account=instapaper_username
                ud.instaright_account=instapaper_username
                ud.put()
		self.response.out.write('Done')
Ejemplo n.º 9
0
        def get(self, category):
                format=self.request.get('format',None)
                if category is None or category == 0:
                        logging.info('not category in request. return empty')
                        return
                if format == 'json':
                        logging.info('catefory %s json feed' % category)
                        userUtil = UserUtils()
                        allentries = LinkCategory.gql('WHERE category = :1 order by updated desc', category).fetch(50)
                        entries= [ e for e in allentries if hasattr(e,'model_details') and e.model_details is not None ]
                        entries = entries[:10]
			self.response.headers['Content-Type'] = "application/json"
                        self.response.out.write(simplejson.dumps(entries, default=lambda o: {'u':{'id':str(o.model_details.key()), 't':unicode(o.model_details.title), 'dd': LinkUtils.generate_domain_link(o.model_details.domain),'l':LinkUtils.generate_instaright_link(o.model_details.url_encode26, LinkUtils.make_title(o.model_details.title), o.model_details.url), 'd':o.model_details.domain, 'user': urllib.unquote(o.model_details.instaright_account), 'source': o.model_details.client, 'html_lc':LinkUtils.getLinkCategoryHTML(o), 'u': o.updated.strftime("%Y-%m-%dT%I:%M:%SZ"), 'a':userUtil.getAvatar(o.model_details.instaright_account),'ol':o.url,'c':category, 'lc':LinkUtils.getLinkCategory(o.model_details)}}))
			return
                self.response.headers['Content-Type'] = "application/json"
                self.response.out.write("[{}]")
Ejemplo n.º 10
0
	def get(self, service):
		cookie=self.request.get('cookie', None)
		ud = UserUtils.getUserDetailsFromCookie(cookie)
		if ud is None:
			logging.error('remove user info based on bad cookie. hack')
			self.response.out.write('Done')
			return 
		ut=UserTokens.gql('WHERE user_details = :1', ud.key()).get()
		if ut is None:
			logging.error('user defined by cookie %s has no tokens' % cookie)
			self.response.out.write('Done')
			return
		logging.info('fetched user %s' % ud.instaright_account)
		if getattr(ut, "%s_token" % service) is None:
			logging.error('remove unexisting service %s for cookie %s' % (service, cookie))
			self.response.out.write('Done')
			return 
                service_token_name="%s_token" %service
		ut.service_token_name=None
		ut.put()
		#TODO remove cookie
		self.response.out.write('Done')
Ejemplo n.º 11
0
        def get(self):
                logging.info('fetching more user links ...')
                cookie = self.request.get('cookie', None)
                offset = Cast.toInt(self.request.get('offset', None), 0)
                logging.info('row offset %s' % offset)
                offset = offset * self.link_batch
                ud = UserUtils.getUserDetailsFromCookie(cookie)
                sessions = SessionModel.gql('WHERE instaright_account =  :1 ORDER by date desc ', ud.instaright_account ).fetch(self.link_batch,offset)
                if sessions is None or len(sessions) == 0:
			logging.info('returned no sessions for offset %s' %offset)
                        self.response.headers["Content-type"] = "application/json"
                        self.response.out.write('{}')
                        return
		logging.info('fetched %s sessions for user %s' %(len(sessions), ud.instaright_account))
                d = {}
                for d_te, j in itertools.groupby(sessions, key= lambda s: s.date.date()):
                        ss = [ {'t':ss.title,'l':ss.url,'d':ss.domain,'h':ss.url_hash} for ss in list(j) ]
                        d[str(d_te)] = ss
		import operator
		#order by dates desc
		dates_sorted=sorted(d.iteritems(), key=operator.itemgetter(0), reverse=True)
                self.response.headers["Content-type"] = "application/json"
                self.response.out.write(simplejson.dumps(dates_sorted))
Ejemplo n.º 12
0
        def post(self):
                category=self.request.get('category', None)
                url_hash=self.request.get('url', None)
                userUtil=UserUtils()
                if category is None or len(category) == 0:
                        logging.info('no category in request. skipping ...')
                        return
                if url_hash is None:
                        logging.info('no url in request. skipping ...')
                        return
                model = SessionModel.gql('WHERE url_hash = :1 order by date desc', url_hash).get()
                if model is None:
                        logging.error('no session model for url hash %s ' %url_hash)
                        return

                category_path='/category/%s' %category
		broadcaster = BroadcastMessage()
                date_published=''
                if model.date is not None:
                        date_published=model.date.strftime("%Y-%m-%dT%I:%M:%SZ")
                        
                messageAsJSON = [{'u':{'id':str(model.key()), 't':unicode(model.title),'l':model.url,'d':model.domain,'u': date_published, 'a':userUtil.getAvatar(model.instaright_account),'ol':model.url,'c':category, 'lc':category}}]
                logging.info('sending category message %s for users on path %s' % (messageAsJSON, category_path))
                broadcaster.send_message(messageAsJSON,category_path)
Ejemplo n.º 13
0
        def get_user(self):
		uu = UserUtils()
		userSession = None
		self.screen_name=None
		self.auth_service=None
                self.avatar=None
                self.user_uuid=None
                self.instaright_account=None
                self.user_detail_key=None
                self.facebook_profile = None
                self.facebook_oauth_token = None
                self.twitter_profile = None
                self.twitter_oauth_token = None
                self.google_profile = None
                self.google_oauth_token = None
                self.evernote_name = None
                self.evernote_oauth_token = None
                self.flickr_name = None
                self.flickr_oauth_token = None
		self.picplz_name = None
		self.picplz_oauth_token = None
                self.ud=None
                ud_modified=None
                new_session=False

		uuid_cookie = self.request.cookies.get('user_uuid')
                evernote_cookie = self.request.cookies.get('oauth.evernote')
                twitter_cookie = self.request.cookies.get('oauth.twitter')
                flickr_cookie = self.request.cookies.get('oauth.flickr')
                picplz_cookie = self.request.cookies.get('oauth.picplz')
		logout_cookie = self.request.cookies.get('user_logged_out')
                user_details=None
		# try to get user name by cookie or from login
		if uuid_cookie:
			#Connect uuid with registered user
			logging.info('reusing uuid: %s' % uuid_cookie)
			self.user_uuid = uuid_cookie
			userSession = UserSessionFE.gql('WHERE user_uuid = :1 order by last_updatetime desc' , self.user_uuid).get()
			if userSession is not None and userSession.user_details is not None:
				self.ud = UserDetails.gql('WHERE __key__ = :1', userSession.user_details).get()

                                #fix instaright_account TODO possibly deprecated
                                if self.ud is not None and self.ud.instapaper_account is not None:
                                        self.ud.instaright_account=self.ud.instapaper_account
                                        ud_modified=True
				if self.ud is None:
					logging.error('missing proper db entry for cookie %s' % uuid_cookie)
				else:
					user_data = self.ud.getUserInfo()
                                        self.facebook_profile = self.ud.facebook_profile
                                        self.twitter_profile = self.ud.twitter
                                        self.google_profile = self.ud.google_profile
                                        self.evernote_name = self.ud.evernote_profile
                                        self.flickr_name = self.ud.flickr_profile
					self.screen_name = user_data["screen_name"]
                                        self.avatar = user_data["avatar"]
                                        self.instaright_account=self.ud.instaright_account
                                        self.user_detail_key=str(self.ud.key())
					logging.info('using screen name %s from session %s' %(self.screen_name, self.user_uuid))
                        if userSession is not None and userSession.user_details is None:
                                logging.info('user details not defined for session ... need to fix this with oauth')
			# sanity check
			if userSession is None:
				logging.info('smth wicked ')
				userSession = UserSessionFE()
                        if userSession and userSession.user_uuid is None:
                                userSession.user_uuid = str(self.user_uuid)
		else:
                        new_session=True
			self.user_uuid = uuid.uuid4()
			logging.info('generated new uuid: %s' % self.user_uuid)
                        expires = datetime.datetime.now() + datetime.timedelta(minutes=60)
                        exp_format = datetime.datetime.strftime(expires, '%a, %d-%b-%Y %H:%M:%S GMT')
                        logging.info('expr date %s' %exp_format)
			self.response.headers.add_header('Set-Cookie', 'user_uuid=%s; expires=%s; path=/' %( self.user_uuid, exp_format))

			userSession = UserSessionFE()
			userSession.user_uuuid = str(self.user_uuid)

		# not pretty but working
		if logout_cookie:
			logging.info('found logout cookie. reseting screen_name')
			self.screen_name = None
                        self.instaright_account=None
		else:
			user_details = uu.getUserDetails(self)
                        if user_details["screen_name"] is not None:
			        self.screen_name = user_details["screen_name"]
                        if user_details["avatar"] is not None:
                                self.avatar = user_details["avatar"]
                        if user_details["auth_service"] is not None:
			        self.auth_service = user_details["auth_service"]
                        if user_details["user_details_key"] is not None:
                                #NOTE: it is very important to set user details key!!!!
			        user_details_key = user_details["user_details_key"]
			        userSession.user_details = user_details_key
                                self.user_detail_key=str(user_details["user_details_key"])
                                #if ud changed? what then?
                                if self.ud is None:
                                        ud = UserDetails.gql('WHERE __key__ = :1' , db.Key(self.user_detail_key)).get()
                                        self.ud = ud
                        if user_details["instaright_account"] is not None:
                                self.instaright_account=user_details["instaright_account"]
                        if user_details["evernote_name"] is not None:
                                self.evernote_name = user_details["evernote_name"]
                        if user_details["flickr_name"] is not None:
                                self.flickr_name = user_details["flickr_name"]

			userSession.active=True
			
		userSession.screen_name = self.screen_name
		userSession.auth_service = self.auth_service

                #determine path
                url=self.request.url
                scheme, netloc, path, query, fragment = urlparse.urlsplit(url)

                existingUserPathSession=UserSessionFE.gql('WHERE user_uuid = :1 and path = :2 and screen_name = :3' , userSession.user_uuid, path, userSession.screen_name).get()
                if existingUserPathSession is None:
                        logging.info('new path %s -> %s' %(userSession.path, path))
                        newPathUserSession=UserSessionFE()
                        newPathUserSession.active=userSession.active
                        newPathUserSession.auth_service=userSession.auth_service
                        newPathUserSession.screen_name=userSession.screen_name
                        newPathUserSession.user=userSession.user
                        newPathUserSession.user_details=userSession.user_details
                        newPathUserSession.user_uuid=userSession.user_uuid
                        newPathUserSession.path=path
                        newPathUserSession.put()
		#userSession.put()

                user_token=None
                if self.ud is not None:
                        user_token=UserTokens.gql('WHERE user_details = :1', self.ud.key()).get()
                if user_token is None:
                        user_token=UserTokens()

		#token=UserTokens()
		#token.user_details = userSession.user_details
		#token.picplz_token= '1|oauth_secret=UxY3gF4CXmRt3tYqgYg4Ed49YbZLGuDx&oauth_token=dNyt8uanrG9sRXBse6P7uaPyZSDpwK26'
		#token.google_token= 'google|oauth_secret=UxY3gF4CXmRt3tYqgYg4Ed49YbZLGuDx&oauth_token=dNyt8uanrG9sRXBse6P7uaPyZSDpwK26'
		#token.put()

                user_token_modified=False
                evernote_oauth = None
                #NOTE: ud can be null on visits that include no auth
                if evernote_cookie is not None:
                        evernote_oauth = OAuthAccessToken.get_by_key_name(evernote_cookie)
                if evernote_oauth is not None and self.ud is not None:
                        evernote_token = evernote_oauth.oauth_token
                        logging.info('User Details modified ... updating evetnote token')
                        user_token.evernote_token=evernote_token
                        user_token.evernote_additional_info=evernote_oauth.additional_info
                        user_token_modified=True
			#TODO remove cookie -> after write not needed any more
                twitter_oauth = None
                if twitter_cookie is not None:
                        logging.info('twitter cookie defined %s' % twitter_cookie)
                        twitter_oauth = OAuthAccessToken.get_by_key_name(twitter_cookie)
                if twitter_oauth is not None and self.ud is not None:
                        twitter_token = twitter_oauth.oauth_token
                        twitter_secret= twitter_oauth.oauth_token_secret
                        logging.info('User Details modified ... updating twitter token')
                        user_token.twitter_token=twitter_token
                        user_token.twitter_secret=twitter_secret
                        user_token_modified=True
                        logging.info('twitter promo sent? %s' % self.ud.twitter_promo_sent)
                        if self.ud.twitter_promo_sent == False:
                                taskqueue.add(url='/service/submit/twitter/promo', params={'user_token': twitter_token, 'user_secret': twitter_secret, 'user_details_key': str(self.ud.key())})
                                self.ud.twitter_promo_sent=True
                                ud_modified=True
                picplz_oauth = None
                if picplz_cookie is not None:
                        picplz_oauth = OAuthAccessToken.get_by_key_name(picplz_cookie)
                        logging.info('picplz cookie defined %s' % picplz_cookie)
                if picplz_oauth is not None:
                        picplz_token = picplz_oauth.oauth_token
                        user_token.picplz_token = picplz_token
                        user_token_modified=True
			#TODO remove cookie -> after write not needed any more
                flickr_oauth = None
                if flickr_cookie is not None:
                        flickr_oauth = OAuthAccessToken.get_by_key_name(flickr_cookie)
                        logging.info('flickr cookie defined %s' % flickr_cookie)
                if flickr_oauth is not None and self.ud is not None:
                        flickr_token = flickr_oauth.oauth_token
                        logging.info('User Details modified ... updating flickr token %s' % flickr_token)
                        user_token.flickr_token=flickr_token
                        user_token_modified=True
                if user_details is not None and user_details["facebook_access_token"] is not None:
                        user_token.facebook_token=user_details["facebook_access_token"]
                        user_token_modified=True
                        if self.ud.facebook_promo_sent == False:
                                taskqueue.add(url='/service/submit/facebook/promo', params={'user_token': user_token.facebook_token, 'user_details_key': str(self.ud.key())})
                                self.ud.facebook_promo_sent=True
                                ud_modified=True
                if user_token_modified:
                        if user_token.user_details is None and self.ud is not None:
                                logging.info('user details for token not defined: ud = %s' %str(self.ud.key()))
                                user_token.user_details=self.ud
			if user_token.user_details is not None:
                        	logging.info('user_token modified ... updating:for user details %s' % str(user_token.user_details.key()))
                        	user_token.put()
			else:
                        	logging.info('user_token user details not defined ....' )
                if ud_modified:
                        logging.info('user details modified updating ...' )
                        self.ud.put()
                self.google_oauth_token, self.twitter_oauth_token, self.facebook_oauth_token, self.evernote_oauth_token, self.picplz_oauth_token= user_token.google_token, user_token.twitter_token, user_token.facebook_token, user_token.evernote_token, user_token.picplz_token
Ejemplo n.º 14
0
    def post(self):

        url = self.request.get("url", None)
        url_hash = LinkUtils.getUrlHash(url)
        user = self.request.get("user", None)
        title = self.request.get("title", None)

        if url is None:
            logging.info("no url detected. skipping...")
            return
        count = 1
        url = urllib2.unquote(url)
        domain = RequestUtils.getDomain(url)
        if not domain or len(domain) == 0:
            self.response.out.write("not url: %s skipping!\n" % url)
            return
        if domain in self.skip_domains:
            logging.info("filering out %s" % url)
            return
        lu = LinkUtils()
        link = lu.getAllData(url, count)
        logging.info("link overall score: %s" % link.overall_score)
        existingLink = None
        try:
            existingLink = Links.gql("WHERE url_hash = :1", url_hash).get()
            if existingLink is None:
                existingLink = Links.gql("WHERE url = :1", url).get()
        except BadValueError:
            logging.info("bad value url %s" % url)
        klout_score = UserUtils.getKloutScore(user, self.klout_api_key)
        share_margin = self.tw_margin
        if klout_score is not None:
            link.overall_score = link.overall_score * int(klout_score)
            logging.info("adjusted overall score %s" % link.overall_score)
            share_margin = share_margin * self.klout_correction
            logging.info("adjusting twit margin: %s" % share_margin)

        logging.info("link score %s tweet margin %s ( existing %s )" % (link.overall_score, share_margin, existingLink))
        if link.overall_score > share_margin and (existingLink is None or not existingLink.shared):
            t = Twit()
            t.generate_content(link, title, "")
            # skip tweets is text emtpy and for root domains
            if t.text is None or LinkUtils.isRootDomain(link.url):
                logging.info("twit with no body. aborting")
                return
            execute_time = TaskUtil.execution_time()
            logging.info("scheduling tweet for %s" % str(execute_time))
            mail.send_mail(
                sender="*****@*****.**",
                to="*****@*****.**",
                subject="Twit to queue!",
                html="Twitt: %s <br> score: %s" % (t.text, link.overall_score),
                body="Twitt: %s <br> score: %s" % (t.text[:500], link.overall_score),
            )

            # taskqueue.add(url='/util/twitter/twit/task', eta=execute_time, queue_name='twit-queue', params={'twit':t.text})
            taskqueue.add(url="/util/twitter/twit/task", queue_name="twit-queue", params={"twit": t.text})
            # update article shared status
            if existingLink is not None:
                existingLink.shared = True
                existingLink.put()
            logging.info("updated link share status")
        else:
            logging.info("not scheduled for tweeting")
        lh = LinkHandler()
        lh.update_link(url, link)