Ejemplo n.º 1
0
def recommendations():
    data = request.args
    try:
        access_key = str(dict(data)['access_key'][0])
    except:
        return accessKeyRequired()

    agent = Agent.query.filter_by(access_key=access_key).first()
    if agent is None: return accessKeyRequired(not_in_db=True)
    try:
        agent_user_id = str(data['user_id'])
    except:
        return badRequest()

    user = User.query.filter_by(agent_user_id=agent_user_id,
                                agent_id=agent.id).first()
    if user is None: return badRequest(user=True)

    user_movies = get_user_movies(user.id)
    if not user_movies:
        return 'User has no movies'  #, Response(403) jsonify([])

    if agent.agent_name == 'vkino':
        user_tmdb_movies = []
        for movie in user_movies:
            tmdbid = Vkino.query.filter_by(vkino_id=movie).first().tmdb_fk_id
            if tmdbid is None:
                continue
            else:
                user_tmdb_movies.append(tmdbid)
    if not user_tmdb_movies:
        return jsonify(recommendations=[])

    min_num_of_recs = 3

    rs = Recommender(user_tmdb_movies, agent.agent_name + '_movies',
                     agent.agent_name + '_id', user.id)
    rs.tmdb_input_info()
    rs.form_characteristics()
    result = rs.get_recommendations()

    if not result:
        return jsonify(recommendations=result)

    agent_premiere_idx = [movie['pk_id'] for movie in result[:min_num_of_recs]]
    if type(agent_premiere_idx) is list:
        r = Recommendation(user.id, agent.id, datetime.now())
        db.session.add(r)
        db.session.commit()
        for movie in agent_premiere_idx:
            mr = MovieRecommendation(r.id, movie, datetime.now())
            db.session.add(mr)
            db.session.commit()

    return jsonify(recommendations=agent_premiere_idx, recommendation_id=r.id)
Ejemplo n.º 2
0
    def post(self):
        json_data = request.get_json(force=True)
        email_request = json_data['emailRequest']

        for req in email_request:
            route = req['route']
            for menuitem in req['menuRequest']['menu']:
                name = menuitem['name']
                for recipe in menuitem['recipes']:
                    # print(recipe['title'], ' '.join(recipe['ingredients']))
                    title = recipe['title']
                    ingredients = ' '.join(recipe['ingredients'])

                    recipe_keywords = route + ' ' + name + ' ' + title + ' ' + ingredients
                    # pre-process the keywords
                    print(recipe_keywords)
                    indexes = fs.get_closest_match(recipe_keywords, count=15)
                    titles = fs.get_titles(indexes)
                    recommendations = rc.get_recommendations(titles[0])
                    print(recommendations)

        return jsonify(emailRequest=email_request)
Ejemplo n.º 3
0
def recommendations():
    print('2')
    # print(request.args)
    data = request.args
    try:
        access_key = str(dict(data)['access_key'][0])
    except:
        return accessKeyRequired()

    agent = Agent.query.filter_by(access_key=access_key).first()
    if agent is None: return accessKeyRequired(not_in_db=True)
    try:
        agent_user_id = str(data['user_id'])
    except:
        return badRequest()

    user = User.query.filter_by(agent_user_id=agent_user_id,
                                agent_id=agent.id).first()
    if user is None: return badRequest(user=True)

    user_movies = get_user_movies(user.id)
    logger.info(user_movies)
    print(user_movies)
    if not user_movies:
        return 'User has no movies'  #, Response(403) jsonify([])

    if not Recommendation.query.filter_by(user_id=user.id).all():
        print('No recommendations before')
    else:
        print('Some movies were recommender before')
        prev_rec_dates = []
        for rec in Recommendation.query.filter_by(user_id=user.id).all():
            prev_rec_dates.append(
                (datetime.now() - rec.created_at).total_seconds() / 3600)
        last_rec_date = min(prev_rec_dates)
        print(last_rec_date)
        if last_rec_date <= 24:
            print('Latest recommendation was today. Return empty list')
            return jsonify(recommendations=[])

    if agent.agent_name == 'vkino':
        user_tmdb_movies = []
        for movie in user_movies:
            tmdbid = Vkino.query.filter_by(vkino_id=movie).first().tmdb_fk_id
            if tmdbid is None:
                continue
            else:
                user_tmdb_movies.append(tmdbid)
    if not user_tmdb_movies:
        return jsonify(recommendations=[])
    print(user_tmdb_movies)
    min_num_of_recs = 3

    rs = Recommender(user_tmdb_movies, agent.agent_name + '_movies',
                     agent.agent_name + '_id', user.id)
    rs.tmdb_input_info()
    rs.form_characteristics()
    result = rs.get_recommendations()
    #print(result[0])
    if not result:
        return jsonify(recommendations=result)

    agent_premiere_idx = [movie['pk_id'] for movie in result[:min_num_of_recs]]
    print(agent_premiere_idx)
    if type(agent_premiere_idx) is list:
        r = Recommendation(user.id, agent.id, datetime.now())
        db.session.add(r)
        db.session.commit()
        for movie in agent_premiere_idx:
            mr = MovieRecommendation(r.id, movie, datetime.now())
            db.session.add(mr)
            db.session.commit()

    return jsonify(recommendations=agent_premiere_idx, recommendation_id=r.id)
Ejemplo n.º 4
0
def main():
    parser = argparse.ArgumentParser(description='Project argument parser')
    parser.add_argument(
        '-f',
        '--function',
        type=str,
        help='The function, can be either scraper or recommender',
        required=True,
        dest='f')
    parser.add_argument(
        '-t',
        '--tag',
        type=str,
        help='The hashtag to be scraped, can be also a list or a txt file',
        required=False,
        dest='t')
    parser.add_argument(
        '-u',
        '--url',
        type=str,
        help='The url of the post which you want to find similar',
        required=False,
        dest='u')

    args = parser.parse_args()
    if args.f == "scraper":
        if not args.t:
            print("At least an hashtag must be defined")
            sys.exit(1)
        instagram_scraper = InstagramScraper()
        flickr_scraper = FlickrScraper()
        driver = instagram_scraper.establish_connection()
        flickrapi = flickr_scraper.establish_connection()
        if args.t:
            inp = check_input(args.t)
            if inp == 0:
                with open(args.t) as tag_file:
                    for line in tag_file:
                        instagram_scraper.scrape_hashtag(driver, line)
                        flickr_scraper.scrape_hashtag(flickrapi, line)
            elif inp == 1:
                for tag in args.t:
                    instagram_scraper.scrape_hashtag(driver, tag)
                    flickr_scraper.scrape_hashtag(flickrapi, tag)
            elif inp == 2:
                instagram_scraper.scrape_hashtag(driver, args.t)
                flickr_scraper.scrape_hashtag(flickrapi, args.t)
        instagram_scraper.end_connection(driver)
        # MongoConnector.translate_to_english('sport')
        # MongoConnector.translate_to_english('food')
    elif args.f == 'recommender':
        if args.u:
            recommender = Recommender()
            recommendation = recommender.get_recommendations(args.u)
            print('The best matches are: %s' % recommendation)
        else:
            print('Invalid argument, should be -u or --url')
            sys.exit(1)
    else:
        print("Invalid function, type -h for more info")
        sys.exit(1)