diff --git a/movie_recommendations/Test.http b/movie_recommendations/Test.http new file mode 100644 index 00000000..b4ba46b7 --- /dev/null +++ b/movie_recommendations/Test.http @@ -0,0 +1,15 @@ +### GET request to example server +GET http://127.0.0.1:5000/boop + +### + +POST http://127.0.0.1:5000/api/v3/AI_recommendations +Content-Type: application/json + +[ + 49026, + 155, + 312113 +] + +### diff --git a/movie_recommendations/movie_recommender.py b/movie_recommendations/movie_recommender.py index 3a4aca38..40e15c30 100644 --- a/movie_recommendations/movie_recommender.py +++ b/movie_recommendations/movie_recommender.py @@ -1,8 +1,26 @@ +import hashlib +import json +from datetime import datetime + import pandas as pd import numpy as np from ast import literal_eval from sklearn.feature_extraction.text import CountVectorizer from sklearn.metrics.pairwise import cosine_similarity +from flask import Flask, request, jsonify +from flask_caching import Cache + + +config = { + "DEBUG": True, # some Flask specific configs + "CACHE_TYPE": "SimpleCache", + "CACHE_DEFAULT_TIMEOUT": 300 +} + +app = Flask(__name__) + +app.config.from_mapping(config) +cache = Cache(app) def get_director(x): @@ -104,16 +122,38 @@ class MovieRecommender: if recommended_id in movie_ids: continue - if recommended_movies.get(recommended_id) is None: - recommended_movies[recommended_id] = sim_score / len(movie_ids) + if recommended_movies.get(int(recommended_id)) is None: + recommended_movies[int(recommended_id)] = float(round((sim_score / len(movie_ids)), 4)) else: - recommended_movies[recommended_id] += sim_score / len(movie_ids) + recommended_movies[int(recommended_id)] += float(round((sim_score / len(movie_ids)), 4)) return recommended_movies +recommender = MovieRecommender() +recommender.fit('movie_recommendations/datasets/tmdb_5000_credits.csv', + 'movie_recommendations/datasets/tmdb_5000_movies.csv') + + +def make_cache_key(): + data = request.get_json() + if isinstance(data, list): + data = sorted(data) + key = hashlib.md5(json.dumps(data).encode('utf-8')).hexdigest() + return key + + +@app.route("/api/v3/AI_recommendations", methods=["POST"]) +@cache.cached(timeout=300, key_prefix=make_cache_key) +def AI_recommendations(): + ids = request.get_json() + recommendations = recommender.get_recommendations(ids) + recommendations[0] = datetime.now() + return jsonify(recommendations) + + # Przykładowe użycie: -if __name__ == "__main__": - recommender = MovieRecommender() - recommender.fit('datasets/tmdb_5000_credits.csv', 'datasets/tmdb_5000_movies.csv') - recommendations = recommender.get_recommendations([49026, 155, 312113]) - print(recommendations) +# if __name__ == "__main__": +# recommender = MovieRecommender() +# recommender.fit('datasets/tmdb_5000_credits.csv', 'datasets/tmdb_5000_movies.csv') +# recommendations = recommender.get_recommendations([49026, 155, 312113]) +# print(recommendations)