Untitled

 avatar
unknown
plain_text
a year ago
34 kB
14
Indexable
import 'dart:convert';

import 'package:tytmusic/helpers/ulke_muzik.dart';
import 'package:tytmusic/models/video_model.dart';
import 'package:flutter/widgets.dart';
import 'package:http/http.dart' as http;

import '../helpers/enum_helper.dart';

class YoutubeApi {
  final UlkeMuzik ulkeMuzik = UlkeMuzik();

  Future<dynamic> denemePostOynat() async {
    try {
      String uu =
          "https://www.youtube.com/youtubei/v1/reel/reel_item_watch?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8";

      Uri url = Uri.parse(uu);

      Map<String, dynamic> mapp = {
        /*
        
        {"context":{"client":{"hl":"tr","gl":"TR","remoteHost":"151.135.165.186","deviceMake":"Apple","deviceModel":"","visitorData":"CgtVVDZOeFM2UjdkcyjtnMmYBg%3D%3D","userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.115 Safari/537.36,gzip(gfe)","clientName":"WEB","clientVersion":"2.20220902.01.00","osName":"Macintosh","osVersion":"10_15_7","originalUrl":"https://www.youtube.com/","screenPixelDensity":2,"platform":"DESKTOP","clientFormFactor":"UNKNOWN_FORM_FACTOR","configInfo":{"appInstallData":"CO2cyZgGEPy6rgUQt8utBRDz__0SEOK8rgUQk6-uBRDUg64FEMvs_RIQuIuuBRDiua4FEPb__RIQq4D-EhDYvq0FEJH4_BI%3D"},"screenDensityFloat":2,"userInterfaceTheme":"USER_INTERFACE_THEME_DARK","timeZone":"Europe/Istanbul","browserName":"Chrome","browserVersion":"102.0.5005.115","screenWidthPoints":1037,"screenHeightPoints":910,"utcOffsetMinutes":180,"memoryTotalKbytes":"4000000","mainAppWebInfo":{"graftUrl":"https://www.youtube.com/","pwaInstallabilityStatus":"PWA_INSTALLABILITY_STATUS_UNKNOWN","webDisplayMode":"WEB_DISPLAY_MODE_BROWSER","isWebNativeShareAvailable":false}},"user":{"lockedSafetyMode":false},"request":{"useSsl":true,"internalExperimentFlags":[],"consistencyTokenJars":[]},"clickTracking":{"clickTrackingParams":"CAAQwrECIhMI3PbqreH2-QIV0a57Ch2nZwSi"},"adSignalsInfo":{"params":[{"key":"dt","value":"1662144109309"},{"key":"flash","value":"0"},{"key":"frm","value":"0"},{"key":"u_tz","value":"180"},{"key":"u_his","value":"4"},{"key":"u_h","value":"1120"},{"key":"u_w","value":"1792"},{"key":"u_ah","value":"1017"},{"key":"u_aw","value":"1792"},{"key":"u_cd","value":"30"},{"key":"bc","value":"31"},{"key":"bih","value":"910"},{"key":"biw","value":"1021"},{"key":"brdim","value":"0,25,0,25,1792,25,1792,1017,1037,910"},{"key":"vis","value":"1"},{"key":"wgl","value":"true"},{"key":"ca_type","value":"image"}]}},"playerRequest":{"videoId":"n50netB3MIU"},"params":"CA8qADAC","disablePlayerResponse":true}
        
        */
      };

      Map<String, String> head = {
        "accept": "*/*",
        "accept-encoding": "gzip",
        "accept-language": "en-GB, en;q=0.9",
        "content-length": "2",
        "content-type": "application/json",
        "origin": "https://www.youtube.com",
        "referer": "https://www.youtube.com/",
        "sec-fetch-dest": "empty",
        "sec-fetch-mode": "same-origin",
        "sec-fetch-site": "same-origin",
        "sec-gpc": "1",
        "user-agent":
            "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.5005.115 Safari/537.36",
        "x-goog-visitor-id": "CgtVVDZOeFM2UjdkcyjtnMmYBg%3D%3D",
        "x-youtube-bootstrap-logged-in": "false",
        "x-youtube-client-name": "1",
        "x-youtube-client-version": "2.20220902.01.00",
      };

      String body = json.encode(mapp);

      var res = await http.post(
        url,
        body: body,
        headers: head,
      );

      // var bodyJSON = json.decode(res.body);

      print(res.statusCode);

      return null;
    } catch (e) {
      debugPrint("Api -> deneme ERROR (catch) : $e");
      return null;
    }
  }

