Untitled
unknown
plain_text
2 years ago
34 kB
21
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