def list_city(city_id=None): spots = ChootripApi.get_city_spots(city_id=int(city_id)) city = ChootripApi.get_city(city_id) spots = set_cart_added(spots) spots = set_one_image(spots) return render_template('list_spots.html', segment_name=city['name'], spots=spots)
def confirm_cart(): if len(session['cart']) != 10: flash('10件選択してください', 'danger') return redirect(url_for('list_cart')) session['confirm'] = True # spots = list(map(lambda spot_id: ChootripApi.get_spot(spot_id), session['cart'])) spots = ChootripApi.get_spots(session['cart']) spots = set_cart_added(spots) spots = set_one_image(spots) return render_template('confirm_cart.html', spots=spots)
def search_result(): q = request.args.get('q') q = q.strip() if q: spots = ChootripApi.get_spots_by_title_search(q) else: spots = [] spots = set_cart_added(spots) spots = set_one_image(spots) return render_template('search_result.html', search_word=q, spots=spots)
def show_recommend(): if len(session['cart']) != 10: flash('不正な入力です', 'danger') return redirect(url_for('top')) # TODO: もうすでにこの学籍番号のデータが登録されている場合は,ここで弾く session.pop('confirm', None) # GET: RECOMMEND_SPOTS # keys: ['similarities', 'user_vec'] recommend_data = ChootripApi.get_recommend(session['cart']) recommend_spots = extract_10_recommend_spots( similarities_dict=recommend_data['similarities']) topics_with_words = get_topics_with_words() # GET: PREFERENCE s = SpreadSheet() normalized_user_vec = recommend_data['normalized_user_vec'] s.update_normalized_topic_result(session['username'], normalized_user_vec) user_vec = recommend_data['user_vec'] s.update_topic_result(session['username'], user_vec) selected_spots = ChootripApi.get_spots(session['cart']) selected_spots_name = [] for selected_spot in selected_spots: selected_spots_name.append(selected_spot['title']) s.update_selected_spots(session['username'], selected_spots_name) recommend_spots_name = [] for recommend_spot in recommend_spots: recommend_spots_name.append(recommend_spot['title']) s.update_recommend_result(session['username'], recommend_spots_name) return render_template('recommends.html', recommend_spots=recommend_spots, topics=zip(topics_with_words, normalized_user_vec))
def extract_10_recommend_spots(similarities_dict): similarities_sorted = sorted(similarities_dict.items(), key=lambda x: -x[1]) # chunk_size件ずつ条件にあったスポットを取り出す chunk_size = 50 chunked_similarities = [ similarities_sorted[n:n + chunk_size] for n in range(0, len(similarities_sorted), chunk_size) ] recommend_spots = [] for similarities_by_chunk_size in chunked_similarities: spot_ids = [] for spot_similarity_info in similarities_by_chunk_size: spot_id = spot_similarity_info[0] _similarity = spot_similarity_info[1] spot_ids.append(spot_id) spots = ChootripApi.get_spots(spot_ids) recommend_spots.extend(spots) # exclude selected spots recommend_spots = list( filter(lambda s: s['id'] not in session['cart'], recommend_spots)) # extract by counts recommend_spots = list( filter(lambda s: s['count'] >= 153, recommend_spots)) # set similarity for spot in recommend_spots: spot['similarity'] = similarities_dict[str(spot['id'])] # sort recommend_spots = list( sorted(recommend_spots, key=lambda s: -s['similarity'])) if len(recommend_spots) > 10: break return recommend_spots[:10]
def select_city(prefecture_id=None): cities = ChootripApi.get_cities(prefecture_id) cities = list(filter(lambda city: city['spot_count'] != 0, cities)) chunked_cities = [cities[n:n + 3] for n in range(0, len(cities), 3)] return render_template('select_city.html', cities=chunked_cities)
def get_topics(): topics = ChootripApi.get_topics()['topics'] return topics
def list_cart(): spots = list( map(lambda spot_id: ChootripApi.get_spot(spot_id), session['cart'])) spots = set_cart_added(spots) spots = set_one_image(spots) return render_template('list_cart.html', spots=spots)
from flask import Flask, render_template, request, session, redirect, url_for, jsonify, flash import os from chootrip_api import ChootripApi from experiment_db import SpreadSheet # from google.cloud import datastore app = Flask(__name__) app.config["SECRET_KEY"] = os.environ.get('SECRET_KEY') prefectures = ChootripApi.get_prefectures() @app.context_processor def inject_pref(): return dict(prefectures=prefectures) @app.context_processor def inject_cart_count(): if 'cart' in session: return dict(count=len(session['cart'])) else: return dict(count=0) @app.context_processor def override_url_for(): return dict(url_for=dated_url_for) def dated_url_for(endpoint, **values):