How to Create YouTube clone Using React Js?

Savindu Pasintha
12 min readMay 31, 2021

Create Rect Js Project First

Download Project

1-npx create-react-app youtube
2-cd my-app
3-npm start
RUN THAT COMMANDS IN YOU TERMINAL.

Now you can go to GOOGLE COLSOLE AND ENABLE YOUTUBE API V and Create Credentials. After get you API Key

Most use full YouTube ATI data Access Links.

All videos list

https://www.googleapis.com/youtube/v3/videos?maxResults=1000&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=snippet,contentDetails,statistics&chart=mostPopularhttps://www.googleapis.com/youtube/v3/videos?maxResults=1000&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=snippet,contentDetails,statistics&chart=chartUnspecifiedhttps://www.googleapis.com/youtube/v3/videos?maxResults=100&regionCode=AE&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=snippet,contentDetails,statistics&chart=mostPopular

Search Query details Channels to get the "uploads" Id = "chanel" id.

https://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetailshttps://www.googleapis.com/youtube/v3/channels?id=UCN71zDAn2H-re6v5A7Joy8g&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=contentDetailshttps://www.googleapis.com/youtube/v3/search?maxResults=100&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=snippet&q=tarvel%20sinhala

Get playlist in videos

https://www.googleapis.com/youtube/v3/playlistItems?playlistId={"uploads" Id}&key={API key}&part=snippet&maxResults=50https://www.googleapis.com/youtube/v3/playlistItems?playlistId=UUN71zDAn2H-re6v5A7Joy8g&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=snippet&maxResults=50

Get video data likes comments counts

https://www.googleapis.com/youtube/v3/videos?part=statistics&id={vidio id}={YOUR_API_KEY}https://www.googleapis.com/youtube/v3/videos?part=statistics&id=sTPtBvcYkO8&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8

Get channel data all all counts views subscriptions

https://www.googleapis.com/youtube/v3/channels?part=statistics&id='.$chann_id.'&key='.$api_keyhttps://www.googleapis.com/youtube/v3/channels?part=statistics&id=UCU_ZZ53ss0u9HvKF1jOsUjQ&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8

4- install wanted npm packages

npm install @material-ui/core @material-ui/icons jquery propper.js react-router-dom react-router bootstrap http-proxy-middleware react-bootstrap -reactjs-media axios --save

5 — Folder Structure create this all folders and files in your project.

Project folder
Project structue
component folder files
This all the js file you should create inside the Page folder
Only you want jk.js other files unwanted.

Component Folder

VideoCard.js

import React, { useState, useEffect } from “react”;

import { makeStyles } from “@material-ui/core/styles”;

import Card from “@material-ui/core/Card”;

import CardActionArea from “@material-ui/core/CardActionArea”;

import CardActions from “@material-ui/core/CardActions”;

import CardContent from “@material-ui/core/CardContent”;

import CardMedia from “@material-ui/core/CardMedia”;

import Button from “@material-ui/core/Button”;

import Typography from “@material-ui/core/Typography”;

import MoreVertIcon from “@material-ui/icons/MoreVert”;

import Grid from “@material-ui/core/Grid”;

import Avatar from “./ImageAvatars”;

import { YoutubePlayer } from “reactjs-media”;

import VidioDiscription from “./VidioDiscription”;

import ThumbUpAltIcon from “@material-ui/icons/ThumbUpAlt”;

import ThumbDownAltIcon from “@material-ui/icons/ThumbDownAlt”;

import FavoriteIcon from “@material-ui/icons/Favorite”;

import ChatRoundedIcon from “@material-ui/icons/ChatRounded”;

import VisibilitySharpIcon from “@material-ui/icons/VisibilitySharp”;

import TemporaryDrawer from “./TemporaryDrawer”;

import { BrowserRouter, Route, Switch, Link } from ‘react-router-dom’;

import $ from “jquery”;

const useStyles = makeStyles({

root: {

maxWidth: “300”,

height: “auto”,

},

});

