File size: 3,596 Bytes
8709d5a
 
 
8948281
f641632
8948281
 
 
 
8709d5a
 
8948281
4bba265
8709d5a
 
8948281
8709d5a
 
 
9c715a3
8948281
f641632
 
 
 
 
9c715a3
8948281
f641632
 
 
 
8948281
 
f641632
8948281
f641632
8709d5a
9c715a3
8709d5a
 
8948281
f641632
 
 
 
 
 
 
 
 
 
 
 
 
 
9c715a3
f641632
 
9c715a3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8948281
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import streamlit as st
import imdb
import requests
import logging
import socket

# Configure logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# --- API Configuration ---
API_BASE_URL = "https://vidsrc-pi.vercel.app"
PROXY_URL = "https://movie.yuyutsu.workers.dev"

# --- 1. Setup ---
ia = imdb.IMDb()

# --- 2. Helper Functions ---

def test_proxy_connection():
    try:
        # First, try to resolve the hostname
        ip_address = socket.gethostbyname(PROXY_URL.split("//")[1])
        logger.info(f"Resolved IP address: {ip_address}")
        
        # If resolution succeeds, try to connect
        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}"

# ... (keep the rest of the helper functions as they were) ...

# --- 3. Streamlit App ---
st.title("Movie & TV Show Streamer")

# Test proxy connection at startup
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:")

    # --- 4. Search & Display Results ---
    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.")

    # --- 5. Handle Movie/Show Selection & Video Playback --- 
    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.")

# --- 6. Footer ---
st.markdown("---")
st.caption("Powered by IMDb and vidsrc. For educational purposes only.")