|
import streamlit as st |
|
from imdb import IMDb |
|
import requests |
|
from PIL import Image |
|
from io import BytesIO |
|
|
|
|
|
def search_movies(movie_name): |
|
ia = IMDb() |
|
search_results = ia.search_movie(movie_name) |
|
return search_results |
|
|
|
|
|
def fetch_image(url): |
|
response = requests.get(url) |
|
img = Image.open(BytesIO(response.content)) |
|
return img |
|
|
|
|
|
def get_movie_details(imdb_id): |
|
ia = IMDb() |
|
movie = ia.get_movie(imdb_id) |
|
details = { |
|
'title': movie['title'], |
|
'year': movie.get('year'), |
|
'rating': movie.get('rating'), |
|
'genres': movie.get('genres'), |
|
'plot': movie.get('plot'), |
|
'poster_url': movie.get('full-size cover url'), |
|
'kind': movie.get('kind'), |
|
'episodes': movie.get('episodes') if movie.get('kind') == 'tv series' else None |
|
} |
|
return details |
|
|
|
def main(): |
|
st.set_page_config(page_title="Yuyutsu MovieDrive", page_icon="🦇", layout="wide") |
|
st.title("Yuyutsu MovieDrive") |
|
|
|
|
|
if 'search_results' not in st.session_state: |
|
st.session_state.search_results = None |
|
if 'selected_movie' not in st.session_state: |
|
st.session_state.selected_movie = None |
|
if 'details' not in st.session_state: |
|
st.session_state.details = None |
|
if 'imdb_id' not in st.session_state: |
|
st.session_state.imdb_id = None |
|
|
|
movie_name = st.text_input("Enter the movie or series name:") |
|
is_webseries = st.checkbox("This is a web series") |
|
|
|
if movie_name and st.button("Search"): |
|
st.session_state.search_results = search_movies(movie_name) |
|
st.session_state.selected_movie = None |
|
st.session_state.details = None |
|
st.session_state.imdb_id = None |
|
|
|
if st.session_state.search_results: |
|
st.write(f"Found {len(st.session_state.search_results)} results. Select one:") |
|
selected_movie = st.selectbox( |
|
"Select a movie or series:", |
|
options=[movie["title"] for movie in st.session_state.search_results], |
|
key="movie_select" |
|
) |
|
|
|
if selected_movie != st.session_state.selected_movie: |
|
st.session_state.selected_movie = selected_movie |
|
movie_data = next(m for m in st.session_state.search_results if m['title'] == selected_movie) |
|
st.session_state.imdb_id = movie_data.movieID |
|
st.session_state.details = get_movie_details(st.session_state.imdb_id) |
|
|
|
if st.session_state.details and st.session_state.imdb_id: |
|
details = st.session_state.details |
|
imdb_id = st.session_state.imdb_id |
|
|
|
col1, col2 = st.columns([1, 2]) |
|
with col1: |
|
if details.get('poster_url'): |
|
poster = fetch_image(details['poster_url']) |
|
st.image(poster, caption=details['title'], use_column_width=True) |
|
|
|
with col2: |
|
st.subheader(f"{details['title']} ({details.get('year', 'N/A')})") |
|
st.write(f"**IMDb Rating:** {details.get('rating', 'Not rated')}") |
|
st.write(f"**Genres:** {', '.join(details.get('genres', ['Not specified']))}") |
|
st.write(f"**Plot:** {details.get('plot', 'No plot available')}") |
|
|
|
st.subheader("Watch Options") |
|
|
|
|
|
if is_webseries or details['kind'] == 'tv series': |
|
vidsrc_url = f"https://vidsrc.xyz/embed/tv?imdb=tt{imdb_id}" |
|
st.write(f"Click the link below to watch the web series on vidsrc:") |
|
st.markdown(f"[Watch {details['title']} on vidsrc]({vidsrc_url})") |
|
else: |
|
vidsrc_url = f"https://vidsrc.xyz/embed/movie?imdb=tt{imdb_id}" |
|
st.write(f"Click the link below to watch on vidsrc:") |
|
st.markdown(f"[Watch {details['title']} on vidsrc]({vidsrc_url})") |
|
|
|
|
|
if is_webseries or details['kind'] == 'tv series': |
|
st.write("For TV Series, select season and episode:") |
|
|
|
if details['episodes']: |
|
seasons = sorted(details['episodes'].keys()) |
|
season = st.selectbox("Season", options=seasons) |
|
|
|
if season: |
|
episodes = sorted(details['episodes'][season].keys()) |
|
episode = st.selectbox("Episode", options=episodes) |
|
|
|
if episode: |
|
autoembed_url = f"https://player.autoembed.cc/embed/tv/tt{imdb_id}/{season}/{episode}" |
|
st.markdown(f"[Watch {details['title']} S{season:02d}E{episode:02d} on autoembed]({autoembed_url})") |
|
else: |
|
st.write("Episode information is not available for this series.") |
|
season = st.number_input("Enter season number:", min_value=1, value=1) |
|
episode = st.number_input("Enter episode number:", min_value=1, value=1) |
|
autoembed_url = f"https://player.autoembed.cc/embed/tv/tt{imdb_id}/{season}/{episode}" |
|
st.markdown(f"[Watch {details['title']} S{season:02d}E{episode:02d} on autoembed]({autoembed_url})") |
|
|
|
elif details['kind'] == 'movie': |
|
autoembed_url = f"https://player.autoembed.cc/embed/movie/tt{imdb_id}" |
|
st.write(f"Alternative link for movies:") |
|
st.markdown(f"[Watch {details['title']} on autoembed]({autoembed_url})") |
|
else: |
|
st.write("Note: Alternative link is not available for this type of content.") |
|
|
|
st.write("Note: These links will open in a new tab. Please ensure you have appropriate permissions to view the content.") |
|
|
|
|
|
st.markdown("---") |
|
st.markdown( |
|
"<h3 style='text-align: center;'>" |
|
"Created with ❤️ by Yuyutsu<br>" |
|
"<span style='color: #FF9933;'>जय श्री राम</span>" |
|
"</h3>", |
|
unsafe_allow_html=True |
|
) |
|
|
|
if __name__ == "__main__": |
|
main() |