  Future<VideoModel?> videoOynat({required String videoId}) async {
    try {
      String uu =
          "https://youtubei.googleapis.com/youtubei/v1/player?key=AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w&prettyPrint=false&t=n-QmeBbiyNV2&id=$videoId";

      Uri url = Uri.parse(uu);

      Map<String, dynamic> mapp = {
        // "cpn": "W48Ary54ZD9d_hMQ",
        "contentCheckOk": true,
        "context": {
          "client": {
            "androidSdkVersion": 31,
            "osVersion": "12",
            "hl": "en-GB",
            "clientName": "ANDROID",
            "gl": "DE",
            "clientVersion": "17.31.35",
            "osName": "Android",
            "platform": "MOBILE"
          },
          "user": {"lockedSafetyMode": false}
        },
        "videoId": videoId,
        "racyCheckOk": true,
        "params": "8AEB",
      };

      Map<String, String> head = {
        // "accept-encoding": "gzip",
        //"accept-language": "en-GB, en;q=0.9",
        "connection": "Keep-Alive",
        // "content-length": "155",
        // "content-type": "application/json",
        "user-agent": "youtubei.googleapis.com",
        // "sdsfd":
        //     "com.google.android.youtube/16.29.38Linux; U; Android 11; US) gzip",
        // "x-goog-api-format-version": "2",
        "alt-svc": 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000',
        "cache-control": "private",
        "content-encoding": "gzip",
        "content-type": "application/json; charset=UTF-8",
        "transfer-encoding": "chunked",
        "vary": "Origin",
        "vary": "X-Origin",
        "vary": "Referer",
        "x-content-type-options": "nosniff",
        "x-frame-options": "SAMEORIGIN",
        "x-xss-protection": "0",
      };

      String body = json.encode(mapp);

      var res = await http.post(
        url,
        body: body,
        headers: head,
      );

      var bodyJSON = json.decode(res.body);

      var _videoPlayUrl;
      var _audioPlayUrl;
      List<String> _videoImageUrl = [];

      List streamList = bodyJSON["streamingData"]["formats"] as List;
      for (var i = 0; i < streamList.length; i++) {
        var element = streamList[i];
        if (element["audioChannels"] == 1 && _audioPlayUrl == null) {
          _audioPlayUrl = element["url"];
        } else if (element["audioChannels"] == 2 && _videoPlayUrl == null) {
          _videoPlayUrl = element["url"];
        }
      }

      var _videoId = bodyJSON["videoDetails"]["videoId"];
      var _time = bodyJSON["videoDetails"]["lengthSeconds"];
      var _videoName = bodyJSON["videoDetails"]["title"];

      List _videoImageList =
          bodyJSON["videoDetails"]["thumbnail"]["thumbnails"] as List;
      for (var i = 0; i < _videoImageList.length; i++) {
        var _e = _videoImageList[i]["url"];
        _videoImageUrl.add(_e.toString());
      }

      _videoImageUrl.add("https://i.ytimg.com/vi/$_videoId/mq1.jpg");

      try {
        _time = int.parse(_time);
      } catch (e) {}

      var model = VideoModel(
        id: _videoId,
        image: _videoImageUrl,
        name: _videoName,
        playUrl: _videoPlayUrl,
        time: _time,
        audioUrl: _audioPlayUrl,
      );

      return model;
    } catch (ee) {
      try {
        debugPrint("Api -> videoOynat ERROR (catch) : $ee");

        String uu =
            "https://youtubei.googleapis.com/youtubei/v1/player?key=AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w&prettyPrint=false&t=n-QmeBbiyNV2&id=$videoId";

        Uri url = Uri.parse(uu);

        Map<String, dynamic> mapp = {
          // "cpn": "W48Ary54ZD9d_hMQ",
          "contentCheckOk": true,
          "context": {
            "client": {
              "androidSdkVersion": 31,
              "osVersion": "12",
              "hl": "en-GB",
              "clientName": "ANDROID",
              "gl": "DE",
              "clientVersion": "17.31.35",
              "osName": "Android",
              "platform": "MOBILE"
            },
            "user": {"lockedSafetyMode": false}
          },
          "videoId": videoId,
          "racyCheckOk": true,
          "params": "8AEB",
        };

        Map<String, String> head = {
          "user-agent": "youtubei.googleapis.com",
          "alt-svc": 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000',
          "cache-control": "private",
          "content-encoding": "gzip",
          "content-type": "application/json; charset=UTF-8",
          "transfer-encoding": "chunked",
          "vary": "Origin",
          "vary": "X-Origin",
          "vary": "Referer",
          "x-content-type-options": "nosniff",
          "x-frame-options": "SAMEORIGIN",
          "x-xss-protection": "0",
        };

        String body = json.encode(mapp);

        var res = await http.post(
          url,
          body: body,
          headers: head,
        );

        var bodyJSON = json.decode(res.body);

        var _videoPlayUrl;
        var _audioPlayUrl;
        List<String> _videoImageUrl = [];

        List streamList = bodyJSON["streamingData"]["formats"] as List;
        for (var i = 0; i < streamList.length; i++) {
          var element = streamList[i];
          if (element["audioChannels"] == 1 && _audioPlayUrl == null) {
            _audioPlayUrl = element["url"];
          } else if (element["audioChannels"] == 2 && _videoPlayUrl == null) {
            _videoPlayUrl = element["url"];
          }
        }

        var _videoId = bodyJSON["videoDetails"]["videoId"];
        var _time = bodyJSON["videoDetails"]["lengthSeconds"];
        var _videoName = bodyJSON["videoDetails"]["title"];

        List _videoImageList =
            bodyJSON["videoDetails"]["thumbnail"]["thumbnails"] as List;
        for (var i = 0; i < _videoImageList.length; i++) {
          var _e = _videoImageList[i]["url"];
          _videoImageUrl.add(_e.toString());
        }

        _videoImageUrl.add("https://i.ytimg.com/vi/$_videoId/mq1.jpg");

        try {
          _time = int.parse(_time);
        } catch (e) {}

        var model = VideoModel(
          id: _videoId,
          image: _videoImageUrl,
          name: _videoName,
          playUrl: _videoPlayUrl,
          time: _time,
          audioUrl: _audioPlayUrl,
        );

        return model;
      } catch (e) {
        debugPrint("Api -> videoOynat ERROR 22222 (catch 2) : $e");
        return null;
      }
    }
  }

