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);
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
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
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))
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
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,"ランキングを更新しました。")
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