export default function VisdeoCard(props) {

const classes = useStyles();

const [size, setSize] = useState({ width: “200px”, height: “200px” });

const [url, setUrl] = useState(“”);

const sizeChange = () => {

setSize({ …size, width: “100%”, height: “100%” });

};

const removeImage = (id) => {

var tagId = “#” + id;

$(tagId).hide();

setUrl(id); //this is a url

sizeChange();

// var myobj = document.getElementById(“imageTag”);

};

const addImage = (id) => {

var tagId = “#” + id;

$(tagId).show();

//var myobjp = document.getElementById(“imageTag”);

// myobjp.add();

};

const gotoVideo = ()=>{

}

/*

useEffect(() => {

//remove the vidios when page loading

// $(“#vidioTagId”).hide();

}, []);

*/

return (

<div

style={{

width: “100%”,

height: “auto”,

position: “relative”,

textAlign: “left”,

}}

>

<Card className={classes.root}>

<CardActionArea

onClick={sizeChange}

style={{ width: “100%” }}

onMouseLeave={() => {

/* addImage(props.id);*/

}}

>

<div

onMouseEnter={() => {

/* removeImage(props.id);*/

}}

id=”new”

>

<Link to={“/vidio?vId=”+props.id}></Link>

<a href={“/vidio?vId=” + props.id} >

<img

width=”100%”

height=”100%”

src={props.chanelimage}

alt={props.vidio}

id={props.id}

onClick={gotoVideo}

/>

</a>

</div>

<CardContent>

<Avatar image={props.chanelimage} />

<p>{props.chanelname}</p>

<Typography gutterBottom component=”p”>

<ThumbUpAltIcon /> {props.like}

</Typography>

<Typography gutterBottom component=”p”>

<ThumbDownAltIcon /> {props.dislike}

</Typography>

<Typography gutterBottom component=”p”>

<VisibilitySharpIcon /> {props.view}

</Typography>

{/* <Typography gutterBottom component=”p”>

<FavoriteIcon /> {props.favoriteCount}

</Typography>*/}

<Typography gutterBottom component=”p”>

<ChatRoundedIcon /> {props.commentCount}

</Typography>

<div

style={{

width: “100%”,

height: “ 00px”,

overflow: “scroll”,

}}

>

<VidioDiscription discriptiondata={props.discription} />

</div>

{/* <MoreVertIcon /> */}

</CardContent>

</CardActionArea>

</Card>

</div>

);

}

search.js

import React, { useState, useEffect } from “react”;

import { makeStyles } from “@material-ui/core/styles”;

import axios from “axios”;

import VideoCard from “./VidioCard”;

import JK from “../YoutubeApi/jk”;

const useStyles = makeStyles((theme) => ({

root: {

“& > *”: {

margin: theme.spacing(1),

width: “auto”,

},

},

}));

const text = { width: “auto” };

const searchsty = { width: “30px”, height: “30px” };