  Future<String?> getDownloadUrl({
    required String videoId,
    required bool isVideo,
    required VideoKalite videoKalite,
  }) async {
    try {
      Uri url = Uri.https(
        "youtubei.googleapis.com",
        "/youtubei/v1/player",
        {"key": "AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w"},
      );

      Map<String, dynamic> mapp = {
        "context": {
          "client": {
            "hl": "en-GB",
            "clientName": "ANDROID",
            "gl": "US",
            "clientVersion": "16.29.38"
          },
          "user": {"lockedSafetyMode": false}
        },
        "videoId": videoId,
      };

      Map<String, String> head = {
        "accept-encoding": "gzip",
        "accept-language": "en-GB, en;q=0.9",
        "connection": "Keep-Alive",
        "content-length": "155",
        "content-type": "application/json",
        "user-agent": "youtubei.googleapis.com",
        "sdsfd":
            "com.google.android.youtube/16.29.38Linux; U; Android 11; US) gzip",
        "x-goog-api-format-version": "2",
      };

      String body = json.encode(mapp);

      var res = await http.post(
        url,
        body: body,
        headers: head,
      );

      var bodyJSON = json.decode(res.body);

      String? _audioPlayUrl;
      List<String> videoKaliteListesi =
          []; // listenin 0.elemanının kalitesi düşük oluyor. index arttıkça kalite artar.

      String? downloadUrl;

      List streamList = bodyJSON["streamingData"]["formats"] as List;
      for (var i = 0; i < streamList.length; i++) {
        var element = streamList[i];
        if (element["audioChannels"] == 1 && _audioPlayUrl == null) {
          _audioPlayUrl = element["url"];
        } else if (element["audioChannels"] == 2) {
          videoKaliteListesi.add(element["url"]);
        }
      }

      if (isVideo) {
        switch (videoKalite) {
          case VideoKalite.yuksek:
            downloadUrl = videoKaliteListesi.last;
            break;
          case VideoKalite.orta:
            int kkIn = (videoKaliteListesi.length / 2).toInt();
            if (kkIn + 2 == videoKaliteListesi.length) {
              downloadUrl = videoKaliteListesi[1];
            } else {
              downloadUrl = videoKaliteListesi.last;
            }
            break;
          case VideoKalite.dusuk:
            downloadUrl = videoKaliteListesi.first;
            break;
        }
        return downloadUrl;
      } else {
        return _audioPlayUrl;
      }
    } catch (ee) {
      try {
        debugPrint("Api -> getDownloadUrl ERROR (catch) : $ee");
        Uri url = Uri.https(
          "youtubei.googleapis.com",
          "/youtubei/v1/player",
          {"key": "AIzaSyA8eiZmM1FaDVjRy-df2KTyQ_vz_yYM39w"},
        );

        Map<String, dynamic> mapp = {
          "context": {
            "client": {
              "hl": "en-GB",
              "clientName": "ANDROID",
              "gl": "US",
              "clientVersion": "16.29.38"
            },
            "user": {"lockedSafetyMode": false}
          },
          "videoId": videoId,
        };

        Map<String, String> head = {
          "accept-encoding": "gzip",
          "accept-language": "en-GB, en;q=0.9",
          "connection": "Keep-Alive",
          "content-length": "155",
          "content-type": "application/json",
          "user-agent": "youtubei.googleapis.com",
          "sdsfd":
              "com.google.android.youtube/16.29.38Linux; U; Android 11; US) gzip",
          "x-goog-api-format-version": "2",
        };

        String body = json.encode(mapp);

        var res = await http.post(
          url,
          body: body,
          headers: head,
        );

        var bodyJSON = json.decode(res.body);

        String? _audioPlayUrl;
        List<String> videoKaliteListesi =
            []; // listenin 0.elemanının kalitesi düşük oluyor. index arttıkça kalite artar.

        String? downloadUrl;

        List streamList = bodyJSON["streamingData"]["formats"] as List;
        for (var i = 0; i < streamList.length; i++) {
          var element = streamList[i];
          //  print(element);
          //  print("*-*-*-*-*-");
          if (element["audioChannels"] == 1 && _audioPlayUrl == null) {
            _audioPlayUrl = element["url"];
          } else if (element["audioChannels"] == 2) {
            videoKaliteListesi.add(element["url"]);
          }
        }

        if (isVideo) {
          switch (videoKalite) {
            case VideoKalite.yuksek:
              downloadUrl = videoKaliteListesi.last;
              break;
            case VideoKalite.orta:
              int kkIn = (videoKaliteListesi.length / 2).toInt();
              if (kkIn + 2 == videoKaliteListesi.length) {
                downloadUrl = videoKaliteListesi[1];
              } else {
                downloadUrl = videoKaliteListesi.last;
              }
              break;
            case VideoKalite.dusuk:
              downloadUrl = videoKaliteListesi.first;
              break;
          }
          return downloadUrl;
        } else {
          return _audioPlayUrl;
        }
      } catch (e) {
        debugPrint("Api -> getDownloadUrl ERROR 2222 (catch 222) : $e");
        return null;
      }
    }
  }

