From efdad74b3d8d60cfcee04edcc62a26cf7d0fdbfd Mon Sep 17 00:00:00 2001 From: gzub04 Date: Sat, 15 Jun 2024 18:29:19 +0200 Subject: [PATCH] Dodanie API do rekomendacji --- connector/Include/frontend_AI_connector.py | 14 ++++++--- movie_recommendations/movie_recommender.py | 33 ++++++++++++++++------ movie_recommendations/test.http | 12 ++++++++ 3 files changed, 47 insertions(+), 12 deletions(-) create mode 100644 movie_recommendations/test.http diff --git a/connector/Include/frontend_AI_connector.py b/connector/Include/frontend_AI_connector.py index f489ca29..001b6db3 100644 --- a/connector/Include/frontend_AI_connector.py +++ b/connector/Include/frontend_AI_connector.py @@ -3,7 +3,7 @@ import psycopg2 import pandas import json from configparser import ConfigParser - +import requests app = Flask(__name__) db_connector = None @@ -16,7 +16,7 @@ def error_decorator(fun): fun(*args, **kwargs) except psycopg2.DatabaseError: return jsonify({"status": "Something... unexpected has occured :sweat_smile:"}), 500 - + return inner1 @app.route("/", methods=["GET"]) @@ -55,8 +55,14 @@ def add_user(oauth_ID, username): def get_recommendations(oauth_ID): #request od frontu na rekomendacje #wysyłanie requestu do AI API o rekomendacje dla usera - #przesłanie danych do - return jsonify({"movies": ["3", "Wiedźmin 3", "Najlepszy."]}), 200 + #przesłanie danych do + + movies = [49026, 155, 312113] # mock values to be received from backend + url = 'http://localhost:8080/api/v3/AI_recommendations' # nie wiem, jakie powinno być url + response = requests.post(url, + json=movies, + headers={'Content-Type': 'application/json'}) + return jsonify(response.json()), 200 @app.route("/api/v3/get_movie/", methods=["GET"]) # @error_decorator diff --git a/movie_recommendations/movie_recommender.py b/movie_recommendations/movie_recommender.py index 3a4aca38..e05fb83e 100644 --- a/movie_recommendations/movie_recommender.py +++ b/movie_recommendations/movie_recommender.py @@ -3,6 +3,9 @@ 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 +import os +app = Flask(__name__) def get_director(x): @@ -104,16 +107,30 @@ 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') + + +@app.route("/api/v3/AI_recommendations", methods=["POST"]) +def AI_recommendations(): + ids = request.get_json() + recommendations = recommender.get_recommendations(ids) + 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) diff --git a/movie_recommendations/test.http b/movie_recommendations/test.http new file mode 100644 index 00000000..a474e240 --- /dev/null +++ b/movie_recommendations/test.http @@ -0,0 +1,12 @@ +### + +POST http://127.0.0.1:5000/api/v3/AI_recommendations +Content-Type: application/json + +[ + 49026, + 155, + 312113 +] + +### \ No newline at end of file