export default function Search() {

const [search, setSearch] = useState(“”);

const [searchData, setSearchData] = useState([]);

const [searchDataKey, setSearchDataKey] = useState([]);

const classes = useStyles();

const getValue = async (e) => {

setSearch(e.target.value);

//console.log(search);

newdata();

};

const onsubmitpreventrefresh = (e) => {

e.preventDefault();

};

const keyboardkey = async (event) => {

if (event.key === “Enter”) {

/* https://youtube.googleapis.com/

youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics&chart=chartUnspecified&hl=hai&id=10&locale=hhh&maxHeight=78&maxResults=78&maxWidth=7&myRating=none&onBehalfOfContentOwner=jjj&pageToken=jj&regionCode=US&videoCategoryId=jj&key=[YOUR_API_KEY] HTTP/1.1

*/

try {

var url =

“https://www.googleapis.com/youtube/v3/search?part=snippet,contentDetails,statistics&order=date&maxResults=100&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&q=" +

search;

url =

“https://www.googleapis.com/youtube/v3/search?part=snippet&regionCode=LK&type=video&videoType=any&order=date&maxResults=48&key=AIzaSyDQSURwrKUwOPdaHm0frk9o-mNlqqgKzFA&q=" +

+search;

url=

“https://www.googleapis.com/youtube/v3/search?maxResults=100&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=snippet&q="+search;

await axios

.get(url)

.then((response) => {

//console.log(search);

if (response.data.length == 0) {

var o = new JK();

var index = Math.round(Math.random() * 10);

var p = o.dataSet[index].items; //variable

setSearchData(p);

console.log(“no data”);

} else {

var pp = response.data.items; //variable

setSearchDataKey(pp);

// console.log(response.data.items);

console.log(“responce data data”);

}

})

.catch((error) => {

throw error;

});

} catch (e) {

console.log(e);

}

}else{

var o = new JK();

var index = Math.round(Math.random() * 10);

var p = o.dataSet[index].items; //variable

setSearchData(p);

}

// console.log(“13”);

};

const newdata = () =>{

var o = new JK();

var index = Math.round(Math.random() * 10);

var p = o.dataSet[index].items; //variable

setSearchData(p);

}

useEffect(() => {

//call

// keyboardkey();

}, [search]);

const searchList = searchData.map((s) => {

// console.log(“sid”,s.id);

var x = s.id ;

return (

<div

className=”col-sm-12 col-md-3 col-lg-3"

style={{ width: “100%”, position: “relative”, padding: “10px” }}

>

<VideoCard

id={x}

vidio={“https://www.youtube.com/watch?v=" + s.id}

chanelname={s.snippet.title}

discription={s.snippet.description}

chanelimage={s.snippet.thumbnails.high.url}

like={s.statistics.likeCount}

view={s.statistics.viewCount}

dislike={s.statistics.dislikeCount}

commentCount={s.statistics.commentCount}

favoriteCount={s.statistics.favoriteCount}

/>

</div>

);

});

const searchListAfetrEnter = searchDataKey.map((s) => {

// console.log(“sid”,s.id.videoId);

var a = Math.round(Math.random() * 1000);

var b = Math.round(Math.random() * 1000);

var c = Math.round(Math.random() * 1000);

var d = Math.round(Math.random() * 1000);

var e = Math.round(Math.random() * 1000);

return (

<div

className=”col-sm-12 col-md-3 col-lg-3"

style={{ width: “100%”, position: “relative”, padding: “10px” }}

>

<VideoCard

id={s.id.videoId}

vidio={“https://www.youtube.com/watch?v=" + s.id}

chanelname={s.snippet.title}

discription={s.snippet.description}

chanelimage={s.snippet.thumbnails.high.url}

like={a}

view={b}

dislike={c}

commentCount={d}

favoriteCount={e}

/>

</div>

);

});

return (

<div>

<form

className={classes.root}

noValidate

autoComplete=”off”

onSubmit={onsubmitpreventrefresh}

>

<div style={{ display: “inline-flex”, width: “100%” }}>

<div

style={{

width: “100%”,

height: “auto”,

padding: “15px”,

}}

>

<input

type=”text”

onChange={getValue}

id=”outlined-basic”

placeholder=”search”

style={{

width: “75%”,

height: “55px”,

color: “black”,

fontSize: “24px”,

fontWeight: “600”,

borderRadius: “0px”,

style: “none”,

}}

onKeyUp={keyboardkey}

/>

</div>

</div>

</form>

<div className=”row” style={{ width: “100%”, textAlign: “center” }}>

{searchListAfetrEnter}

</div>

<div className=”row” style={{ width: “100%”, textAlign: “center” }}>

{searchList}

</div>

</div>

);

}

DrawerTopIcon.js

import React from “react”;

import clsx from “clsx”;

import { makeStyles } from “@material-ui/core/styles”;

import Drawer from “@material-ui/core/Drawer”;

import Button from “@material-ui/core/Button”;

import { YoutubePlayer } from “reactjs-media”;

import MenuIcon from “@material-ui/icons/Menu”;

import List from “@material-ui/core/List”;

import Divider from “@material-ui/core/Divider”;

import ListItem from “@material-ui/core/ListItem”;

import ListItemIcon from “@material-ui/core/ListItemIcon”;

import ListItemText from “@material-ui/core/ListItemText”;

import InboxIcon from “@material-ui/icons/MoveToInbox”;

import MailIcon from “@material-ui/icons/Mail”;

import GitHubIcon from “@material-ui/icons/GitHub”;

import LinkedInIcon from “@material-ui/icons/LinkedIn”;

import CallIcon from “@material-ui/icons/Call”;

import WhatsAppIcon from “@material-ui/icons/WhatsApp”;

import HomeIcon from “@material-ui/icons/Home”;

import IMG from “./img.jpg”;

const useStyles = makeStyles({

list: {

width: 350,

},

fullList: {

width: “auto”,

},

});

export default function DrawerTopIcon(props) {

const classes = useStyles();

const [state, setState] = React.useState({

top: false,

left: false,

bottom: false,

right: false,

});

const toggleDrawer = (anchor, open) => (event) => {

if (

event.type === “keydown” &&

(event.key === “Tab” || event.key === “Shift”)

) {

return;

}

setState({ …state, [anchor]: open });

};

const list = (anchor) => (

<div

className={clsx(classes.list, {

[classes.fullList]: anchor === “top” || anchor === “bottom”,

})}

role=”presentation”

onClick={toggleDrawer(anchor, false)}

onKeyDown={toggleDrawer(anchor, false)}

>

<List>

<div

style={{

width: “100%”,

height: “auto”,

}}

>

<img

alt=”img”

src={

IMG ||

“https://media-exp1.licdn.com/dms/image/D4D35AQE-r6LXrTEHLQ/profile-framedphoto-shrink_400_400/0/1621220604162?e=1622124000&v=beta&t=IhB2QeexmAo0RzeIDZ95HQCrdEx5xA1ambV5QIAtAqc"

}

width=”100%”

height=”300px”

/>

</div>

<h1

className=”text-center p-2"

style={{

color: “red”,

fontWeight: “900”,

}}

>

<span

style={{

color: “blue”,

fontWeight: “900”,

}}

>

vTube

</span>

</h1>

<h4

className=”text-center p-1"

style={{

color: “black”,

fontWeight: “900”,

fontStyle: “italic”,

}}

>

vTube will be a Futuer Latest video Streaming platform.

</h4>

<h5

className=”text-left p-1"

style={{

color: “black”,

fontWeight: “900”,

}}

>

Any one can search videos and enjoy with your family..

</h5>

<a

className=”text-center text-dark”

href=”https://www.linkedin.com/in/savindu-pasintha-6287a31a4/"

>

<LinkedInIcon

style={{

color: “blue”,

fontWeight: “900”,

}}

/>{“ “}

<span> </span>

<span

style={{

color: “black”,

fontWeight: “900”,

}}

>

{“ “}

LinkedIn

</span>

</a>

<br />

<a

className=”text-center text-dark”

href=”https://github.com/savindu-pasintha"

>

<GitHubIcon /> <span> </span>{“ “}

<span

style={{

color: “dark”,

fontWeight: “900”,

}}

>

{“ “}

gitHub{“ “}

</span>

</a>

<br />

<a className=”text-center text-dark” href=”call/wahtsapp”>

{“ “}

<WhatsAppIcon

style={{

color: “blue”,

fontWeight: “900”,

}}

/>{“ “}

<span> </span>{“ “}

<span

style={{

color: “dark”,

fontWeight: “900”,

}}

>

{“ “}

+ 94 76 875 57 87

</span>

</a>

<br />

<a className=”text-center text-dark” href=”Address”>

{“ “}

<HomeIcon /> <span> </span>

<span

style={{

color: “black”,

fontWeight: “900”,

}}

>

{“ “}

Kaluthara, Western Province, Sri Lanka.{“ “}

</span>

</a>

<br />

<a className=”text-center text-dark” href=”email”>

<MailIcon

style={{

color: “blue”,

fontWeight: “900”,

}}

/>

<span> </span>

<span

style={{

color: “black”,

fontWeight: “900”,

}}

>

{“ “}

savindupasingtha@gmail.com{“ “}

</span>

</a>

<h6

className=”text-center p-1"

style={{

color: “black”,

fontWeight: “900”,

}}

>

This platform Build By “Savindu pasingtha”

</h6>

</List>

</div>

);

return (

<div>

{[“right”].map((anchor) => (

<React.Fragment key={anchor}>

<Button onClick={toggleDrawer(anchor, true)}>

<MenuIcon

style={{

color: “black”,

fontSize: “35px”,

fontWeight: “900”,

fontStyle: “italic”,

}}

/>

</Button>

<Drawer

anchor={anchor}

open={state[anchor]}

onClose={toggleDrawer(anchor, false)}

>

{list(anchor)}

</Drawer>

</React.Fragment>

))}

</div>

);

}

Page Folder

Home.js

import Header from “../Header”;

import Body from “../Body”;

export default function Home(){

return(<div style={{width:”100%”, height:”auto”}}>

<Header />

<Body />

</div>);

}

Vidio.js

import React,{useEffect, useState} from “react”;

import { YoutubePlayer } from “reactjs-media”;

import Button from ‘@material-ui/core/Button’;

import ArrowBackIosIcon from ‘@material-ui/icons/ArrowBackIos’;

import axios from “axios”;

import { BrowserRouter, Route, Switch ,Link} from ‘react-router-dom’;

export default function Vidio(props){

const[size,setSize]=useState({

h : window.screen.height ,w : “100%”

});

const[vID,setVID]=useState(“”);

const getValue = ()=>{

try{

const queryString = window.location.search;

const urlParams = new URLSearchParams(queryString);

const getUrlVale = urlParams.get(‘vId’);

setVID(getUrlVale);

//window.location.reload();

// console.log(getUrlVale);

// console.log(vID);

} catch (e) {

console.log(e);

}

}

//laod time access

useEffect(()=>{

getValue();

},[]);

return(

<div>

<Button href=”/”

style={{ width: “50px”,

height: “50px”,

position: “fixed”,

borderRadious: “50%”,

backgroundColor:”none”,

top:”0px”,

left:”85%”

}}

>

<ArrowBackIosIcon style={{ color:”red”}}/>

back

</Button>

<YoutubePlayer

src={“https://www.youtube.com/watch?v=" + vID }

width={size.w}

height={size.h}

allowFullScreen

title=”this name”

/>

</div>);

}

YoutubeApi Folder

jk.js file you can download using gitHub

Project Root Src Folder

index.js

import React from “react”;

import ReactDOM from “react-dom”;

import “./index.css”;

import App from “./App”;

import reportWebVitals from “./reportWebVitals”;

import “bootstrap/dist/js/bootstrap.min.js”;

import “bootstrap/dist/css/bootstrap.min.css”;

import “bootstrap/dist/css/bootstrap.css”;

//

import Header from “./Folder/Header”;

import Body from “./Folder/Body”;

//

import “bootstrap/dist/css/bootstrap.min.css”;

import { BrowserRouter, Route, Switch } from ‘react-router-dom’;

ReactDOM.render(

<React.StrictMode>

<App />

</React.StrictMode>,

document.getElementById(“root”)

);

// If you want to start measuring performance in your app, pass a function

// to log results (for example: reportWebVitals(console.log))

// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals

reportWebVitals();

App.js

import Home from ‘./Folder/Page/Home’;

import About from ‘./Folder/Page/Vidio’;

import Shop from ‘./Folder/Page/Vidio’;

import { BrowserRouter, Route, Switch } from ‘react-router-dom’;

function App() {

return (

<div>

<main>

<BrowserRouter>

<Switch>

<Route path=”/” component={Home} exact />

<Route path=”/vidio” component={About} />

<Route path=”/shop” component={Shop} />

</Switch>

</BrowserRouter>,

</main>

</div>

);

}

export default App;

Body.js

import React from “react”;

import { makeStyles } from “@material-ui/core/styles”;

import Paper from “@material-ui/core/Paper”;

import Grid from “@material-ui/core/Grid”;

import RecomendVidios from “./Recomendvideios”;

import { Button } from “react-bootstrap”;

const useStyles = makeStyles((theme) => ({

root: {

flexGrow: 1,

},

paper: {

padding: theme.spacing(2),

textAlign: “center”,

color: theme.palette.text.secondary,

},

}));

function Body() {

const classes = useStyles();

return (

<div className={classes.root}>

<Grid container spacing={1}>

<RecomendVidios />

{/* <Paper className={classes.paper}>recomended vidios</Paper> */}

</Grid>

</div>

);

}

export default Body;

Header.js

import React from “react”;

import MenuIcon from “@material-ui/icons/Menu”;

import Search from “./Component/search”;

import VideoCallIcon from “@material-ui/icons/VideoCall”;

import AppsIcon from “@material-ui/icons/Apps”;

import NotificationsIcon from “@material-ui/icons/Notifications”;

import ImageAvatars from “./Component/ImageAvatars”;

import TemporaryDrawer from “./Component/TemporaryDrawer”;

import { YoutubePlayer } from “reactjs-media”;

import DrawerTopIcon from “./Component/DrawerTopIcon”;

import “./CSS/Header.css”;

function Header() {

return (

<div className=”header” style={{ width: “100%”, height: “auto” }}>

<div style={{ width: “100%”, height: “auto” }}>

<div className=”row” style={{ width: “100%”, height: “auto” }}>

<div

className=”col-6"

style={{ width: “50%”, height: “auto”, position: “relative” }}

>

<h1

style={{

color: “#e40017”,

fontSize: “35px”,

fontWeight: “900”,

fontStyle: “italic”,

}}

>

Future

</h1>

<DrawerTopIcon />

</div>

<div

className=”col-6"

style={{ width: “50%”, height: “auto”, position: “relative” }}

>

<div

style={{

display: “inline-flex”,

padding: “25px”,

float: “right”,

}}

>

<div>

<h1

style={{

color: “black”,

fontSize: “25px”,

fontWeight: “900”,

padding: “25px”,

}}

>

<span>vTube</span> Powered By{“ “}

</h1>

</div>

<div>

<img

alt=”youtubeicon”

src=”https://upload.wikimedia.org/wikipedia/commons/b/b8/YouTube_Logo_2017.svg"

width=”150px”

height=”60px”

/>

</div>

</div>

</div>

</div>

<div style={{ width: “100%”, height: “auto” }}>

<div

className=”text-center”

style={{

width: “100%”,

height: “auto”,

paddingBottom: “50px”,

position: “relative”,

}}

>

<Search />

</div>

</div>

</div>

</div>

);

}

export default Header;

Recomendvideos.js

import React, { useEffect, useState } from “react”;

import VideoCard from “../Folder/Component/VidioCard”;

import axios from “axios”;

import JK from “./YoutubeApi/jk”;

function Recomendvideios() {

const [arr, setArr] = useState({

dataSetArray: [],

dataArray1: [],

dataArray2: [],

dataArray3: [],

dataArray4: [],

dataArray5: [],

dataArray6: [],

dataArray7: [],

dataArray8: [],

dataArray9: [],

dataArray10: [],

dataArray11: [],

dataArray12: [],

dataArray13: [],

dataArray14: [],

dataArray15: [],

dataArray16: [],

dataArray17: [],

dataArray18: [],

dataArray19: [],

dataArray20: [],

});

const fun = async () => {

try {

var url = “https://www.googleapis.com/youtube/v3/search?part=";

var p = “snippet”;

// var o = “date”;

var KEY = “AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8”;

var q = “search”; //”user search string value”

var r = 100;

var apiurl = url + p + “&maxResults=” + r + “&key=” + KEY + “&q=” + q;

/**

.get(“https://www.googleapis.com/youtube/v3/search", {

params: {

part: “snippet”,

type: “video”,

order: “date”,

maxResults: 100,

keys: KEY,

q: “searchTerm”,

},

})

//All vidios list

https://www.googleapis.com/youtube/v3/videos?maxResults=1000&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=snippet,contentDetails,statistics&chart=mostPopular

https://www.googleapis.com/youtube/v3/videos?maxResults=1000&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=snippet,contentDetails,statistics&chart=chartUnspecified

https://www.googleapis.com/youtube/v3/videos?maxResults=100&regionCode=AE&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=snippet,contentDetails,statistics&chart=mostPopular

//search Query details Channels to get the “uploads” Id = “chanel” id.

https://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetails

https://www.googleapis.com/youtube/v3/channels?id=UCN71zDAn2H-re6v5A7Joy8g&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=contentDetails

https://www.googleapis.com/youtube/v3/search?maxResults=100&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=snippet&q=tarvel%20sinhala

//get playlist in vidios

https://www.googleapis.com/youtube/v3/playlistItems?playlistId={"uploads" Id}&key={API key}&part=snippet&maxResults=50

https://www.googleapis.com/youtube/v3/playlistItems?playlistId=UUN71zDAn2H-re6v5A7Joy8g&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=snippet&maxResults=50

//get vidio data likes commets counts

https://www.googleapis.com/youtube/v3/videos?part=statistics&id={vidio id}={YOUR_API_KEY}

https://www.googleapis.com/youtube/v3/videos?part=statistics&id=sTPtBvcYkO8&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8

//get chanel data all all counts views subcriptions

https://www.googleapis.com/youtube/v3/channels?part=statistics&id='.$chann_id.'&key='.$api_key

https://www.googleapis.com/youtube/v3/channels?part=statistics&id=UCU_ZZ53ss0u9HvKF1jOsUjQ&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8

*/

let ss = Math.round(Math.random() * 10000);

// console.log(ss);

apiurl =

“https://www.googleapis.com/youtube/v3/videos?regionCode=LK&maxResults=100&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&part=snippet,contentDetails,statistics&chart=mostPopular";

//apiurl = “https://www.googleapis.com/youtube/v3/search?part=snippet&order=date&maxResults=100&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&q=opencourseware";

await axios

.get(apiurl)

.then((response) => {

var a = Object.values(response.data.items);

setArr(a);

console.log(response.data, a);

/*

//search ele out put ek

console.log(response.data, a);

console.log(response.data.items[0].id.videoId);

console.log(response.data.items[0].snippet.channelTitle);

console.log(response.data.items[0].snippet.title);

console.log(response.data.items[0].snippet.description);

console.log(response.data.items[0].snippet.thumbnails.default.url);

console.log(response.data.items[0].id.videoId);

console.log(response.data.items[0].snippet.channelId);

console.log(response.data.items[0].snippet.channelTitle);

console.log(response.data.items[0].snippet.title);

console.log(response.data.items[0].snippet.description);

console.log(response.data.items[0].snippet.thumbnails.default.url);

*/

})

.catch((error) => {

throw error;

});

} catch (e) {

console.log(e);

}

};

var allDataArrayContent = [];

const clk = async () => {

try {

var test = new Array(1000);

var x = new JK();

var p = x.dataSet; //variable

/*

console.log(“dataSet length-”, p.length);

console.log(“dataSet one intes item length-”, p[0].items.length);

console.log(“All data set-”, p.length * p[0].items.length);

console.log(“-one item-”, p[0].items);

*/

var d = [];

var i = 0;

var v = 0;

await p.map((j) => {

var g = j.items; //20 items

// console.log(i, “-g-”, g);

d[i] = g; //pup to arary indexes one by one it have 50 items

// console.log(i, “-d-I”, d[i]);

//second loop

var w = 0;

d[i].map((z) => {

/* console.log(w, “-z-gooooooog-”, z);

console.log(i + w);

console.log(v);

*/

test[v] = z;

/*

console.log(w, “-gooooooog-”, z.snippet);

console.log(w, “content Details-gooooooog-”, z.contentDetails);

*/

allDataArrayContent[w] = z;

w++;

v++;

});

v++;

i++;

});

setArr({

…arr,

dataArray3: test,

});

} catch (e) {

console.log(“recomended.js “, e);

}

};

/*

console.log(“-dAll-”, d);

console.log(“-d-[0]-”, d[0]); //array list

console.log(“-d-[0][0]-”, d[0][0]); //array list index have array

console.log(“-d-[0][0].snipet-”, d[0][0].snippet); //array obeject name reference

console.log(“-d-[0]-”, d[0][0].snippet.channelTitle);

console.log(test.length, “-test-”, test);

*/

/*

var x = p[0].items;

var b = p[1].items;

var c = p[2].items;

var d = x.concat(b, c);

*/

/*

console.log(“-1-”, x.dataSet[0].items);

var abcArray = [];

p.map((d) => {

console.log(i, “d — “, d);

console.log(i, “d — item”, d.items);

abcArray[i] = d.items;

// setArr({ …arr, dataArray: abcArray });

// console.log(i, “arr-”, arr);

console.log(i, “-arr.dataArray-”, arr.dataArray);

*/

// console.log(i, “ — “, arr[0].snippet);

/* d.items.map((d) => {

console.log(d.snippet);

});

*/

// console.log(pp);

// });

/*

try {

var apiurl =

“https://www.googleapis.com/youtube/v3/videos?regionCode=LK&maxResults=1000&key=AIzaSyDQSURwrKUwOPdaHm0frk9o-mNlqqgKzFA&part=snippet,contentDetails,statistics&chart=mostPopular";

//apiurl = “https://www.googleapis.com/youtube/v3/search?part=snippet&order=date&maxResults=100&key=AIzaSyCYYbzNF_8fU5XON90QNgRkjtfYFN5v4m8&q=opencourseware";

apiurl = “./YoutubeApi/a.json”;

await axios

.get(apiurl, {

headers: {

“Content-Type”: “application/json”,

Accept: “application/json”,

},

})

.then((response) => {

var a = Object.values(response.data.items);

setArr(a);

console.log(response);

})

.catch((error) => {

throw error;

});

} catch (e) {

console.log(e);

}

*/

/*

var x = new sheet();

console.log(“hai”, x.dataSetAE.items);

setArr(Object.values(x.dataSetAE.items));

console.log(“ — hh — “, x.dataSetAE.items);

//console.log(“ — all — “, x.dataSetAll[0]);

*/

//componentDidMount(){ alert(“hai”); };

/*

*/

//setArr([1, 2, 3]);

const loadData = async () => {

var x = new JK();

var p = x.dataSet; //variabl

setArr({

…arr,

dataArray3: p[1].items,

});

console.log(p[1].items[5]);

console.log(p[1].items[5].snippet.thumbnails.default.url);

};

useEffect(() => {

clk();

}, []);

var a = arr.dataArray3;

const list = a.map((d) => {

// console.log(“llllllllllllllll”, d.snippet.channelTitle);

// var c = d.snippet.channelTitle;

// vidio={“https://www.youtube.com/watch?v=" + v}

var v = d.id; //d.id.videoId;

return (

<div

className=”col-sm-12 col-md-3 col-lg-3"

style={{ width: “100%”, position: “relative”, padding: “10px” }}

>

<VideoCard

id={d.id}

vidio={“https://www.youtube.com/watch?v=" + v}

chanelname={d.snippet.title}

discription={d.snippet.description}

chanelimage={d.snippet.thumbnails.high.url}

like={d.statistics.likeCount}

view={d.statistics.viewCount}

dislike={d.statistics.dislikeCount}

commentCount={d.statistics.commentCount}

favoriteCount={d.statistics.favoriteCount}

/>

</div>

);

});

return (

<div>

<div className=”row” style={{ width: “100%”, textAlign: “center” }}>

{list}

</div>

</div>

);

}

export default Recomendvideios;

FINISH NOW YOU CAN ENJOY YOUTUBE VIDIOS. Good Luck !

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

No responses yet

Write a response