  Future<List<SearchVideoModel>> aramaYap({required String text}) async {
    try {
      String uu =
          "https://www.youtube.com/youtubei/v1/search?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8";

      Uri url = Uri.https(
        "youtube.com",
        "/youtubei/v1/search",
        {"key": "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8"},
      );

      Map<String, dynamic> mapp = {
        "query": text,
        "context": {
          "client": {
            "hl": "en-GB",
            "gl": "US",
            "clientName": "WEB",
            "clientVersion": "2.20210728.00.00"
          },
          "user": {"lockedSafetyMode": false}
        }
      };

      Map<String, String> head = {
        "user-agent":
            "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0",
        "accept-encoding": "gzip",
        "accept-language": "en-GB, en;q=0.9",
        "connection": "Keep-Alive",
        "content-type": "application/json",
        "host": "www.youtube.com",
        "origin": "https://www.youtube.com",
        "referer": "https://www.youtube.com",
        "x-youtube-client-name": "1",
        "x-youtube-client-version": "2.20210728.00.00",
      };

      String body = json.encode(mapp);

      var res = await http.post(
        url,
        body: body,
        headers: head,
      );

      var bodyJSON = json.decode(res.body);
      List<SearchVideoModel> videoModelList = [];

      List aramadanGelenListe = bodyJSON["contents"]
                  ["twoColumnSearchResultsRenderer"]["primaryContents"]
              ["sectionListRenderer"]["contents"][0]["itemSectionRenderer"]
          ["contents"];

      String? dahaFazlaGetirToken = bodyJSON["contents"]
                  ["twoColumnSearchResultsRenderer"]["primaryContents"]
              ["sectionListRenderer"]["contents"][1]["continuationItemRenderer"]
          ["continuationEndpoint"]["continuationCommand"]["token"];

      for (var i = 0; i < aramadanGelenListe.length; i++) {
        List<String> _videoImageUrl = [];

        try {
          if (aramadanGelenListe[i]["videoRenderer"] != null) {
            var yeniMapData = aramadanGelenListe[i]["videoRenderer"];

            var _videoId = yeniMapData["videoId"];
            var _videoName = yeniMapData["title"]["runs"][0]["text"];
            var _videoImageUrlList =
                yeniMapData["thumbnail"]["thumbnails"] as List;

            for (var i = 0; i < _videoImageUrlList.length; i++) {
              var _element = _videoImageUrlList[i]["url"];
              _videoImageUrl.add(_element);
            }

            _videoImageUrl.add("https://i.ytimg.com/vi/$_videoId/mq1.jpg");

            int _time = 0;
            var _timeString = yeniMapData["lengthText"]["simpleText"];

            if (_timeString != null) {
              int saat = 0;
              int dakika = 0;
              int saniye = 0;
              List<String> lis = _timeString.split(":");
              if (lis.length == 3) {
                saat = int.parse(lis[0]);
                dakika = int.parse(lis[1]);
                saniye = int.parse(lis[2]);
              } else if (lis.length == 2) {
                dakika = int.parse(lis[0]);
                saniye = int.parse(lis[1]);
              } else if (lis.length == 1) {
                saniye = int.parse(lis[0]);
              }
              _time = (saat * 60 * 60) + (dakika * 60) + saniye;
            }

            var _model = SearchVideoModel(
              id: _videoId,
              image: _videoImageUrl,
              name: _videoName,
              getMoreVideoToken: dahaFazlaGetirToken,
              time: _time,
            );
            videoModelList.add(_model);
          }
        } catch (e) {}
      }

      return videoModelList;
    } catch (e) {
      debugPrint("Api -> aramaYap ERROR (catch) : $e");
      return [];
    }
  }

