The Movie Database támogatás

Hi Team, So I have been doing a flutter project and I tried to pull the trailer URL from the API. After the whole code is written without any errors, the key is being generated as null. Here is the code that I have written.

According to the code written and for any movie if the trailer button is clicked, a message with random key is being generated.

Failed to open trailer. Could not launch https:// www.youtube.com/watch?y=https:/ www.youtube.com/watch?v=TOwSzeBITAE

Could you please help me with this?

Thank you.

Future<String?> fetchTrailerUrl(int movieId) async {
    try {
      final response = await http.get(
        Uri.parse('$baseUrl/movie/$movieId/videos?api_key=$apiKey'),
      );

      if (response.statusCode == 200) {
        final data = jsonDecode(response.body);
        final results = data['results'] as List;

        // Look for a YouTube trailer
        final trailer = results.firstWhere(
          (video) => video['type'] == 'Trailer' && video['site'] == 'YouTube',
          orElse: () => null,
        );

        // Return the full YouTube URL if a trailer is found
        if (trailer != null) {
          return 'https://www.youtube.com/watch?v=${trailer['key']}';
        }

        // No trailer found
        return null;
      } else {
        throw Exception('Failed to load trailer: ${response.reasonPhrase}');
      }
    } catch (e) {
      print('Error in fetchTrailerUrl: $e');
      return null;
    }
  }
class TrailerButtonWidget extends StatelessWidget {
  final int movieId;

  const TrailerButtonWidget({super.key, required this.movieId});

  Future<void> _launchYouTube(String url) async {
    final Uri uri = Uri.parse(url);
    if (await canLaunchUrl(uri)) {
      // Automatically redirects to YouTube app or browser
      await launchUrl(uri, mode: LaunchMode.externalApplication);
    } else {
      throw 'Could not launch $url';
    }
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: ElevatedButton(
        onPressed: () async {
          try {
            final trailerKey = await ApiService().fetchTrailerUrl(movieId);
            if (trailerKey != null) {
              final trailerUrl = 'https://www.youtube.com/watch?v=$trailerKey';
              await _launchYouTube(trailerUrl);
            } else {
              ScaffoldMessenger.of(context).showSnackBar(
                const SnackBar(content: Text('Trailer not available.')),
              );
            }
          } catch (e) {
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('Failed to open trailer: $e')),
            );
          }
        },
        child: const Text('Watch Trailer'),
      ),
    );
  }
}

4 válasz érkezett (1 / 1 oldalból)

Jump to last post

Hello Team could you please provide any update on this?

@J_A_R_V_I_S said:
Fetching Movie Trailers from the API.
Hi Team,
So I have been doing a flutter project and I tried to pull the trailer URL from the API.
After the whole code is written without any errors, the key is being generated as null. Here is the code that I have written.

According to the code written and for any movie if the trailer button is clicked, a message with random key is being generated.

Failed to open trailer. Could not launch https://
www.youtube.com/watch?y=https:/
www.youtube.com/watch?v=TOwSzeBITAE
Could you please help me with this?
Thank you.

Future<String?> fetchTrailerUrl(int movieId) async {
      return null;
    }
  }
class TrailerButtonWidget extends StatelessWidget {
}

I am not a programmer.
So I can't help you by reading your code.
But looking at your code I notice something wrong in this part.

www.youtube.com/watch?y=https:/
www.youtube.com/watch?v=**TOwSzeBITAE**

That Youtube KEY, TOwSzeBITAE, is no longer available.

I can pass on the following information.

Trailer URL

When you make an API Request requesting Videos,
in the response you will receive something like this:

videos  
results 
0   
iso_639_1   "en"
iso_3166_1  "US"
name    "Fight Club - Theatrical Trailer Remastered in HD"
key "6JnN1DmbqoU"
site    "YouTube"
size    1080
type    "Trailer"
official    false
published_at    "2015-02-26T03:19:25.000Z"
id  "5e382d1b4ca676001453826d"

Just add the KEY in the respective URL:

YouTube: https://www.youtube.com/watch?v=KEY  
Vimeo: https://vimeo.com/KEY  
Vimeo: https://player.vimeo.com/video/KEY  

For example:
Youtube: https://www.youtube.com/watch?v=6JnN1DmbqoU
Youtube: https://www.youtube.com/watch?v=hzfvYSIIgyc
Vimeo: https://vimeo.com/282875052
Vimeo: https://player.vimeo.com/video/282875052

