The Movie Database podpora

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 odpoveďí (na strane 1 z 1)

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ôžeš nájsť film alebo seriál? Prihlás sa a pridaj ho.

Globálne

s zamerať sa na vyhľadávací riadok
p otvoriť menu profilu
esc zatvoriť otvorené okno
? otvoriť okno klávesových skratiek

Na média stránkach

b ísť späť (do rodičovského pokiaľ možno)
e íst na stránku úprav

Na stránkach seriálových serií

(pravá šípka) ísť na nasledujúcu sériu
(ľavá šípka) ísť na predchádzajúcu sériu

Na stránkach seriálových epizód

(pravá šípka) ísť na nasledujúcu epizódu
(ľavá šipka) isť na predchádzajúcu epizódu

Na všetkých obrázkových strankach

a otvoriť okno pre pridanie obrázku

Na všetkých stránkach úprav

t otvoriť výber prekladu
ctrl+ s odoslať formulár

Na stránkach diskusií

n vytvoriť novú diskusiu
w prepínač stavu pozerania
p prepínač verejný/súkromný
c prepínač zatvorený/otvorený
a otvoriť aktivitu
r odpovedať v diskusií
l ísť na poslednú odpoveď
ctrl+ enter odoslať vašu správu
(pravá šípka) nasledujúca strana
(ľavá šípka) predchádzajúca strana

Nastavenia

Chcete ohodnotiť alebo pridať túto položku do zoznamu?

Prihlásiť sa