  Future<dynamic> dahaFazlaAramaYap({required String getMoreToken}) async {
    try {
      String uu =
          "https://www.youtube.com/youtubei/v1/search?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8";

      Uri url = Uri.https(
        "youtube.com",
        "/youtubei/v1/search",
        {"key": "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8"},
      );

      Map<String, dynamic> mapp = {
        "context": {
          "client": {
            "hl": "en-GB",
            "gl": "US",
            "clientName": "WEB",
            "clientVersion": "2.20210728.00.00"
          },
          "user": {"lockedSafetyMode": false}
        },
        //! buradaki 'continuation'
        //! ilk aramanın parametresi olarak geliyor.
        "continuation": getMoreToken,
      };

      Map<String, String> head = {
        "user-agent":
            "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0",
        "accept-encoding": "gzip",
        "accept-language": "en-GB, en;q=0.9",
        "connection": "Keep-Alive",
        "content-type": "application/json",
        "host": "www.youtube.com",
        "origin": "https://www.youtube.com",
        "referer": "https://www.youtube.com",
        "x-youtube-client-name": "1",
        "x-youtube-client-version": "2.20210728.00.00",
      };

      String body = json.encode(mapp);

      var res = await http.post(
        url,
        body: body,
        headers: head,
      );

      debugPrint(res.statusCode.toString());
      debugPrint(res.body);
    } catch (e) {
      debugPrint("Api -> dahaFazlaAramaYap ERROR (catch) : $e");
    }
  }

