Пример #1
0
	def get_bookmark_of_user_id_for_write(user_id):
		#データストアから実体を読込(書き込み用)
		bookmark=None
		try:
			bookmark=db.Query(Bookmark,keys_only=True).filter("user_id =",user_id)
		except:
			return None
		
		count=bookmark.count(limit=2)
		if(count>=2):
			#keynameの設定でduplicateは起きなくなったはず
			logging.error("bookmark duplicate error user_id="+str(user_id))

			#もし起きる場合は古いデータなので以下で削除のこと
			#duplicate_bookmark=bookmark.fetch(2)
			#db.get(duplicate_bookmark[1]).delete()
			#logging.error("deleted duplicated one")

		if(count==0):
			#同じuser_idでduplicateが起きないようにするためにkey_nameを設定
			#昔のbookmarkにはkey_nameは設定していないので注意
			bookmark=Bookmark(key_name=BbsConst.KEY_NAME_BOOKMARK+user_id)
			bookmark.user_id=user_id
			bookmark.put()
		else:
			bookmark=bookmark.fetch(1)
			bookmark=db.get(bookmark[0])	#強い整合性を保証
		
		return ApiObject.set_list_if_empty(bookmark);
Пример #2
0
	def get_bookmark_count(thread,add_thread_key):
		#現在のブックマーク数を取得
		if(type(thread)==MesThread):
			return Bookmark.all().filter("thread_key_list =",add_thread_key).count()
		if(type(thread)==Bbs):
			return Bookmark.all().filter("bbs_key_list =",add_thread_key).count()
		if(type(thread)==AppCode):
			return Bookmark.all().filter("app_key_list =",add_thread_key).count()
		return 0
Пример #3
0
	def bookmark_get_app_user_list(req):
		thread_key=req.request.get("app_key")
		bookmark_list=Bookmark.all().filter("app_key_list =",db.Key(thread_key)).fetch(limit=100)
		dic=[]
		for bookmark in bookmark_list:
			one_dic=ApiObject.create_user_object(req,bookmark)
			dic.append(one_dic)
		return dic
Пример #4
0
	def update_bookmark(main):
		query=Bookmark.all()
		
		total_cnt=0
		update_cnt=0
		
		offset=0
		if(main.request.get("from")):
			offset=int(main.request.get("from"))
			
		offset_to=10000
		if(main.request.get("to")):
			offset_to=int(main.request.get("to"))

		while(offset<offset_to):
			list=query.fetch(limit=1000,offset=offset)
			for bookmark in list:
				#強い整合性の保証
				bookmark=db.get(bookmark.key())

				total_cnt=total_cnt+1
				
				update_require=0

				#if(not bookmark.thread_key_list and bookmark.thread_list):
				#	bookmark.thread_key_list=[]
				#	for thread in bookmark.thread_list:
				#		bookmark.thread_key_list.append(db.Key(thread))
				#	update_require=1

				#if(not bookmark.bbs_key_list and bookmark.bbs_list):
				#	bookmark.bbs_key_list=[]
				#	for bbs in bookmark.bbs_list:
				#		bookmark.bbs_key_list.append(db.Key(bbs))
				#	update_require=1

				#if(bookmark.mute_bbs_key_list==None):
				#	bookmark.mute_bbs_key_list=[]
				#	update_require=1

				#if(bookmark.follower_list_enable==None or bookmark.follower_list==None):
				#	bookmark.follower_list=[]
				#	bookmark.follower_list_enable=0
				#	update_require=1
				
				if(update_require):
					bookmark.put()
					update_cnt=update_cnt+1
					if(update_cnt>=50):
						break
			offset=offset+1000
			if(update_cnt>=50):
				break
		
		main.response.out.write("total"+str(total_cnt)+" update"+str(update_cnt))
Пример #5
0
	def update_follower_list(user_id):
		if(not user_id):
			return []
		bookmark=ApiObject.get_bookmark_of_user_id_for_write(user_id)
		if(not bookmark):
			return []
		query=Bookmark.all().filter("user_list =",user_id)
		follower=query.fetch(limit=1000)
		follower_string=[]
		for one_user in follower:
			follower_string.append(one_user.user_id)
		bookmark.follower_list=follower_string
		bookmark.follower_list_enable=1
		bookmark.put()
		return bookmark.follower_list
Пример #6
0
	def get(self):
		SetUtf8.set()

		#ランキング更新
		rank=Ranking.get_or_insert(BbsConst.THREAD_RANKING_KEY_NAME)
		rank.create_rank(self)
		ApiFeed.invalidate_cache();

		#キャッシュ取得
		cache=SiteAnalyzer.get_cache_from_db();

		#1日単位で習得
		#force=False
		#if(self.request.get("force")):
		#	force=True
		if(cache.date and len(cache.day_list)>=1):# and not force):
			day1_str=NicoTracker.get_day_string(cache.date)
			day2_str=NicoTracker.get_day_string(datetime.datetime.today())
			if(day1_str==day2_str):
				Alert.alert_msg_with_write(self,"ランキングを更新しました。統計情報はまだ1日が経過していないので計測していません。")
				return
		
		#コメント数と再生数を取得
		bbs_cnt=Bbs.all().count(limit=100000)
		illust_cnt=MesThread.all().count(limit=100000)
		entry_cnt=Entry.all().count(limit=100000)
		user_cnt=Bookmark.all().count(limit=100000)

		#書き込み
		day_str=NicoTracker.get_day_string(datetime.datetime.today())
		
		cache.entry_cnt_list.insert(0,entry_cnt)
		cache.illust_cnt_list.insert(0,illust_cnt)
		cache.bbs_cnt_list.insert(0,bbs_cnt)
		cache.user_cnt_list.insert(0,user_cnt)
		cache.day_list.insert(0,day_str)

		cache.bbs_n=bbs_cnt
		cache.illust_n=illust_cnt

		cache.put()

		Alert.alert_msg_with_write(self,"ランキングを更新しました。")
Пример #7
0
	def bookmark_get_thread_user_list(req):
		thread_key=req.request.get("thread_key")
		bookmark_list=Bookmark.all().filter("thread_key_list =",db.Key(thread_key)).fetch(limit=100)
		
		#comment
		comment={}
		thread=ApiObject.get_cached_object(db.Key(thread_key))
		if(not thread):
			return []
		if(thread.bookmark_comment):
			comment=pickle.loads(thread.bookmark_comment)

		#user list
		dic=[]
		for bookmark in bookmark_list:
			one_dic=ApiObject.create_user_object(req,bookmark)
			user_id=None
			if(one_dic.has_key("user_id")):
				user_id=one_dic["user_id"]
			if(user_id and comment.has_key(user_id)):
				one_dic["comment"]=comment[user_id]
			dic.append(one_dic)

		return dic