Travis Bell said on 2020-09-19
And it still holds true today. Nothing changed.

Hi @user, we only support YouTube and Vimeo right now.

And I don't see any plans on the To-Do list to add a new channel.
https://trello.com/b/k34aFUme/web?filter=video

Hi Team, I have made the update to the code in order to fetch the Trailer URL via redirection to YouTube. The trailer is being played but the video shows as the blank screen. Here is the code that I have written for the trailer button widget that renders in the user interface.

// Trailer Button Widget
class TrailerButtonWidget extends StatelessWidget {
  final int movieId;

  const TrailerButtonWidget({super.key, required this.movieId});

  Future<void> _launchYouTube(String url) async {
    final Uri uri = Uri.parse(url);
    if (await canLaunchUrl(uri)) {
      await launchUrl(uri, mode: LaunchMode.externalApplication);
    } else {
      throw 'Could not launch $url';
    }
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: ElevatedButton(
        onPressed: () async {
          try {
            final trailerKey = await ApiService().fetchTrailerUrl(movieId);
            if (trailerKey != null) {
              // Construct the YouTube URL correctly
              final trailerUrl = 'https://www.youtube.com/watch?v=$trailerKey';
              print('Opening YouTube Trailer URL: $trailerUrl');
              await _launchYouTube(trailerUrl);
            } else {
              ScaffoldMessenger.of(context).showSnackBar(
                const SnackBar(content: Text('Trailer not available.')),
              );
            }
          } catch (e) {
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('Failed to open trailer: $e')),
            );
          }
        },
        child: const Text('Watch Trailer'),
      ),
    );
  }
}

This is the code that I have written that tracks the data from the TMDB API.

/// Fetch trailer URL (example placeholder)
  Future<String?> fetchTrailerUrl(int movieId) async {
    final response = await http.get(
      Uri.parse('$baseUrl/movie/$movieId/videos?api_key=$apiKey'),
    );

    if (response.statusCode == 200) {
      final data = jsonDecode(response.body);
      final results = data['results'];

      if (results != null && results.isNotEmpty) {
        final trailer = results.firstWhere(
          (video) => video['type'] == 'Trailer',
          orElse: () => null,
        );

        if (trailer != null) {
          return trailer['key']; // Return only the video key
        }
      }
      return null;
    } else {
      throw Exception('Failed to load trailer');
    }
  }

Could you please help me with this?

Thank you.

@J_A_R_V_I_S said:

Hi Team,
I have made the update to the code in order to fetch the Trailer URL via redirection to YouTube.
The trailer is being played

Good

but the video shows as the blank screen.
Here is the code that I have written for the trailer button widget that renders in the user interface.

// Trailer Button Widget  
}

This is the code that I have written that tracks the data from the TMDB API.

/// Fetch trailer URL (example placeholder)
  Future<String?> fetchTrailerUrl(int movieId) async {
  }

Could you please help me with this?

I did a Google search.
https://www.google.com/search?client=firefox-b-d&q=trailer+is+being+played+but+the+video+shows+as+the+blank+screen
It seems like this is a problem for a lot of people.
I found this more recent question.
Maybe it will help.
https://community.firecore.com/t/black-screen-on-trailers/48616

Nem találsz egy filmet vagy egy sorozatot? Jelentkezz be és hozd létre.

Globális

s focus the search bar
p profil menü megnyitása
esc close an open window
? billentyűparancsok ablak megnyitása

Minden média oldalon

b go back (or to parent when applicable)
e go to edit page

On TV season pages

(jobbra nyíl) ugrás a következő évadra
(balra nyíl) vissza az előző évadra

Tévéepizód oldalakon

(jobbra nyíl) ugrás a következő részre
(balra nyíl) vissza az előző részre

Minden kép oldalon

a kép hozzáadása ablak megnyitása

Minden szerkesztő oldalon

t fordítás választó megnyitása
ctrl+ s submit form

On discussion pages

n create new discussion
w toggle watching status
p toggle public/private
c toggle close/open
a open activity
r reply to discussion
l ugrás az utolsó válaszhoz
ctrl+ enter submit your message
(jobbra nyíl) következő oldal
(balra nyíl) előző oldal

Beállítások

Want to rate or add this item to a list?

Bejelentkezés