  Future<List<SearchVideoModel>> getPlayList(String playListId) async {
    try {
      Uri url = Uri.https(
        "youtube.com",
        "/youtubei/v1/browse",
        {"key": "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8"},
      );

      Map<String, dynamic> mapp = {
        "browseId": "VL$playListId",
        "context": {
          "client": {
            "hl": "en-GB",
            "gl": "US",
            "clientName": "WEB",
            "clientVersion": "2.20210728.00.00"
          },
          "user": {"lockedSafetyMode": false}
        },
        "params": "wgYCCAA%3D"
      };

      Map<String, String> head = {
        "user-agent":
            "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0",
        "alt-svc":
            'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"',
        "cache-control": "private",
        "server": "scaffolding on HTTPServer2",
        "date": "Fri, 18 Mar 2022 20:13:47 GMT",
        "transfer-encoding": "chunked",
        "vary": "Origin, X-Origin, Referer",
        "accept-encoding": "gzip",
        "accept-language": "en-GB, en;q=0.9",
        "connection": "Keep-Alive",
        "content-type": "application/json",
        "host": "www.youtube.com",
        "origin": "https://www.youtube.com",
        "referer": "https://www.youtube.com",
        "x-youtube-client-name": "1",
        "x-youtube-client-version": "2.20210728.00.00",
      };

      String body = json.encode(mapp);

      var res = await http.post(
        url,
        body: body,
        headers: head,
      );

      var bodyJSON = json.decode(res.body);
      List<SearchVideoModel> videoModelList = [];

      var aramadanGelenListe =
          bodyJSON["contents"]["twoColumnBrowseResultsRenderer"]["tabs"][0]
                      ["tabRenderer"]["content"]["sectionListRenderer"]
                  ["contents"][0]["itemSectionRenderer"]["contents"][0]
              ["playlistVideoListRenderer"]["contents"];

      for (var i = 0; i < aramadanGelenListe.length; i++) {
        try {
          if (aramadanGelenListe[i]["playlistVideoRenderer"] != null) {
            List<String> _videoImageUrl = [];
            var yeniMapData = aramadanGelenListe[i]["playlistVideoRenderer"];
            var _videoId = yeniMapData["videoId"];
            var _videoName = yeniMapData["title"]["runs"][0]["text"];
            List _videoImageUrlList =
                yeniMapData["thumbnail"]["thumbnails"] as List;
            String? _vTime = yeniMapData["lengthText"]["simpleText"];
            int _time = 0;

            for (var i = 0; i < _videoImageUrlList.length; i++) {
              var _e = _videoImageUrlList[i]["url"];
              _videoImageUrl.add(_e);
            }

            _videoImageUrl.add("https://i.ytimg.com/vi/$_videoId/mq1.jpg");

            if (_vTime != null) {
              int saat = 0;
              int dakika = 0;
              int saniye = 0;
              List<String> lis = _vTime.split(":");
              if (lis.length == 3) {
                saat = int.parse(lis[0]);
                dakika = int.parse(lis[1]);
                saniye = int.parse(lis[2]);
              } else if (lis.length == 2) {
                dakika = int.parse(lis[0]);
                saniye = int.parse(lis[1]);
              } else if (lis.length == 1) {
                saniye = int.parse(lis[0]);
              }
              _time = (saat * 60 * 60) + (dakika * 60) + saniye;
            }

            var _model = SearchVideoModel(
              id: _videoId,
              image: _videoImageUrl,
              name: _videoName,
              getMoreVideoToken: null,
              time: _time,
            );
            videoModelList.add(_model);
          }
        } catch (e) {}
      }

      return videoModelList;
    } catch (e) {
      debugPrint("Api -> getPlayList ERROR (catch) : $e");
      return [];
    }
  }

