ArchitSharma commited on
Commit
ce0c3c0
·
verified ·
1 Parent(s): 9ed1fc3

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +62 -5
main.py CHANGED
@@ -10,6 +10,8 @@ import pickle
10
  import requests
11
  from datetime import date, datetime
12
 
 
 
13
  # load the nlp model and tfidf vectorizer from disk
14
  filename = 'nlp_model.pkl'
15
  clf = pickle.load(open(filename, 'rb'))
@@ -42,6 +44,58 @@ def home():
42
  return render_template('home.html',suggestions=suggestions)
43
 
44
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  @app.route("/recommend",methods=["POST"])
46
  @app.route("/recommend", methods=["POST"])
47
  def recommend():
@@ -108,7 +162,7 @@ def recommend():
108
  for i in range(len(cast_places))
109
  }
110
 
111
- # ---------- SAFE REVIEWS BLOCK ----------
112
  movie_reviews = {} # default: no reviews
113
  try:
114
  url = f"https://www.imdb.com/title/{imdb_id}/reviews?ref_=tt_ov_rt"
@@ -135,13 +189,16 @@ def recommend():
135
  pred = clf.predict(movie_vector)
136
  reviews_status.append('Positive' if pred else 'Negative')
137
 
138
- movie_reviews = {
139
- reviews_list[i]: reviews_status[i] for i in range(len(reviews_list))
140
- }
 
141
  except Exception as e:
142
  print(f"IMDb reviews fetch failed: {e}")
143
  movie_reviews = {}
144
- # ---------- END SAFE REVIEWS BLOCK ----------
 
 
145
 
146
  # dates
147
  movie_rel_date = ""
 
10
  import requests
11
  from datetime import date, datetime
12
 
13
+
14
+ TMDB_API_KEY = os.environ.get("TMDB_API_KEY")
15
  # load the nlp model and tfidf vectorizer from disk
16
  filename = 'nlp_model.pkl'
17
  clf = pickle.load(open(filename, 'rb'))
 
44
  return render_template('home.html',suggestions=suggestions)
45
 
46
 
47
+ def get_tmdb_reviews_from_imdb(imdb_id, max_reviews=10):
48
+ """
49
+ Given an imdb_id like 'tt1234567', return a dict {review_text: sentiment}
50
+ using TMDb's API. Returns {} on failure or if no reviews found.
51
+ """
52
+ if not TMDB_API_KEY:
53
+ # Key not available — caller will handle fallback
54
+ print("TMDb API key not set; skipping TMDb fetch.")
55
+ return {}
56
+
57
+ try:
58
+ find_url = f"https://api.themoviedb.org/3/find/{imdb_id}"
59
+ params = {"api_key": TMDB_API_KEY, "external_source": "imdb_id"}
60
+ r = requests.get(find_url, params=params, timeout=8)
61
+ r.raise_for_status()
62
+ found = r.json()
63
+
64
+ results = found.get("movie_results") or []
65
+ if not results:
66
+ return {}
67
+
68
+ tmdb_id = results[0]["id"]
69
+
70
+ reviews_url = f"https://api.themoviedb.org/3/movie/{tmdb_id}/reviews"
71
+ params = {"api_key": TMDB_API_KEY, "language": "en-US", "page": 1}
72
+ r2 = requests.get(reviews_url, params=params, timeout=8)
73
+ r2.raise_for_status()
74
+ reviews_data = r2.json()
75
+
76
+ out = {}
77
+ count = 0
78
+ for item in reviews_data.get("results", []):
79
+ if count >= max_reviews:
80
+ break
81
+ content = item.get("content")
82
+ if not content:
83
+ continue
84
+ # run your classifier to keep UX consistent
85
+ movie_review_list = np.array([content])
86
+ movie_vector = vectorizer.transform(movie_review_list)
87
+ pred = clf.predict(movie_vector)
88
+ sentiment = "Positive" if pred else "Negative"
89
+ out[content] = sentiment
90
+ count += 1
91
+
92
+ return out
93
+
94
+ except Exception as e:
95
+ print(f"TMDb fetch failed: {e}")
96
+ return {}
97
+
98
+
99
  @app.route("/recommend",methods=["POST"])
100
  @app.route("/recommend", methods=["POST"])
101
  def recommend():
 
162
  for i in range(len(cast_places))
163
  }
164
 
165
+
166
  movie_reviews = {} # default: no reviews
167
  try:
168
  url = f"https://www.imdb.com/title/{imdb_id}/reviews?ref_=tt_ov_rt"
 
189
  pred = clf.predict(movie_vector)
190
  reviews_status.append('Positive' if pred else 'Negative')
191
 
192
+ if reviews_list:
193
+ movie_reviews = {
194
+ reviews_list[i]: reviews_status[i] for i in range(len(reviews_list))
195
+ }
196
  except Exception as e:
197
  print(f"IMDb reviews fetch failed: {e}")
198
  movie_reviews = {}
199
+
200
+ if not movie_reviews:
201
+ movie_reviews = get_tmdb_reviews_from_imdb(imdb_id)
202
 
203
  # dates
204
  movie_rel_date = ""