|
import streamlit as st |
|
import imdb |
|
import requests |
|
import logging |
|
import socket |
|
|
|
|
|
logging.basicConfig(level=logging.INFO) |
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
API_BASE_URL = "https://vidsrc-pi.vercel.app" |
|
PROXY_URL = "https://simple-proxy.yuyutsu.workers.dev/" |
|
|
|
|
|
ia = imdb.IMDb() |
|
|
|
|
|
|
|
def test_proxy_connection(): |
|
try: |
|
|
|
ip_address = socket.gethostbyname(PROXY_URL.split("//")[1]) |
|
logger.info(f"Resolved IP address: {ip_address}") |
|
|
|
|
|
response = requests.get(PROXY_URL, timeout=5) |
|
logger.info(f"Proxy connection test result: {response.status_code}") |
|
return True, f"Connected successfully. Status code: {response.status_code}" |
|
except socket.gaierror as e: |
|
logger.error(f"DNS resolution failed: {e}") |
|
return False, f"Failed to resolve hostname: {e}" |
|
except requests.exceptions.RequestException as e: |
|
logger.error(f"Proxy connection test failed: {e}") |
|
return False, f"Connection failed: {e}" |
|
|
|
|
|
|
|
|
|
st.title("Movie & TV Show Streamer") |
|
|
|
|
|
proxy_status, proxy_message = test_proxy_connection() |
|
if not proxy_status: |
|
st.error(f"Unable to connect to the proxy. Error: {proxy_message}") |
|
st.info("Debugging Information:") |
|
st.code(f""" |
|
Proxy URL: {PROXY_URL} |
|
API Base URL: {API_BASE_URL} |
|
|
|
Try to ping the proxy server: |
|
ping {PROXY_URL.split("//")[1]} |
|
|
|
Try to curl the proxy server: |
|
curl -v {PROXY_URL} |
|
""") |
|
else: |
|
st.success(f"Connected to proxy successfully. {proxy_message}") |
|
|
|
search_query = st.text_input("Enter a movie or TV show title:") |
|
|
|
|
|
if search_query: |
|
with st.spinner('Searching for titles...'): |
|
results = search_titles(search_query) |
|
|
|
if results: |
|
for result in results[:5]: |
|
try: |
|
movie = ia.get_movie(result.movieID) |
|
title = movie['title'] |
|
year = movie.get('year') |
|
poster_url = get_poster_url(movie) |
|
|
|
col1, col2 = st.columns([1, 4]) |
|
|
|
with col1: |
|
st.image(poster_url, width=150) |
|
|
|
with col2: |
|
st.subheader(title) |
|
if year: |
|
st.caption(f"({year})") |
|
if st.button(f"Watch {title}", key=f"watch_{result.movieID}"): |
|
st.session_state.selected_imdb_id = result.movieID |
|
|
|
except Exception as e: |
|
logger.error(f"Error processing result: {e}") |
|
st.error("An error occurred while processing this result.") |
|
else: |
|
st.info("No results found. Please try another search.") |
|
|
|
|
|
if 'selected_imdb_id' in st.session_state: |
|
imdb_id = st.session_state.selected_imdb_id |
|
with st.spinner('Fetching video stream...'): |
|
video_url = get_video_url(imdb_id) |
|
|
|
if video_url: |
|
st.video(video_url) |
|
else: |
|
st.warning("Video stream not found for this title.") |
|
|
|
|
|
st.markdown("---") |
|
st.caption("Powered by IMDb and vidsrc. For educational purposes only.") |