  Future<List<SearchVideoModel>> ilkAcilisGelen() async {
    try {
      String contry = await ulkeMuzik.getCountry();
      String playListId = ulkeMuzik.gelUlkePlayListId(ulke: contry);

      Uri url = Uri.https(
        "youtube.com",
        "/youtubei/v1/browse",
        {"key": "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8"},
      );

      Map<String, dynamic> mapp = {
        "browseId": "VL$playListId",
        "context": {
          "client": {
            "hl": "en-GB",
            "gl": "US",
            "clientName": "WEB",
            "clientVersion": "2.20210728.00.00"
          },
          "user": {"lockedSafetyMode": false}
        },
        "params": "wgYCCAA%3D"
      };

      Map<String, String> head = {
        "user-agent":
            "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0",
        "alt-svc":
            'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"',
        "cache-control": "private",
        "server": "scaffolding on HTTPServer2",
        "date": "Fri, 18 Mar 2022 20:13:47 GMT",
        "transfer-encoding": "chunked",
        "vary": "Origin, X-Origin, Referer",
        "accept-encoding": "gzip",
        "accept-language": "en-GB, en;q=0.9",
        "connection": "Keep-Alive",
        "content-type": "application/json",
        "host": "www.youtube.com",
        "origin": "https://www.youtube.com",
        "referer": "https://www.youtube.com",
        "x-youtube-client-name": "1",
        "x-youtube-client-version": "2.20210728.00.00",
      };

      String body = json.encode(mapp);

      var res = await http.post(
        url,
        body: body,
        headers: head,
      );

      var bodyJSON = json.decode(res.body);
      List<SearchVideoModel> videoModelList = [];

      var aramadanGelenListe =
          bodyJSON["contents"]["twoColumnBrowseResultsRenderer"]["tabs"][0]
                      ["tabRenderer"]["content"]["sectionListRenderer"]
                  ["contents"][0]["itemSectionRenderer"]["contents"][0]
              ["playlistVideoListRenderer"]["contents"];

      for (var i = 0; i < aramadanGelenListe.length; i++) {
        try {
          if (aramadanGelenListe[i]["playlistVideoRenderer"] != null) {
            List<String> _videoImageUrl = [];
            var yeniMapData = aramadanGelenListe[i]["playlistVideoRenderer"];
            var _videoId = yeniMapData["videoId"];
            var _videoName = yeniMapData["title"]["runs"][0]["text"];
            List _videoImageUrlList =
                yeniMapData["thumbnail"]["thumbnails"] as List;
            String? _vTime = yeniMapData["lengthText"]["simpleText"];
            int _time = 0;

            for (var i = 0; i < _videoImageUrlList.length; i++) {
              var _e = _videoImageUrlList[i]["url"];
              _videoImageUrl.add(_e);
            }

            _videoImageUrl.add("https://i.ytimg.com/vi/$_videoId/mq1.jpg");

            if (_vTime != null) {
              int saat = 0;
              int dakika = 0;
              int saniye = 0;
              List<String> lis = _vTime.split(":");
              if (lis.length == 3) {
                saat = int.parse(lis[0]);
                dakika = int.parse(lis[1]);
                saniye = int.parse(lis[2]);
              } else if (lis.length == 2) {
                dakika = int.parse(lis[0]);
                saniye = int.parse(lis[1]);
              } else if (lis.length == 1) {
                saniye = int.parse(lis[0]);
              }
              _time = (saat * 60 * 60) + (dakika * 60) + saniye;
            }

            var _model = SearchVideoModel(
              id: _videoId,
              image: _videoImageUrl,
              name: _videoName,
              getMoreVideoToken: null,
              time: _time,
            );
            videoModelList.add(_model);
          }
        } catch (e) {}
      }

      return videoModelList;
    } catch (e) {
      debugPrint("Api -> ilkAcilisGelen ERROR (catch) : $e");
      return [];
    }
  }

