def get_tag_list(self,analytics): start_date=str(datetime.date.today()+datetime.timedelta(days=-7)) end_date=str(datetime.date.today()) result=analytics.get("tag","",start_date,end_date) if(len(result)<=0): #Treat GA error return recent_tag=RecentTag.get_or_insert(BbsConst.RECENT_TAG_KEY_NAME) recent_tag.tag_list=[] recent_tag.score_list=[] rank={} for one in result: url=one["ga:pagePath"] data=url.split("=") count=int(one["ga:pageviews"]) query=data[1] if(rank.has_key(query)): rank[query]=rank[query]+count else: rank[query]=count for k, v in sorted(rank.items(), key=lambda x:x[1], reverse=True): query=k search_found=SearchThread.get_count(query) recent_tag.tag_list.append(query) recent_tag.score_list.append(str(search_found)) recent_tag.put() memcache.delete(BbsConst.RECENT_TAG_CACHE_HEADER)
def _update_thread(ds_obj): image_key=MesThread.image_key.get_value_for_datastore(ds_obj) if(image_key): ds_obj.cached_image_key=str(image_key) ImageFile.create_thumbnail2(ds_obj) bbs_key=MesThread.bbs_key.get_value_for_datastore(ds_obj) if(bbs_key): ds_obj.cached_bbs_key=str(bbs_key) #コメント一覧を取得 #コメント更新時にはcached_entry_key=Noneで代入される if not ds_obj.cached_entry_key_enable: ds_obj.cached_entry_key=ApiObject._get_cached_entry_key(ds_obj) ds_obj.cached_entry_key_enable=True ds_obj.put() #検索インデックスに追加 SearchThread.add_index(ds_obj)
def _text_search(self,search,user,user_id,page,request_page_mode,redirect_api,contents_only): template_values=Pinterest.initialize_template_value(self,user,user_id,page,request_page_mode,redirect_api,contents_only) search_api="search_tag" unit=BbsConst.PINTEREST_PAGE_UNIT thread_list=SearchThread.search(search,page,unit,BbsConst.SEARCH_THREAD_INDEX_NAME) if(thread_list!=None): thread_list=ApiObject.create_thread_object_list(self,thread_list,"search") search_api_error=False else: search_api_error=True if(search=="empty"): thread_list=None if(search_api_error): #例外が起きた場合はTagSearchの結果を使う場合がある thread_list=Pinterest.get_tag_image(self,search,page,unit)["thread_list"] if(thread_list): search_api_error=False today=datetime.date.today() ranking_month_list=Pinterest._get_ranking_month_list(today,CssDesign.is_english(self)) template_values['thread_list']=thread_list template_values['next_query']="search="+urllib.quote_plus(str(search)) template_values['tag_list']=SearchTag.get_recent_tag(search_api) template_values['page_mode']="search" template_values['illust_enable']=True template_values['search']=search template_values['search_api_error']=search_api_error template_values['top_page']=True template_values['ranking_month_list']=ranking_month_list template_values['month_query']="" if(search=="empty"): order="new" Pinterest._update_event_list(self,template_values,order,contents_only) Pinterest._update_room_list(self,template_values,order,contents_only) Pinterest._update_tweet_list(self,template_values,order,contents_only) template_values["bbs_list"]=ApiFeed.feed_get_bbs_list(self,"hot",0,8) Pinterest._render_page(self,template_values)
def feed_get_ranking_thread_list(month_query,page,unit): #日付の範囲を決定 if(month_query==""): from_month=datetime.date.today()+datetime.timedelta(days=-30) next_month=datetime.date.today() no_reduct=False else: today=datetime.datetime.strptime(month_query,"%Y-%m-%d") from_month=datetime.datetime(today.year,today.month,today.day).strftime('%Y-%m-%d') if(today.month==12): next_month=datetime.datetime(today.year+1,1,today.day).strftime('%Y-%m-%d') else: next_month=datetime.datetime(today.year,today.month+1,today.day).strftime('%Y-%m-%d') no_reduct=True #キャッシュ取得 order="monthly" offset=(page-1)*unit if(month_query==""): cache_enable=ApiFeed._is_cache_enable(offset,unit,order) else: cache_enable=False cache_id=ApiFeed._get_cache_id(order,None,offset,unit) if(cache_enable): data=memcache.get(cache_id) if(data): return data #検索範囲を絞らなければ正常にソートできないので、できるだけ絞る search_str="(bookmark >= 1 OR applause >= 3) AND date > "+str(from_month)+" AND date < "+str(next_month) thread_list=SearchThread.search(search_str,page,unit,BbsConst.SEARCH_THREAD_INDEX_NAME,no_reduct) #キャッシュに乗せる if(cache_enable): memcache.set(cache_id,thread_list,BbsConst.TOPPAGE_FEED_CACHE_TIME) return thread_list
def get(self,bbs_key,thread_key): SetUtf8.set() #ホストチェック if SpamCheck.is_deny(self.request): self.response.set_status(401) return #英語版かどうか is_english=CssDesign.is_english(self) #BBSを取得 bbs_key=MappingId.mapping(bbs_key) bbs=ApiObject.get_cached_object(bbs_key) if(bbs == None): Alert.alert_msg_notfound(self) return #BBSが削除されていた場合 if(bbs.del_flag) : if(is_english): Alert.alert_msg_with_write(self,"This bbs was deleted.") else: Alert.alert_msg_with_write(self,"このBBSは削除されました。") return #ページ番号を取得 col_num = 10 page = 1 if self.request.get("page"): page = int(self.request.get("page")) if page < 1: page=1 #メンテナンス画面 is_maintenance=0 if(MaintenanceCheck.is_appengine_maintenance()): is_maintenance=1 #オーダー取得 order="update" if(bbs.default_comment_order==1): order="new" if self.request.get("order"): order=self.request.get("order") #スレッド取得 thread=ShowThread.get_thread(bbs,thread_key) if(thread == None): Alert.alert_msg_notfound(self) return #コメント数を更新 if(bbs.page_comment_n): col_num=bbs.page_comment_n if(self.request.get("limit")): col_num=int(self.request.get("limit")) #コメントの一覧を取得 query=ShowThread.get_comment_query(thread,order) entry_num = query.count() if(entry_num==0): com_list_ = [] else: com_list_ = query.fetch(limit=col_num, offset=(page-1)*col_num) #検索 search="" if(self.request.get("search")): search=self.request.get("search") query=""+search+' thread_key:"'+str(thread.key())+'"' com_list_=SearchThread.search(query,page,col_num,BbsConst.SEARCH_ENTRY_INDEX_NAME) #実体への変換 com_list_=ApiObject.get_cached_object_list(com_list_) #現在のスレッドへのURLを取得 host_url=MappingId.mapping_host_with_scheme(self.request)+"/" #編集モードか user = users.get_current_user() edit_flag = 0 if(not OwnerCheck.check(bbs,user)): edit_flag = 1 logined=0 if(user): logined=1 owner=user if(OwnerCheck.check(bbs,user)): owner=None admin_user=OwnerCheck.is_admin(user) #ページリンクを作成 page_url_base = MappingId.get_usr_url(host_url,bbs)+thread_key+'.html?page=' page_list=ShowThread.create_page_list(page,entry_num,col_num) #掲示板のデザインを取得 design=CssDesign.get_design_object(self,bbs,host_url,1) #コメントフォームを取得する show_comment_form=1 if(bbs.comment_login_require and not(owner)): show_comment_form=0 #名前取得 user_name=ShowEntry.get_user_name(user) #自分のイラストか my_illust=False if(user and thread.user_id==user.user_id()): my_illust=True #IPを表示するかどうか show_ip=False if(self.request.get("show_ip") and (owner or admin_user)): show_ip=True #コメントのレンダリング comment=ShowEntry.render_comment(self,host_url,bbs,thread,com_list_,edit_flag,bbs_key,logined,show_comment_form,admin_user,user_name,user,show_ip) #凍結されているか frozen=ApiObject.is_frozen_thread(thread) #拍手が有効かどうか applause_enable=not (user and thread.user_id and thread.user_id==user.user_id()) #メッセージ message=memcache.get(BbsConst.OBJECT_THREAD_MESSAGE_HEADER+str(thread.key())) #関連イラスト related=self._get_related(bbs,thread,design["is_iphone"],design["is_tablet"]) #スパム対策 force_login_to_create_new_image=BbsConst.FORCE_LOGIN_TO_CREATE_NEW_IMAGE force_login_to_create_new_comment=BbsConst.FORCE_LOGIN_TO_CREATE_NEW_COMMENT #描画 template_values = { 'host': host_url, 'usrhost': MappingId.get_usr_url(host_url,bbs), 'bbs': bbs, 'bbs_str_key': str(bbs.key()), 'thread': thread, 'edit_flag':edit_flag, 'url': 'edit', 'url_linktext': 'edit blogs', 'bbs_key': bbs_key, 'page':page, 'page_url_base':page_url_base, 'page_list':page_list, 'logined':logined, 'user':user, 'owner':owner, 'my_illust':my_illust, 'template_path':design["template_path"], 'css_name':design["css_name"], 'is_iphone':design["is_iphone"], 'is_tablet':design["is_tablet"], 'template_base_color':design["template_base_color"], 'admin_user':admin_user, 'order':order, 'is_maintenance':is_maintenance, 'redirect_url': self.request.path, 'comment':comment, 'show_comment_form':show_comment_form, 'user_name':user_name, 'search': search, 'limit': col_num, 'frozen': frozen, 'applause_enable': applause_enable, 'message': message, 'is_english': is_english, 'related': related, 'show_ip': show_ip, 'force_login_to_create_new_image': force_login_to_create_new_image, 'force_login_to_create_new_comment': force_login_to_create_new_comment } path = "/html/"+design["base_name"] self.response.out.write(template_select.render(path, template_values)) CounterWorker.update_counter(self,bbs,thread,owner)
def _index(self,user,user_id,page,request_page_mode,redirect_api,contents_only): unit=BbsConst.PINTEREST_PAGE_UNIT order="new" if(self.request.get("order")): order=self.request.get("order") month_query="" if(self.request.get("query")): month_query=self.request.get("query") search_api="search_tag" ranking_month_list=[] search_api_error=False if(order=="monthly"): if(month_query): today=datetime.datetime.strptime(month_query,"%Y-%m-%d") else: today=datetime.date.today() ranking_month_list=Pinterest._get_ranking_month_list(today,CssDesign.is_english(self)) thread_list=ApiFeed.feed_get_ranking_thread_list(month_query,page,unit) if(thread_list!=None): thread_list=ApiObject.create_thread_object_list(self,thread_list,"search") search_api_error=False else: search_api_error=True else: if(order=="lecture"): search_str="tag = 講座 OR category = 講座" no_reduct=False #日付における重み付けを外すか thread_list=SearchThread.search(search_str,page,unit,BbsConst.SEARCH_THREAD_INDEX_NAME,no_reduct) if(thread_list!=None): thread_list=ApiObject.create_thread_object_list(self,thread_list,"search") search_api_error=False else: search_api_error=True else: if(order=="chat"): thread_list=None else: thread_list=ApiFeed.feed_get_thread_list(self,order,(page-1)*unit,unit) bbs_list=None if(order=="hot" and not contents_only): bbs_list=ApiFeed.feed_get_bbs_list(self,"hot",0,8) recent_tag=None if(order=="hot" and not contents_only): recent_tag=SearchTag.get_recent_tag(search_api) my_color_bookmark=None if(user): my_color_bookmark=ApiObject.get_bookmark_of_user_id(user.user_id()) mute_bbs_list=[] mute_user_list=[] if(my_color_bookmark): mute_bbs_list=my_color_bookmark.get_mute_bbs_list() mute_user_list=my_color_bookmark.get_mute_user_list() template_values=Pinterest.initialize_template_value(self,user,user_id,page,request_page_mode,redirect_api,contents_only) template_values['thread_list']=thread_list template_values['next_query']="order="+order+"&query="+month_query template_values['tag_list']=recent_tag template_values['top_page']=True template_values['order']=order template_values['page_mode']="index" template_values['illust_enable']=True template_values['bbs_list']=bbs_list template_values['ranking_month_list']=ranking_month_list template_values['month_query']=month_query template_values['search_api_error']=search_api_error template_values['bookmark']=my_color_bookmark template_values['mute_bbs_list']=mute_bbs_list template_values['mute_user_list']=mute_user_list Pinterest._update_event_list(self,template_values,order,contents_only) Pinterest._update_room_list(self,template_values,order,contents_only) Pinterest._update_tweet_list(self,template_values,order,contents_only) template_values['is_admin']=OwnerCheck.is_admin(user) Pinterest._render_page(self,template_values)
def _update_entry(ds_obj): #検索インデックスに追加 SearchThread.add_index_entry(ds_obj)