  Future<List<SearchVideoModel>> sonrakiVideolariGetir({
    required String suAndakiVideoId,
  }) async {
    try {
      String uu =
          "https://www.youtube.com/youtubei/v1/next?key=AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8";

      Uri url = Uri.https(
        "youtube.com",
        "/youtubei/v1/next",
        {"key": "AIzaSyAO_FJ2SlqU8Q4STEHLGCilw_Y9_11qcW8"},
      );

      Map<String, dynamic> mapp = {
        "context": {
          "client": {
            "hl": "en-GB",
            "gl": "US",
            "clientName": "WEB",
            "clientVersion": "2.20210728.00.00"
          },
          "user": {"lockedSafetyMode": false}
        },
        "videoId": suAndakiVideoId
      };

      Map<String, String> head = {
        "user-agent":
            "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Firefox/68.0",
        "accept-encoding": "gzip",
        "accept-language": "en-GB, en;q=0.9",
        "connection": "Keep-Alive",
        "content-length": "159",
        "content-type": "application/json",
        "host": "www.youtube.com",
        "origin": "https://www.youtube.com",
        "referer": "https://www.youtube.com",
        "x-youtube-client-name": "1",
        "x-youtube-client-version": "2.20210728.00.00",
      };

      String body = json.encode(mapp);

      var res = await http.post(
        url,
        body: body,
        headers: head,
      );

      var bodyJSON = json.decode(res.body);
      List<SearchVideoModel> videoModelList = [];

      var gelenListe = bodyJSON["playerOverlays"]["playerOverlayRenderer"]
          ["endScreen"]["watchNextEndScreenRenderer"]["results"];

      for (var i = 0; i < gelenListe.length; i++) {
        try {
          if (gelenListe[i]["endScreenVideoRenderer"] != null) {
            List<String> _videoImageUrl = [];
            var yeniMapData = gelenListe[i]["endScreenVideoRenderer"];
            var _videoId = yeniMapData["videoId"];
            var _videoName = yeniMapData["title"]["simpleText"];
            List _videoImageUrlList =
                yeniMapData["thumbnail"]["thumbnails"] as List;
            String? _vTime = yeniMapData["lengthText"]["simpleText"];
            int _time = 0;

            for (var i = 0; i < _videoImageUrlList.length; i++) {
              var _e = _videoImageUrlList[i]["url"];
              _videoImageUrl.add(_e);
            }

            _videoImageUrl.add("https://i.ytimg.com/vi/$_videoId/mq1.jpg");

            if (_vTime != null) {
              int saat = 0;
              int dakika = 0;
              int saniye = 0;
              List<String> lis = _vTime.split(":");
              if (lis.length == 3) {
                saat = int.parse(lis[0]);
                dakika = int.parse(lis[1]);
                saniye = int.parse(lis[2]);
              } else if (lis.length == 2) {
                dakika = int.parse(lis[0]);
                saniye = int.parse(lis[1]);
              } else if (lis.length == 1) {
                saniye = int.parse(lis[0]);
              }
              _time = (saat * 60 * 60) + (dakika * 60) + saniye;
            }

            var _model = SearchVideoModel(
              id: _videoId,
              image: _videoImageUrl,
              name: _videoName,
              getMoreVideoToken: null,
              time: _time,
            );
            videoModelList.add(_model);
          }
        } catch (e) {}
      }

      return videoModelList;
    } catch (e) {
      debugPrint("Api -> sonrakiVideolariGetir ERROR (catch) : $e");
      return [];
    }
  }

  Future<List<dynamic>> kelimeTahmini({required String kelime}) async {
    try {
      String uu =
          "http://suggestqueries.google.com/complete/search?oderby=viewCount&time=all_time&max-results=10&hl=en&ds=yt&client=firefox&hjon=t&cp=1&q=hadi";

      Uri url = Uri.https(
        "suggestqueries.google.com",
        "/complete/search",
        {
          "oderby": "viewCount",
          "time": "all_time",
          "max-results": "10",
          "hl": "en",
          "ds": "yt",
          "client": "firefox",
          "hjon": "t",
          "cp": "1",
          "q": kelime
        },
      );

      Map<String, String> head = {
        "accept": "*/*",
        "accept-encoding": "gzip",
        "connection": "Keep-Alive",
        "host": "suggestqueries.google.com",
        "user-agent": "Mozilla/5.0 ( compatible )"
      };

      var res = await http.get(
        url,
        headers: head,
      );

      var bodyJSON = json.decode(res.body);

      List<dynamic> kelimelerListe = [];

      try {
        var vv = bodyJSON as List;
        var kelimm = vv[1] as List;

        kelimelerListe = kelimm;
      } catch (e) {}

      return kelimelerListe;
    } catch (e) {
      debugPrint("Api -> kelimeTahmini ERROR (catch) : $e");
      return [];
    }
  }
}
Editor is loading...
Leave a Comment