From c5217d3aa3aa1e83a9121c7dc2ebf996f05a0ee0 Mon Sep 17 00:00:00 2001 From: quokka-eating-carrots Date: Fri, 20 Jan 2023 21:52:47 +0900 Subject: [PATCH 1/2] youtube clone --- .gitignore | 25 + LICENSE | 21 + README.md | 124 +- index.html | 13 + package-lock.json | 5315 +++++++++++++++++ package.json | 33 + public/_redirects | 1 + public/favicon.ico | Bin 0 -> 4440 bytes public/vite.svg | 1 + src/App.css | 34 + src/App.jsx | 63 + src/assets/react.svg | 1 + src/assets/tia.png | Bin 0 -> 151 bytes src/components/Comments/Comments.jsx | 38 + src/components/Comments/Comments.module.scss | 68 + src/components/Header/Header.jsx | 69 + src/components/Header/Header.module.scss | 73 + src/components/Header/HeaderInputForm.jsx | 93 + .../Header/HeaderInputForm.module.scss | 176 + src/components/MainList/MainList.jsx | 73 + src/components/MainList/MainList.module.scss | 85 + src/components/NavBar/Explore/index.jsx | 18 + src/components/NavBar/MoreYoutube/index.jsx | 16 + src/components/NavBar/MoreYoutube/svgList.js | 24 + src/components/NavBar/NavBar.module.scss | 39 + src/components/NavBar/ServiceCenter/index.jsx | 15 + src/components/NavBar/SubNavBar.module.scss | 37 + src/components/NavBar/Tab/TabItem.jsx | 19 + src/components/NavBar/Tab/TabItem.module.scss | 20 + src/components/NavBar/Video/index.jsx | 23 + src/components/NavBar/index.jsx | 24 + src/components/NavBar/subNavBar.jsx | 36 + src/components/PlayVideoInfo/Playing.jsx | 12 + .../PlayVideoInfo/Playing.module.scss | 14 + src/components/PlayVideoInfo/VideoInfo.jsx | 59 + .../PlayVideoInfo/VideoInfo.module.scss | 33 + .../PlayVideoInfo/VideoInfoDetail.jsx | 75 + .../PlayVideoInfo/VideoInfoDetail.module.scss | 43 + .../RelatedVideos/EachRelatedVideo.jsx | 114 + .../EachRelatedVideos.module.scss | 102 + src/components/SearchList/SearchList.jsx | 98 + .../SearchList/SearchList.module.scss | 94 + src/data/channel.json | 43 + src/data/comments.json | 651 ++ src/data/db.json | 2698 +++++++++ src/data/realatedVideo.json | 402 ++ src/data/relatedVideoSearch.json | 1324 ++++ src/data/search.json | 352 ++ src/data/video.json | 81 + src/data/videos.json | 352 ++ src/data/videosDetail.json | 660 ++ src/index.css | 3 + src/main.jsx | 33 + src/pages/MainPage/MainPage.jsx | 28 + src/pages/MainPage/MainPage.module.scss | 5 + .../PlayPage/Comment/Comment.module.scss | 12 + src/pages/PlayPage/Comment/index.jsx | 62 + src/pages/PlayPage/PlayPage.jsx | 71 + src/pages/PlayPage/PlayPage.module.scss | 36 + src/pages/PlayPage/PlayVideo/index.jsx | 16 + .../RelatedVideo/RelatedVideos.module.scss | 8 + src/pages/PlayPage/RelatedVideo/index.jsx | 65 + src/pages/SearchPage/SearchPage.jsx | 45 + src/pages/SearchPage/SearchPage.module.scss | 7 + src/utils/CalDate.js | 27 + src/utils/CalDuration.js | 9 + src/utils/CalNum.js | 17 + vite.config.js | 7 + 68 files changed, 14158 insertions(+), 77 deletions(-) create mode 100644 .gitignore create mode 100644 LICENSE create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/_redirects create mode 100644 public/favicon.ico create mode 100644 public/vite.svg create mode 100644 src/App.css create mode 100644 src/App.jsx create mode 100644 src/assets/react.svg create mode 100644 src/assets/tia.png create mode 100644 src/components/Comments/Comments.jsx create mode 100644 src/components/Comments/Comments.module.scss create mode 100644 src/components/Header/Header.jsx create mode 100644 src/components/Header/Header.module.scss create mode 100644 src/components/Header/HeaderInputForm.jsx create mode 100644 src/components/Header/HeaderInputForm.module.scss create mode 100644 src/components/MainList/MainList.jsx create mode 100644 src/components/MainList/MainList.module.scss create mode 100644 src/components/NavBar/Explore/index.jsx create mode 100644 src/components/NavBar/MoreYoutube/index.jsx create mode 100644 src/components/NavBar/MoreYoutube/svgList.js create mode 100644 src/components/NavBar/NavBar.module.scss create mode 100644 src/components/NavBar/ServiceCenter/index.jsx create mode 100644 src/components/NavBar/SubNavBar.module.scss create mode 100644 src/components/NavBar/Tab/TabItem.jsx create mode 100644 src/components/NavBar/Tab/TabItem.module.scss create mode 100644 src/components/NavBar/Video/index.jsx create mode 100644 src/components/NavBar/index.jsx create mode 100644 src/components/NavBar/subNavBar.jsx create mode 100644 src/components/PlayVideoInfo/Playing.jsx create mode 100644 src/components/PlayVideoInfo/Playing.module.scss create mode 100644 src/components/PlayVideoInfo/VideoInfo.jsx create mode 100644 src/components/PlayVideoInfo/VideoInfo.module.scss create mode 100644 src/components/PlayVideoInfo/VideoInfoDetail.jsx create mode 100644 src/components/PlayVideoInfo/VideoInfoDetail.module.scss create mode 100644 src/components/RelatedVideos/EachRelatedVideo.jsx create mode 100644 src/components/RelatedVideos/EachRelatedVideos.module.scss create mode 100644 src/components/SearchList/SearchList.jsx create mode 100644 src/components/SearchList/SearchList.module.scss create mode 100644 src/data/channel.json create mode 100644 src/data/comments.json create mode 100644 src/data/db.json create mode 100644 src/data/realatedVideo.json create mode 100644 src/data/relatedVideoSearch.json create mode 100644 src/data/search.json create mode 100644 src/data/video.json create mode 100644 src/data/videos.json create mode 100644 src/data/videosDetail.json create mode 100644 src/index.css create mode 100644 src/main.jsx create mode 100644 src/pages/MainPage/MainPage.jsx create mode 100644 src/pages/MainPage/MainPage.module.scss create mode 100644 src/pages/PlayPage/Comment/Comment.module.scss create mode 100644 src/pages/PlayPage/Comment/index.jsx create mode 100644 src/pages/PlayPage/PlayPage.jsx create mode 100644 src/pages/PlayPage/PlayPage.module.scss create mode 100644 src/pages/PlayPage/PlayVideo/index.jsx create mode 100644 src/pages/PlayPage/RelatedVideo/RelatedVideos.module.scss create mode 100644 src/pages/PlayPage/RelatedVideo/index.jsx create mode 100644 src/pages/SearchPage/SearchPage.jsx create mode 100644 src/pages/SearchPage/SearchPage.module.scss create mode 100644 src/utils/CalDate.js create mode 100644 src/utils/CalDuration.js create mode 100644 src/utils/CalNum.js create mode 100644 vite.config.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1cac559 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +.env \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..90cdcce --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 YouTube-clone-Team-3 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index b737bcc..9049d88 100644 --- a/README.md +++ b/README.md @@ -1,77 +1,47 @@ -유튜브 앱 작성 - -유튜브앱 설명자료: -https://docs.google.com/document/d/1vHlO8lgIo1oXBYiecpE8TbG2tHnr3Hmv25UxK_7a5_g/edit# - -목표: 유튜브 앱을 만든다. - -수행 기간: 오늘 ~ 2023.01.20(금) 까지 -리뷰 기간: -제출 방법: -main 혹은 다른 사람의 브랜치로 절대 병합하지 않도록 주의하세요! -혹시 문제가 발생한 경우, 바로 강사에게 알려주세요! -현재 깃헙 저장소를 클론! -확인 가능하도록 본명으로 브랜치 생성! -과제 수행 후 원격 저장소로 푸시! -현재 깃헙 저장소에서 main 브랜치로 Pull Request 생성하면 제출 완료! -Pull Request 설명을 꼼꼼하게 작성! - -요구사항 -다음 요구사항은 필수로 구현하고 그 외 기능은 마음대로 추가할 수 있다. -유튜브 api를 사용해서 유튜브 데이터를 가져옵니다. - -- 유튜브 Api 사용 방법 (API KEY 생성하는 법) -https://console.cloud.google.com/ Google cloud console로 이동하기 -Youtube Data API 활성화 시키기 -API KEY 생성하기 - - - 유튜브 API 요청 방법 - -baseURL : https://youtube.googleapis.com/youtube/v3 - -검색어로 인한 비디오 데이터: -/search?part=snippet&maxResults=10&q={검색어} - -특정 비디오 데이터 : -/videos?part=snippet&part=contentDetails&part=player&part=statistics&id={videoId} - -특정 채널 정보 데이터: -/channels?part=snippet&part=statistics&part=contentDetails&id={channelId} - -댓글 데이터: -/commentThreads?part=snippet&videoId={videoId} - -관련 비디오 데이터: -/search?part=snippet&maxResults=10&relatedToVideoId=${videoId}&type=video - - - - 요청 주의 사항 - -a. 하루에 하나의 api_key에 할당된 요청 수가 있습니다. -그 이상 넘어가면 더 이상 요청을 못하게 되기 때문에 데이터를 가져오면 localStorage에 넣어서 localStorage에 이미 데이터가 있으면 요청을 보내지 말고 그 데이터를 이용해서 앱을 개발해 줍니다. - -b. 를 없애도 개발을 해주세요. (요청이 두 번씩 가서 더 많은 api 호출을 하게 됩니다.) - - -UI 구현 예시 -예시를 참고로 자유롭게 구현한다. - -- 메인 화면 -youtube api 를 이용해서 원하는 검색어에 맞는 비디오 데이터를 가져옵니다. -가져온 데이터를 이용해서 아래와 같은 UI를 보여줍니다. -Navigation bar (위쪽 부분) side bar (왼쪽 부분)의 UI를 조건에 따라 처리해줍니다. - -- 비디오 화면 -youtube api 를 이용해서 특정 비디오, 댓글, 관련 비디오 데이터를 가져옵니다. -가져온 데이터를 이용해서 아래와 같은 UI를 보여줍니다. - -- 검색 화면 -youtube api 를 이용해서 원하는 검색어에 맞는 비디오 데이터를 가져옵니다. -가져온 데이터를 이용해서 아래와 같은 UI를 보여줍니다. - -주의 사항 -컴포넌트를 올바르게 나누기 -반응형 스타일도 신경 쓰되 스타일보다는 기능 위주로 개발하기 -최대한 이해하기 쉬운 변수명, 파일명, 컴포넌트명 사용하기 -어떠한 부분(데이터)을 위해서 State 관리 라이브러리를 사용해야 할지 생각해 보기 -React-router-dom api의 중첩 라우팅을 이용해서 레이아웃을 만들어주기 +# YouTube Clone - 3조 + +## [프로젝트 팀 레포](https://github.com/YouTube-clone-Team-3/ToyProject-YouTube-Clone) +## [DEMO](https://toy-youtube-clone-t3.netlify.app) + +## 팀원 + + + + + + + + +
+
+ FE.
+ + + +
+ + FE.
+ + + +
+
+ FE.
+ + + +
+ +## 기술 스택 + + + + + + + + + +## 이슈 ++ NavBar가 반대로 열리게 되는 현상이 있습니다. ++ API 할당량으로 인한 이슈가 있을 수 있습니다. (특히 Search Page...) \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..2c6e252 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + YouTube + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..597f58d --- /dev/null +++ b/package-lock.json @@ -0,0 +1,5315 @@ +{ + "name": "toyproject-youtube-clone", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "toyproject-youtube-clone", + "version": "0.0.0", + "dependencies": { + "axios": "^1.2.2", + "dayjs": "^1.11.7", + "dotenv": "^16.0.3", + "moment": "^2.29.4", + "moment-duration-format": "^2.3.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-icons": "^4.7.1", + "react-responsive": "^9.0.2", + "react-router-dom": "^6.6.2", + "react-youtube": "^10.1.0", + "sass": "^1.57.1" + }, + "devDependencies": { + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.9", + "@vitejs/plugin-react": "^3.0.0", + "json-server": "^0.17.1", + "vite": "^4.0.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", + "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", + "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", + "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", + "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", + "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", + "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", + "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", + "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", + "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", + "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", + "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", + "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", + "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", + "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", + "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", + "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", + "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", + "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", + "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", + "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", + "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@remix-run/router": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz", + "integrity": "sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.0.26", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", + "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", + "dev": true, + "dependencies": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.0.10", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", + "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", + "dev": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.0.1.tgz", + "integrity": "sha512-mx+QvYwIbbpOIJw+hypjnW1lAbKDHtWK5ibkF/V1/oMBu8HU/chb+SnqJDAsLq1+7rGqjktCEomMTM5KShzUKQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.20.7", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.27.0", + "react-refresh": "^0.14.0" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", + "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001445", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001445.tgz", + "integrity": "sha512-8sdQIdMztYmzfTMO6KfLny878Ln9c2M0fc7EH60IjlP4Dc4PiCy7K2Vl3ITmWgOyPgVQKa5x+UP/KqFsxj4mBg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/connect-pause": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/connect-pause/-/connect-pause-0.1.1.tgz", + "integrity": "sha512-a1gSWQBQD73krFXdUEYJom2RTFrWUL3YvXDCRkyv//GVXc79cdW9MngtRuN9ih4FDKBtfJAJId+BbDuX+1rh2w==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/css-mediaquery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" + }, + "node_modules/csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true + }, + "node_modules/dayjs": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "dev": true, + "dependencies": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/esbuild": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-urlrewrite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/express-urlrewrite/-/express-urlrewrite-1.4.0.tgz", + "integrity": "sha512-PI5h8JuzoweS26vFizwQl6UTF25CAHSggNv0J25Dn/IKZscJHWZzPrI5z2Y2jgOzIaw2qh8l6+/jUcig23Z2SA==", + "dev": true, + "dependencies": { + "debug": "*", + "path-to-regexp": "^1.0.3" + } + }, + "node_modules/express-urlrewrite/node_modules/path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "dependencies": { + "isarray": "0.0.1" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/hyphenate-style-name": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", + "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", + "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "node_modules/jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-helpfulerror": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", + "integrity": "sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==", + "dev": true, + "dependencies": { + "jju": "^1.1.0" + } + }, + "node_modules/json-server": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/json-server/-/json-server-0.17.1.tgz", + "integrity": "sha512-2cR/IAL9xX4M1Y5ONMpnvRvJ5o9gJH5GsSQs7fQHdTKTKoN4YRZu1ApQKg/4P0XzwlLyUDqTlwhPq9nsvJ9acw==", + "dev": true, + "dependencies": { + "body-parser": "^1.19.0", + "chalk": "^4.1.2", + "compression": "^1.7.4", + "connect-pause": "^0.1.1", + "cors": "^2.8.5", + "errorhandler": "^1.5.1", + "express": "^4.17.1", + "express-urlrewrite": "^1.4.0", + "json-parse-helpfulerror": "^1.0.3", + "lodash": "^4.17.21", + "lodash-id": "^0.14.1", + "lowdb": "^1.0.0", + "method-override": "^3.0.0", + "morgan": "^1.10.0", + "nanoid": "^3.1.23", + "please-upgrade-node": "^3.2.0", + "pluralize": "^8.0.0", + "server-destroy": "^1.0.1", + "yargs": "^17.0.1" + }, + "bin": { + "json-server": "lib/cli/bin.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/json-server/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/json-server/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/json-server/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/json-server/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/json-server/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/json-server/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==" + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash-id": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/lodash-id/-/lodash-id-0.14.1.tgz", + "integrity": "sha512-ikQPBTiq/d5m6dfKQlFdIXFzvThPi2Be9/AHxktOnDSfSxE1j9ICbBT5Elk1ke7HSTgM38LHTpmJovo9/klnLg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lowdb": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz", + "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.3", + "is-promise": "^2.1.0", + "lodash": "4", + "pify": "^3.0.0", + "steno": "^0.4.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/matchmediaquery": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz", + "integrity": "sha512-Hlk20WQHRIm9EE9luN1kjRjYXAQToHOIAHPJn9buxBwuhfTHoKUcX+lXBbxc85DVQfXYbEQ4HcwQdd128E3qHQ==", + "dependencies": { + "css-mediaquery": "^0.1.2" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/method-override": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz", + "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==", + "dev": true, + "dependencies": { + "debug": "3.1.0", + "methods": "~1.1.2", + "parseurl": "~1.3.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/method-override/node_modules/debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/method-override/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-duration-format": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.3.2.tgz", + "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-releases": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + } + ], + "dependencies": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-icons": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.7.1.tgz", + "integrity": "sha512-yHd3oKGMgm7zxo3EA7H2n7vxSoiGmHk5t6Ou4bXsfcgWyhfDKMpyKfhHR6Bjnn63c+YXBLBPUql9H4wPJM6sXw==", + "peerDependencies": { + "react": "*" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "node_modules/react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-responsive": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-9.0.2.tgz", + "integrity": "sha512-+4CCab7z8G8glgJoRjAwocsgsv6VA2w7JPxFWHRc7kvz8mec1/K5LutNC2MG28Mn8mu6+bu04XZxHv5gyfT7xQ==", + "dependencies": { + "hyphenate-style-name": "^1.0.0", + "matchmediaquery": "^0.3.0", + "prop-types": "^15.6.1", + "shallow-equal": "^1.2.1" + }, + "engines": { + "node": ">=0.10" + }, + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/react-router": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.6.2.tgz", + "integrity": "sha512-uJPG55Pek3orClbURDvfljhqFvMgJRo59Pktywkk8hUUkTY2aRfza8Yhl/vZQXs+TNQyr6tu+uqz/fLxPICOGQ==", + "dependencies": { + "@remix-run/router": "1.2.1" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.2.tgz", + "integrity": "sha512-6SCDXxRQqW5af8ImOqKza7icmQ47/EMbz572uFjzvcArg3lZ+04PxSPp8qGs+p2Y+q+b+S/AjXv8m8dyLndIIA==", + "dependencies": { + "@remix-run/router": "1.2.1", + "react-router": "6.6.2" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/react-youtube": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-youtube/-/react-youtube-10.1.0.tgz", + "integrity": "sha512-ZfGtcVpk0SSZtWCSTYOQKhfx5/1cfyEW1JN/mugGNfAxT3rmVJeMbGpA9+e78yG21ls5nc/5uZJETE3cm3knBg==", + "dependencies": { + "fast-deep-equal": "3.1.3", + "prop-types": "15.8.1", + "youtube-player": "5.5.2" + }, + "engines": { + "node": ">= 14.x" + }, + "peerDependencies": { + "react": ">=0.14.1" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/rollup": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.10.0.tgz", + "integrity": "sha512-JmRYz44NjC1MjVF2VKxc0M1a97vn+cDxeqWmnwyAF4FvpjK8YFdHpaqvQB+3IxCvX05vJxKZkoMDU8TShhmJVA==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", + "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sister": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sister/-/sister-3.0.2.tgz", + "integrity": "sha512-p19rtTs+NksBRKW9qn0UhZ8/TUI9BPw9lmtHny+Y3TinWlOa9jWh9xB0AtPSdmOy49NJJJSSe0Ey4C7h0TrcYA==" + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/steno": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz", + "integrity": "sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.3" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", + "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", + "dev": true, + "dependencies": { + "esbuild": "^0.16.3", + "postcss": "^8.4.20", + "resolve": "^1.22.1", + "rollup": "^3.7.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/youtube-player": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/youtube-player/-/youtube-player-5.5.2.tgz", + "integrity": "sha512-ZGtsemSpXnDky2AUYWgxjaopgB+shFHgXVpiJFeNB5nWEugpW1KWYDaHKuLqh2b67r24GtP6HoSW5swvf0fFIQ==", + "dependencies": { + "debug": "^2.6.6", + "load-script": "^1.0.0", + "sister": "^3.0.0" + } + }, + "node_modules/youtube-player/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/youtube-player/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dev": true, + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.20.10", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz", + "integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==", + "dev": true + }, + "@babel/core": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", + "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helpers": "^7.20.7", + "@babel/parser": "^7.20.7", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.12", + "@babel/types": "^7.20.7", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz", + "integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==", + "dev": true, + "requires": { + "@babel/types": "^7.20.7", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-compilation-targets": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", + "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.20.5", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dev": true, + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz", + "integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.10", + "@babel/types": "^7.20.7" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", + "dev": true + }, + "@babel/helper-simple-access": { + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", + "dev": true, + "requires": { + "@babel/types": "^7.20.2" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz", + "integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==", + "dev": true, + "requires": { + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz", + "integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==", + "dev": true + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.18.6.tgz", + "integrity": "sha512-A0LQGx4+4Jv7u/tWzoJF7alZwnBDQd6cGLh9P+Ttk4dpiL+J5p7NSNv/9tlEFFJDq3kjxOavWmbm6t0Gk+A3Ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.19.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", + "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.19.0" + } + }, + "@babel/template": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" + } + }, + "@babel/traverse": { + "version": "7.20.12", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz", + "integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz", + "integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" + } + }, + "@esbuild/android-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.17.tgz", + "integrity": "sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.17.tgz", + "integrity": "sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.17.tgz", + "integrity": "sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.17.tgz", + "integrity": "sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.17.tgz", + "integrity": "sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.17.tgz", + "integrity": "sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.17.tgz", + "integrity": "sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.17.tgz", + "integrity": "sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.17.tgz", + "integrity": "sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.17.tgz", + "integrity": "sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.17.tgz", + "integrity": "sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.17.tgz", + "integrity": "sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.17.tgz", + "integrity": "sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.17.tgz", + "integrity": "sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.17.tgz", + "integrity": "sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.17.tgz", + "integrity": "sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.17.tgz", + "integrity": "sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.17.tgz", + "integrity": "sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.17.tgz", + "integrity": "sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.17.tgz", + "integrity": "sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.17.tgz", + "integrity": "sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.17.tgz", + "integrity": "sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==", + "dev": true, + "optional": true + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@remix-run/router": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.2.1.tgz", + "integrity": "sha512-XiY0IsyHR+DXYS5vBxpoBe/8veTeoRpMHP+vDosLZxL5bnpetzI0igkxkLZS235ldLzyfkxF+2divEwWHP3vMQ==" + }, + "@types/prop-types": { + "version": "15.7.5", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", + "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", + "dev": true + }, + "@types/react": { + "version": "18.0.26", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.26.tgz", + "integrity": "sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "18.0.10", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.10.tgz", + "integrity": "sha512-E42GW/JA4Qv15wQdqJq8DL4JhNpB3prJgjgapN3qJT9K2zO5IIAQh4VXvCEDupoqAwnz0cY4RlXeC/ajX5SFHg==", + "dev": true, + "requires": { + "@types/react": "*" + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@vitejs/plugin-react": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.0.1.tgz", + "integrity": "sha512-mx+QvYwIbbpOIJw+hypjnW1lAbKDHtWK5ibkF/V1/oMBu8HU/chb+SnqJDAsLq1+7rGqjktCEomMTM5KShzUKQ==", + "dev": true, + "requires": { + "@babel/core": "^7.20.7", + "@babel/plugin-transform-react-jsx-self": "^7.18.6", + "@babel/plugin-transform-react-jsx-source": "^7.19.6", + "magic-string": "^0.27.0", + "react-refresh": "^0.14.0" + } + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "axios": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz", + "integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==", + "requires": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.9" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "caniuse-lite": { + "version": "1.0.30001445", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001445.tgz", + "integrity": "sha512-8sdQIdMztYmzfTMO6KfLny878Ln9c2M0fc7EH60IjlP4Dc4PiCy7K2Vl3ITmWgOyPgVQKa5x+UP/KqFsxj4mBg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "connect-pause": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/connect-pause/-/connect-pause-0.1.1.tgz", + "integrity": "sha512-a1gSWQBQD73krFXdUEYJom2RTFrWUL3YvXDCRkyv//GVXc79cdW9MngtRuN9ih4FDKBtfJAJId+BbDuX+1rh2w==", + "dev": true + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "css-mediaquery": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/css-mediaquery/-/css-mediaquery-0.1.2.tgz", + "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" + }, + "csstype": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", + "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", + "dev": true + }, + "dayjs": { + "version": "1.11.7", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.7.tgz", + "integrity": "sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.284", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", + "integrity": "sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "errorhandler": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", + "integrity": "sha512-rcOwbfvP1WTViVoUjcfZicVzjhjTuhSMntHh6mW3IrEiyE6mJyXvsToJUJGlGlw/2xU9P5whlWNGlIDVeCiT4A==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "escape-html": "~1.0.3" + } + }, + "esbuild": { + "version": "0.16.17", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.17.tgz", + "integrity": "sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.16.17", + "@esbuild/android-arm64": "0.16.17", + "@esbuild/android-x64": "0.16.17", + "@esbuild/darwin-arm64": "0.16.17", + "@esbuild/darwin-x64": "0.16.17", + "@esbuild/freebsd-arm64": "0.16.17", + "@esbuild/freebsd-x64": "0.16.17", + "@esbuild/linux-arm": "0.16.17", + "@esbuild/linux-arm64": "0.16.17", + "@esbuild/linux-ia32": "0.16.17", + "@esbuild/linux-loong64": "0.16.17", + "@esbuild/linux-mips64el": "0.16.17", + "@esbuild/linux-ppc64": "0.16.17", + "@esbuild/linux-riscv64": "0.16.17", + "@esbuild/linux-s390x": "0.16.17", + "@esbuild/linux-x64": "0.16.17", + "@esbuild/netbsd-x64": "0.16.17", + "@esbuild/openbsd-x64": "0.16.17", + "@esbuild/sunos-x64": "0.16.17", + "@esbuild/win32-arm64": "0.16.17", + "@esbuild/win32-ia32": "0.16.17", + "@esbuild/win32-x64": "0.16.17" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "express-urlrewrite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/express-urlrewrite/-/express-urlrewrite-1.4.0.tgz", + "integrity": "sha512-PI5h8JuzoweS26vFizwQl6UTF25CAHSggNv0J25Dn/IKZscJHWZzPrI5z2Y2jgOzIaw2qh8l6+/jUcig23Z2SA==", + "dev": true, + "requires": { + "debug": "*", + "path-to-regexp": "^1.0.3" + }, + "dependencies": { + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "requires": { + "isarray": "0.0.1" + } + } + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "hyphenate-style-name": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz", + "integrity": "sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "immutable": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.2.2.tgz", + "integrity": "sha512-fTMKDwtbvO5tldky9QZ2fMX7slR0mYpY5nbnFWYp0fOzDhHqhgIw9KoYgxLWsoNTS9ZHGauHj18DTyEw6BK3Og==" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", + "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "dev": true + }, + "jju": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-helpfulerror": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/json-parse-helpfulerror/-/json-parse-helpfulerror-1.0.3.tgz", + "integrity": "sha512-XgP0FGR77+QhUxjXkwOMkC94k3WtqEBfcnjWqhRd82qTat4SWKRE+9kUnynz/shm3I4ea2+qISvTIeGTNU7kJg==", + "dev": true, + "requires": { + "jju": "^1.1.0" + } + }, + "json-server": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/json-server/-/json-server-0.17.1.tgz", + "integrity": "sha512-2cR/IAL9xX4M1Y5ONMpnvRvJ5o9gJH5GsSQs7fQHdTKTKoN4YRZu1ApQKg/4P0XzwlLyUDqTlwhPq9nsvJ9acw==", + "dev": true, + "requires": { + "body-parser": "^1.19.0", + "chalk": "^4.1.2", + "compression": "^1.7.4", + "connect-pause": "^0.1.1", + "cors": "^2.8.5", + "errorhandler": "^1.5.1", + "express": "^4.17.1", + "express-urlrewrite": "^1.4.0", + "json-parse-helpfulerror": "^1.0.3", + "lodash": "^4.17.21", + "lodash-id": "^0.14.1", + "lowdb": "^1.0.0", + "method-override": "^3.0.0", + "morgan": "^1.10.0", + "nanoid": "^3.1.23", + "please-upgrade-node": "^3.2.0", + "pluralize": "^8.0.0", + "server-destroy": "^1.0.1", + "yargs": "^17.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true + }, + "load-script": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/load-script/-/load-script-1.0.0.tgz", + "integrity": "sha512-kPEjMFtZvwL9TaZo0uZ2ml+Ye9HUMmPwbYRJ324qF9tqMejwykJ5ggTyvzmrbBeapCAbk98BSbTeovHEEP1uCA==" + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash-id": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/lodash-id/-/lodash-id-0.14.1.tgz", + "integrity": "sha512-ikQPBTiq/d5m6dfKQlFdIXFzvThPi2Be9/AHxktOnDSfSxE1j9ICbBT5Elk1ke7HSTgM38LHTpmJovo9/klnLg==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "lowdb": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lowdb/-/lowdb-1.0.0.tgz", + "integrity": "sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.3", + "is-promise": "^2.1.0", + "lodash": "4", + "pify": "^3.0.0", + "steno": "^0.4.1" + } + }, + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.4.13" + } + }, + "matchmediaquery": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/matchmediaquery/-/matchmediaquery-0.3.1.tgz", + "integrity": "sha512-Hlk20WQHRIm9EE9luN1kjRjYXAQToHOIAHPJn9buxBwuhfTHoKUcX+lXBbxc85DVQfXYbEQ4HcwQdd128E3qHQ==", + "requires": { + "css-mediaquery": "^0.1.2" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "method-override": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/method-override/-/method-override-3.0.0.tgz", + "integrity": "sha512-IJ2NNN/mSl9w3kzWB92rcdHpz+HjkxhDJWNDBqSlas+zQdP8wBiJzITPg08M/k2uVvMow7Sk41atndNtt/PHSA==", + "dev": true, + "requires": { + "debug": "3.1.0", + "methods": "~1.1.2", + "parseurl": "~1.3.2", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "requires": { + "mime-db": "1.52.0" + } + }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, + "moment-duration-format": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.3.2.tgz", + "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dev": true, + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + } + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "nanoid": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", + "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "node-releases": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.8.tgz", + "integrity": "sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true + }, + "postcss": { + "version": "8.4.21", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", + "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", + "dev": true, + "requires": { + "nanoid": "^3.3.4", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + } + }, + "prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "requires": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + } + }, + "react-icons": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.7.1.tgz", + "integrity": "sha512-yHd3oKGMgm7zxo3EA7H2n7vxSoiGmHk5t6Ou4bXsfcgWyhfDKMpyKfhHR6Bjnn63c+YXBLBPUql9H4wPJM6sXw==", + "requires": {} + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + }, + "react-refresh": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", + "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", + "dev": true + }, + "react-responsive": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/react-responsive/-/react-responsive-9.0.2.tgz", + "integrity": "sha512-+4CCab7z8G8glgJoRjAwocsgsv6VA2w7JPxFWHRc7kvz8mec1/K5LutNC2MG28Mn8mu6+bu04XZxHv5gyfT7xQ==", + "requires": { + "hyphenate-style-name": "^1.0.0", + "matchmediaquery": "^0.3.0", + "prop-types": "^15.6.1", + "shallow-equal": "^1.2.1" + } + }, + "react-router": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.6.2.tgz", + "integrity": "sha512-uJPG55Pek3orClbURDvfljhqFvMgJRo59Pktywkk8hUUkTY2aRfza8Yhl/vZQXs+TNQyr6tu+uqz/fLxPICOGQ==", + "requires": { + "@remix-run/router": "1.2.1" + } + }, + "react-router-dom": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.6.2.tgz", + "integrity": "sha512-6SCDXxRQqW5af8ImOqKza7icmQ47/EMbz572uFjzvcArg3lZ+04PxSPp8qGs+p2Y+q+b+S/AjXv8m8dyLndIIA==", + "requires": { + "@remix-run/router": "1.2.1", + "react-router": "6.6.2" + } + }, + "react-youtube": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/react-youtube/-/react-youtube-10.1.0.tgz", + "integrity": "sha512-ZfGtcVpk0SSZtWCSTYOQKhfx5/1cfyEW1JN/mugGNfAxT3rmVJeMbGpA9+e78yG21ls5nc/5uZJETE3cm3knBg==", + "requires": { + "fast-deep-equal": "3.1.3", + "prop-types": "15.8.1", + "youtube-player": "5.5.2" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "rollup": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.10.0.tgz", + "integrity": "sha512-JmRYz44NjC1MjVF2VKxc0M1a97vn+cDxeqWmnwyAF4FvpjK8YFdHpaqvQB+3IxCvX05vJxKZkoMDU8TShhmJVA==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.57.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.57.1.tgz", + "integrity": "sha512-O2+LwLS79op7GI0xZ8fqzF7X2m/m8WFfI02dHOdsK5R2ECeS5F62zrwg/relM1rjSLy7Vd/DiMNIvPrQGsA0jw==", + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "requires": { + "loose-envify": "^1.1.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "server-destroy": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/server-destroy/-/server-destroy-1.0.1.tgz", + "integrity": "sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "sister": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/sister/-/sister-3.0.2.tgz", + "integrity": "sha512-p19rtTs+NksBRKW9qn0UhZ8/TUI9BPw9lmtHny+Y3TinWlOa9jWh9xB0AtPSdmOy49NJJJSSe0Ey4C7h0TrcYA==" + }, + "source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "steno": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/steno/-/steno-0.4.4.tgz", + "integrity": "sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.3" + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", + "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vite": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.0.4.tgz", + "integrity": "sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==", + "dev": true, + "requires": { + "esbuild": "^0.16.3", + "fsevents": "~2.3.2", + "postcss": "^8.4.20", + "resolve": "^1.22.1", + "rollup": "^3.7.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "yargs": { + "version": "17.6.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", + "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + }, + "youtube-player": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/youtube-player/-/youtube-player-5.5.2.tgz", + "integrity": "sha512-ZGtsemSpXnDky2AUYWgxjaopgB+shFHgXVpiJFeNB5nWEugpW1KWYDaHKuLqh2b67r24GtP6HoSW5swvf0fFIQ==", + "requires": { + "debug": "^2.6.6", + "load-script": "^1.0.0", + "sister": "^3.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..92c7e5e --- /dev/null +++ b/package.json @@ -0,0 +1,33 @@ +{ + "name": "toyproject-youtube-clone", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview", + "db": "json-server --watch ./src/data/db.json" + }, + "dependencies": { + "axios": "^1.2.2", + "dayjs": "^1.11.7", + "dotenv": "^16.0.3", + "moment": "^2.29.4", + "moment-duration-format": "^2.3.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "react-icons": "^4.7.1", + "react-responsive": "^9.0.2", + "react-router-dom": "^6.6.2", + "react-youtube": "^10.1.0", + "sass": "^1.57.1" + }, + "devDependencies": { + "@types/react": "^18.0.26", + "@types/react-dom": "^18.0.9", + "@vitejs/plugin-react": "^3.0.0", + "json-server": "^0.17.1", + "vite": "^4.0.0" + } +} diff --git a/public/_redirects b/public/_redirects new file mode 100644 index 0000000..f824337 --- /dev/null +++ b/public/_redirects @@ -0,0 +1 @@ +/* /index.html 200 \ No newline at end of file diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..27c89e93ade653d3aa43a36301d7aed476008eb9 GIT binary patch literal 4440 zcmeHK_ghn0w+^9~7z|OV0R+ZGqz4!h0qKPO7%78>12u8sI5(q^R z5J5zSB1*7yld@ut^Mw^_gN>C(hUMN%d{VZi)ezaihuDCW--uE`Z`!;?QAt@vRSl!Ap}AE{ zTW1>>V7PU5Ku3?jCzco)j-{UqAnVz`gr| z_6LWA9f+Vt9*T;NjXNBlKs$1jek}3$iKLS$r_+8<&&XtEo%;;@8snUXe}$8^!c(F-Dd*dpO0kh;~wg(29I|(;uCoO?-&R?-Ume=w{yg1OE4*g-=-*^r z9nAm(weg0KRjFaav-kIMb=lfY-u`B4hnCA}adNE~+L(PgwWK~Z7W}KsXS7fo`3%ulE z-DVr3MMq6Op7RF^ende&kLArKRVZivDraFQooQkxUnjDO-CLoU;x}KC_IOtZ6`|ub zr16VMAdb^-sbKUt=^Dy-@!i%$NgO9Z-ZRi$nlpH&KWj5l>Q0xnS9~Ro<5h5$I#-@H zkZjM%M+Nj0`&#(oI7dt+TaK|%AqK@;#P!(nhj7+C9wgg&vBdf`RJ?2N>GnJ9oJzH< zg%*41mb~67939J{N60iSEAvEaI4TNSXr%ow#fM7K2JB+j$pG9ws#-?%TrneLOOs(! zCO@;Rk1=qRY2Glo@fZRfi=TQE9Ein?oXQ9r^dyk;ewWlMVjK{`csUA)N*KdN7XLzL z`^?-iW<;S=#5P=^MW)BnD7G;2*`uTnxN-mNFZ!hB1QB&zE~7$z?Pdvssl8E_Mjmo;eldjta~Xv0LofDet4$G=YR zcul4qpZIqX3A21G%b~a z;xkZ^y*EC~5%xc5d&TLHtAFoKi0ZH0NX)XXRK<9ch8#1csTb^g%f8<#K#BHlO) zZ7V>T0&4+{;o8gAKjj?1cKkF-4IqVG*m8SOfJ9t7dA@%qK*kA2a{E;v!)mX~tP)_t zziqLbg(zvQe=88zK$hZ_@^b7ek*fGJ<0j>}y`sQy5cJ^oLWoNzf0^x+>SNJ?4SiyO zMM6&hxBY8aBpg_FLobqDX65RiYU+b+zXuhFlsM6H zv0nsOdnBr>OLB_5HzeVy(N^LB>4|UsB$6Z>)(-?KD2P2r9!RQUYQn(Cn30p-?#m!ef6aufZ=@=4$_v*&1pS2vL-#9wG{1v~ z76c0k?GJd{jb>C<@G<~$-X-WpQlY|b5mu2eBISYAD>ow4>;}R~6^`AdA^-wI5Qw3G z{#3<8PoyjWG@?uO08c9ZS_3FptUv4}94xMLCH03>tr&9J2qU`dA+1wLjMTOhmeO4 z=!*Iv5ial3be$Zu3D6(zezi(Rg8GPv&!g+Xia(Yu2eBdt-A-(!)@g}{kWvmy>!qwW z;vhTfylbFhI7CAFTRmFN9E5R?^AYJ7z>)jSMcfKn5;vuu?^*j`pv1ztwr1x&Ai4Il z6z@Ty1c-_!tgf|joIqi@Z_ZCNdDKAO@tOIy(g=W|=CfO0xGh51P<_kBL`Wc3xN1~+ z9^{Nz$ez&!DaD>J-fk0a0c^HmNz%Xuly;l0K|6$w`b#!U;<~n-{yHx zFwg>DNq(m9i4g(T+0>x*O{KCxgg%wq-%sN9LR;Tw{O)cp4V*QamZ5Y!xe16Rf6hfm zkBx!yFPQ8;LrMg6;Ypk zoFAu|Yj)D4IeP{y4J~;1?FY6WAS8qgG)#~~L<5c}AwNB|a%cOchEJE&?P*KQK<(_k zIo-IJjjX5eMJ}(ri4d^LvnhPBmq+HMX@0^Wc4O*A@95F^`iuRNjqZZs=m84BCwn{d z(T%u^{Mxz-F5@Q335VIqe1XFpSF0frR%IF}ga)-MILv64DLT8##)ucn%O?tky@c7M z=1sFmFVALg@uI8zs(9E=?D$KO{hN4!m9VZ7#vx2fEjsobZxK%-45n;YBokKjEu%^q z2X!sG${7cDS;`$OV_ZKbpImc_Un(Q#b)z`3IlXw1W^P%hL+{c&k~0X|BBV@yt9rHtJD{qq!%c53js;*g?>t zPdo6NE>E^+zTv*fp~QZJf9NjWkrDop0tuCi$OM{HFmrXf3XT z-!7pMZugvI%kPr!2oBq%gTCRoRbSyfR+D5da(MgCmddO=Gvv3wRE0K&(?SBcib=N{ zFNOFmhY0(A_GH)GYswY9cdJPoUcVedUeVU>_}RsslB?q8Q!LQZCLiT_`F5f#>wh~x zzl4Lh@PX$x4-o(KhBlq)QoNMM>2lhSe)f<3Qx_=kY68-QT|1|&bH7^enRPs3^e;#0 ziUzBPIVT*-v8l8hQaIMVB}<*S>Y6V58&ek=DDcu2Jn}mJnJ0W|cn3G&-_F+3P4_IR zU!QD-m^H5D{+{cjr=!5~_}|7j#=lg9=6`(d=jT<6U9H-)oJ{vUOu+A3)VY3V+QSZ T&gy|TMVO0&hkdo}{!{-05ATiZ literal 0 HcmV?d00001 diff --git a/public/vite.svg b/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..25159b6 --- /dev/null +++ b/src/App.css @@ -0,0 +1,34 @@ +.App { + width: 100%; + display: grid; + grid-template-columns: auto 1fr; + grid-template-rows: 55px auto; + grid-template-areas: + "header header" + "aside main"; +} + +.App header { + grid-area: header; + width: 100%; +} + +.App aside { + grid-area: aside; + position: relative; +} + +.App .big { + width: 244px; + margin: 0; +} + +.App .small { + width: 80px; + margin: 0; +} + +.App main { + grid-area: main; + width: 100%; +} \ No newline at end of file diff --git a/src/App.jsx b/src/App.jsx new file mode 100644 index 0000000..b306ec5 --- /dev/null +++ b/src/App.jsx @@ -0,0 +1,63 @@ +// // import "./App.css"; +import Header from "./components/Header/Header"; +import NavBar from "./components/NavBar"; +import { Outlet, useLocation } from "react-router-dom"; +import { useState } from "react"; +import SubNavBar from "./components/NavBar/subNavBar"; +import { useMediaQuery } from "react-responsive"; +import { ScrollRestoration } from "react-router-dom"; +import "./App.css"; + +function App() { + const [display, setDisplay] = useState(true); + const location = useLocation(); + + let pathName = location.pathname.substring(1, 7); + + function navDisplay(display) { + setDisplay(display); + } + + const isPc = useMediaQuery({ + query: "(min-width:1024px)", + }); + + const isTablet = useMediaQuery({ + query: "(max-width:1023px)", + }); + + function displayClass() { + if (isPc) { + return display ? "big" : "small"; + } else { + return display ? "small" : "big"; + } + } + + function displayNav() { + if (isPc) { + return display ? : ; + } else { + return display ? : ; + } + } + + return ( +
+ +
+ {pathName === "detail" ? ( + + ) : ( + + )} +
+ +
+
+ ); +} + +export default App; diff --git a/src/assets/react.svg b/src/assets/react.svg new file mode 100644 index 0000000..6c87de9 --- /dev/null +++ b/src/assets/react.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/tia.png b/src/assets/tia.png new file mode 100644 index 0000000000000000000000000000000000000000..46e662a9c734d088efe5baef71fd31471cd61c2e GIT binary patch literal 151 zcmeAS@N?(olHy`uVBq!ia0vp^!a&T;!3HGfUfpH|q*#ibJVQ8upoSx*1IYLDba4#P znD};rA=d!|9%lW8&Hvu0KJd@>UhZ@<$iwEFSYoou!)Y@wn=SWP6fVJdW10P7iN_v{ yQ7&gDWqmNe{UA#G{Sy6aw{Ok&)H0lOgx9vsCdOvhpJ_mo89ZJ6T-G@yGywpEhBH(E literal 0 HcmV?d00001 diff --git a/src/components/Comments/Comments.jsx b/src/components/Comments/Comments.jsx new file mode 100644 index 0000000..2d8d2ca --- /dev/null +++ b/src/components/Comments/Comments.jsx @@ -0,0 +1,38 @@ +import React from "react"; +import styles from "./Comments.module.scss"; +import calcDate from "../../utils/CalDate"; + +const Comments = ({ item }) => { + const comment = item.snippet.topLevelComment.snippet; + + const date = calcDate(comment.publishedAt); + + const likes = comment.likeCount === 0 ? "" : comment.likeCount; + return ( +
+ {comment.authorDisplayName} +
+
+

{comment.authorDisplayName}

+ {`${date} 전`} +
+

{comment.textOriginal}

+
+ + + + {likes} + + + + 답글 +
+
+
+ ); +}; + +export default Comments; diff --git a/src/components/Comments/Comments.module.scss b/src/components/Comments/Comments.module.scss new file mode 100644 index 0000000..5efa66e --- /dev/null +++ b/src/components/Comments/Comments.module.scss @@ -0,0 +1,68 @@ +.comments { + display: flex; + margin-bottom: 16px; + img { + width: 40px; + height: 40px; + border-radius: 50%; + margin-right: 16px; + } + .commentContainer { + .authorInfo { + display: flex; + height: 20px; + align-items: center; + margin-bottom: 2px; + p { + margin: 0 6px 2px 0; + color: #0f0f0f; + font-size: 13px; + font-weight: 600; + } + span { + color: #606060; + font-size: 12px; + } + } + .description { + display: -webkit-box; + height: auto; + margin-bottom: 4px; + text-overflow: ellipsis; + overflow: hidden; + -webkit-line-clamp: 3; /* 라인수 */ + -webkit-box-orient: vertical; + word-wrap: break-word; + line-height: 150%; + } + .likeContainer { + display: flex; + align-items: center; + margin-bottom: 4px; + svg { + margin-right: 4px; + width: 24px; + height: 24px; + &:hover { + border-radius: 50%; + background-color: rgba(0, 0, 0, 0.1); + border-color: transparent; + } + } + span { + color: #606060; + font-size: 12px; + margin-right: 8px; + &:last-child { + margin-left: 12px; + padding: 8px; + &:hover { + border-radius: 50%; + background-color: rgba(0, 0, 0, 0.1); + border-color: transparent; + } + } + } + } + } +} diff --git a/src/components/Header/Header.jsx b/src/components/Header/Header.jsx new file mode 100644 index 0000000..b6ea7ec --- /dev/null +++ b/src/components/Header/Header.jsx @@ -0,0 +1,69 @@ +import React from "react"; +import styles from "./Header.module.scss"; +import { Link } from "react-router-dom"; +import HeaderInputForm from "./HeaderInputForm"; + +const Header = ({ display, navDisplay }) => { + return ( +
+
+
+ + {/* 일단 임시로 a로 선언해놨습니다. 라우터 다 작성후 Link로 변경@@ */} + + + + + + + + + + + + + +
+
+ +
+
+ + + + + + + +
+
+
+ ); +}; + +export default Header; diff --git a/src/components/Header/Header.module.scss b/src/components/Header/Header.module.scss new file mode 100644 index 0000000..7a3fbd4 --- /dev/null +++ b/src/components/Header/Header.module.scss @@ -0,0 +1,73 @@ +header { + height: 56px; + position: fixed; + top: 0; + z-index: 100; + background-color: #fff; + .container { + display: flex; + width: 100vw; + max-width: 100%; + align-items: center; + justify-content: space-between; + .start { + display: flex; + padding-left: 16px; + button { + padding: 8px; + border: none; + background: inherit; + box-shadow: none; + border-radius: 0; + overflow: visible; + cursor: pointer; + .menu { + display: block; + width: 24px; + height: 24px; + } + } + a { + display: flex; + align-items: center; + .logo { + width: 90px; + height: 20px; + padding: 18px 14px 18px 16px; + } + } + } + .center { + display: flex; + flex-direction: row; + align-items: center; + justify-content: center; + min-width: 0px; + } + .end { + margin-left: 60px; + width: 140px; + display: flex; + padding-right: 16px; + margin-right: 10px; + justify-content: space-between; + .logo { + width: 25px; + height: 25px; + margin: auto 0; + &:hover { + border-radius: 50%; + background-color: rgba(0, 0, 0, 0.1); + border-color: transparent; + } + } + button { + width: 30px; + height: 30px; + border-radius: 50%; + background-color: rgba(0, 0, 0, 0.1); + border-color: transparent; + } + } + } +} diff --git a/src/components/Header/HeaderInputForm.jsx b/src/components/Header/HeaderInputForm.jsx new file mode 100644 index 0000000..336ab52 --- /dev/null +++ b/src/components/Header/HeaderInputForm.jsx @@ -0,0 +1,93 @@ +import React, { useState } from "react"; +import styles from "./HeaderInputForm.module.scss"; +import keyboard from "../../assets/tia.png"; +import { useNavigate } from "react-router-dom"; +import { useMediaQuery } from "react-responsive"; + +const HeaderInputForm = () => { + const [keyword, setKeyword] = useState(""); + const [mobileInput, setMobileInput] = useState(false); + const navigate = useNavigate(); + + // 검색어는 keyword state에 넣어놨습니다. + const handleInput = (event) => { + setKeyword(event.target.value); + }; + + const isMobile = useMediaQuery({ + query: "(max-width:656px)", + }); + + return ( + <> +
+
+ + 키보드입력 +
+ +
+ + + +
+
+
+
+ { + setMobileInput(false); + }} + > + + + + + + + +
+
+ + ); +}; + +export default HeaderInputForm; diff --git a/src/components/Header/HeaderInputForm.module.scss b/src/components/Header/HeaderInputForm.module.scss new file mode 100644 index 0000000..a9d78c0 --- /dev/null +++ b/src/components/Header/HeaderInputForm.module.scss @@ -0,0 +1,176 @@ +.mainForm { + display: flex; + position: relative; + height: 40px; + width: 40vw; + .container { + width: 100%; + position: relative; + height: 100%; + margin-left: 32px; + box-sizing: border-box; + input { + width: 100%; + height: 100%; + padding: 0px 4px 0px 16px; + border: 1px solid #ccc; + box-sizing: border-box; + border-radius: 40px 0 0 40px; + outline: none; + } + img { + position: absolute; + top: 15px; + bottom: 0; + right: 0; + padding-right: 10px; + } + } + button { + position: relative; + width: 70px; + height: 40px; + padding: 0; + border: none; + border: 1px solid #d3d3d3; + background: inherit; + border-radius: 0; + overflow: visible; + border-radius: 0 40px 40px 0; + background-color: #f8f8f8; + box-shadow: 0 1px 0 rgb(0 0 0 / 10%); + cursor: pointer; + &:hover { + border-color: #c6c6c6; + background-color: #f0f0f0; + box-shadow: 0 1px 0 rgb(0 0 0 / 10%); + } + svg { + position: absolute; + width: 20px; + height: 20px; + top: 8px; + left: 16px; + } + } + .mic { + width: 25px; + height: 25px; + svg { + position: absolute; + width: 25px; + height: 25px; + right: -20px; + top: 8px; + &:hover { + border-radius: 50%; + background-color: rgba(0, 0, 0, 0.1); + border-color: transparent; + } + } + } +} + +.subForm { + display: none; + height: 56px; + .container { + svg { + cursor: pointer; + width: 25px; + height: 25px; + &:first-child { + margin-right: 5px; + } + &:last-child { + margin-left: 5px; + } + } + display: flex; + align-items: center; + // justify-content: space-between; + justify-content: center; + height: 100%; + position: relative; + z-index: 300; + width: 100vw; + background-color: #fff; + input { + width: 60%; + height: 40px; + padding: 0px 4px 0px 16px; + border: 1px solid #ccc; + box-sizing: border-box; + border-radius: 40px 0 0 40px; + outline: none; + } + } + button { + position: relative; + width: 70px; + height: 40px; + padding: 0; + border: none; + border: 1px solid #d3d3d3; + background: inherit; + border-radius: 0; + overflow: visible; + border-radius: 0 40px 40px 0; + background-color: #f8f8f8; + box-shadow: 0 1px 0 rgb(0 0 0 / 10%); + cursor: pointer; + &:hover { + border-color: #c6c6c6; + background-color: #f0f0f0; + box-shadow: 0 1px 0 rgb(0 0 0 / 10%); + } + svg { + cursor: pointer; + position: absolute; + width: 20px; + height: 20px; + top: 8px; + left: 16px; + } + } +} + +@media screen and (max-width: 656px) { + form.mainForm { + position: absolute; + display: flex; + justify-content: flex-end; + div.container { + display: none; + } + button { + position: relative; + right: 25px; + width: 40px; + height: 40px; + border: none; + border-radius: 0 0 0 0; + background-color: transparent; + box-shadow: none; + &:hover { + border-radius: 50%; + background-color: rgba(0, 0, 0, 0.1); + border-color: transparent; + } + svg { + position: absolute; + top: 8px; + left: 8px; + } + } + div.mic { + display: none; + } + } +} + +@media screen and (min-width: 656px) { + form.subForm { + display: none; + } +} diff --git a/src/components/MainList/MainList.jsx b/src/components/MainList/MainList.jsx new file mode 100644 index 0000000..205ffdc --- /dev/null +++ b/src/components/MainList/MainList.jsx @@ -0,0 +1,73 @@ +import React, { useEffect, useState } from "react"; +import { useNavigate } from "react-router-dom"; +import videoData from "../../data/videosDetail.json"; +import channelData from "../../data/channel.json"; +import styles from "./MainList.module.scss"; +import calcNum from "../../utils/CalNum"; +import calcDate from "../../utils/CalDate"; +import calcDuration from "../../utils/CalDuration"; +import { FiMoreVertical } from "react-icons/fi"; + +export default function MainList({ data, i }) { + const [channel, setChannel] = useState([]); + const [videoDetail, setVideoDetail] = useState([]); + const navigate = useNavigate(); + + useEffect(() => { + async function getData() { + setChannel(channelData.items); + setVideoDetail(videoData.items[i]); + } + getData(); + }, []); + + const videoThumbnail = data?.snippet.thumbnails.high.url; + const channelThumbnail = channel[0]?.snippet.thumbnails.default.url; + + const viewCount = calcNum(videoDetail?.statistics?.viewCount); + const publishedAt = calcDate(videoDetail?.snippet?.publishedAt); + const duration = calcDuration(videoDetail?.contentDetails?.duration); + + return ( +
+
+ video thumbnail { + navigate(`/detail/${data?.id.videoId}`); + }} + > +

{duration}

+
+
+
+ channel thumbnail +
+
+
+

{ + navigate(`/detail/${data?.id.videoId}`); + }} + > + {data.snippet.title} +

+ +
+

{data.snippet.channelTitle}

+ + 조회수 {viewCount}회{" "} + {publishedAt} 전 + +
+
+
+ ); +} diff --git a/src/components/MainList/MainList.module.scss b/src/components/MainList/MainList.module.scss new file mode 100644 index 0000000..f89292c --- /dev/null +++ b/src/components/MainList/MainList.module.scss @@ -0,0 +1,85 @@ +.videoContent { + position: relative; + margin-top: 16px; + margin-bottom: 40px; + .moreIcon { + display: none; + } + &:hover { + .moreIcon { + display: block; + position: absolute; + right: 10px; + } + } + .imgContent { + width: 95%; + margin: auto; + position: relative; + .thumbnail { + aspect-ratio: 16/8.9; + object-fit: cover; + object-position: left; + border-radius: 12px; + width: 100%; + cursor: pointer; + } + .duration { + background-color: rgba(0, 0, 0, 0.7); + color: #fff; + position: absolute; + border-radius: 4px; + padding: 3px 4px; + right: 0; + bottom: 4px; + margin: 4px; + font-size: 14px; + } + } + .textContent { + display: flex; + cursor: pointer; + text-decoration: none; + margin: auto; + width: 95%; + margin-top: 10px; + .leftContent { + .channelThumbnail { + width: 36px; + border-radius: 50%; + margin-right: 12px; + margin-top: 3px; + } + } + .rightContent { + width: 90%; + .titleContent { + display: flex; + width: 90%; + .videoTitle { + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + font-size: 16px; + font-weight: bold; + cursor: pointer; + margin-top: 3px; + } + } + } + .channelTitle { + color: #606060; + margin-top: 10px; + margin-bottom: 3px; + font-size: 14px; + font-weight: 500; + } + .videoView { + color: #606060; + font-size: 14px; + font-weight: 500; + } + } +} diff --git a/src/components/NavBar/Explore/index.jsx b/src/components/NavBar/Explore/index.jsx new file mode 100644 index 0000000..aad692b --- /dev/null +++ b/src/components/NavBar/Explore/index.jsx @@ -0,0 +1,18 @@ +import React from 'react'; +import TabItem from '../Tab/TabItem'; + +const Explore = () => { + return ( +
+ + + + + + + +
+ ) +} + +export default Explore \ No newline at end of file diff --git a/src/components/NavBar/MoreYoutube/index.jsx b/src/components/NavBar/MoreYoutube/index.jsx new file mode 100644 index 0000000..a4adc88 --- /dev/null +++ b/src/components/NavBar/MoreYoutube/index.jsx @@ -0,0 +1,16 @@ +import React from 'react'; +import TabItem from '../Tab/TabItem'; +import { createStudio, youtubeMusic, youtubeKids, youtubeTV } from './svgList'; + +const MoreYoutube = () => { + return ( +
+ + + + +
+ ) +} + +export default MoreYoutube \ No newline at end of file diff --git a/src/components/NavBar/MoreYoutube/svgList.js b/src/components/NavBar/MoreYoutube/svgList.js new file mode 100644 index 0000000..fdf5dfa --- /dev/null +++ b/src/components/NavBar/MoreYoutube/svgList.js @@ -0,0 +1,24 @@ +export const youtubeTV = ` + + + ` + +export const createStudio = ` + + + + + ` + +export const youtubeMusic = ` + + + +` + +export const youtubeKids = ` + + + + +` \ No newline at end of file diff --git a/src/components/NavBar/NavBar.module.scss b/src/components/NavBar/NavBar.module.scss new file mode 100644 index 0000000..6e978c2 --- /dev/null +++ b/src/components/NavBar/NavBar.module.scss @@ -0,0 +1,39 @@ +.nav { + height: 100vh; + position: fixed; + box-sizing: border-box; + // border-right: 1px solid #333; + width: 245px; + padding: 12px; + overflow-y: auto; + top: 56px; + left: 0; + background-color: #fff; + z-index: 999; + &::-webkit-scrollbar { + display: none; + } + &:hover { + overflow-y: scroll; + &::-webkit-scrollbar { + width: 8px; + display: initial; + } + &::-webkit-scrollbar-thumb { + background-color: #8c8c8c; + border-radius: 10px; + height: 30%; + } + } + .navTitle { + height: 30px; + padding: 0 10px; + display: flex; + align-items: center; + } + .sectionLine { + background: rgba(0, 0, 0, 0.1); + height: 1px; + border: none; + } +} diff --git a/src/components/NavBar/ServiceCenter/index.jsx b/src/components/NavBar/ServiceCenter/index.jsx new file mode 100644 index 0000000..5a28651 --- /dev/null +++ b/src/components/NavBar/ServiceCenter/index.jsx @@ -0,0 +1,15 @@ +import React from 'react'; +import TabItem from '../Tab/TabItem'; + +const ServiceCenter = () => { + return ( +
+ + + + +
+ ) +} + +export default ServiceCenter \ No newline at end of file diff --git a/src/components/NavBar/SubNavBar.module.scss b/src/components/NavBar/SubNavBar.module.scss new file mode 100644 index 0000000..ce5e79c --- /dev/null +++ b/src/components/NavBar/SubNavBar.module.scss @@ -0,0 +1,37 @@ +.subNav { + height: 100vh; + position: fixed; + box-sizing: border-box; + // border-right: 1px solid #333; + width: 80px; + padding: 12px; + overflow-y: auto; + left: 0; + &::-webkit-scrollbar { + display: none; + } + + .iconContent { + text-align: center; + margin-bottom: 25px; + &:first-child { + margin-top: 15px; + } + &:hover { + background-color: #f2f2f2; + border-radius: 10px; + } + .iconImg { + padding: 0 10px; + align-items: center; + cursor: pointer; + } + .svgIcon { + width: 24px; + height: 24px; + } + .iconText { + text-align: center; + } + } +} diff --git a/src/components/NavBar/Tab/TabItem.jsx b/src/components/NavBar/Tab/TabItem.jsx new file mode 100644 index 0000000..6b4ca5c --- /dev/null +++ b/src/components/NavBar/Tab/TabItem.jsx @@ -0,0 +1,19 @@ +import React from 'react'; +import styles from './TabItem.module.scss'; + +const TabItem = ({ svgPath, title, svgYoutube }) => { + return ( +
+ {svgPath ? ( + + + + ) : ( + + )} + {title} +
+ ) +} + +export default TabItem \ No newline at end of file diff --git a/src/components/NavBar/Tab/TabItem.module.scss b/src/components/NavBar/Tab/TabItem.module.scss new file mode 100644 index 0000000..d3dba53 --- /dev/null +++ b/src/components/NavBar/Tab/TabItem.module.scss @@ -0,0 +1,20 @@ +.tab { + height: 40px; + padding: 0 10px; + display: flex; + align-items: center; + width: 195px; + cursor: pointer; + &:hover { + background-color: #f2f2f2; + border-radius: 10px; + } + svg { + width: 24px; + height: 24px; + } + .tabTitle { + padding-left: 20px; + white-space: nowrap; + } +} \ No newline at end of file diff --git a/src/components/NavBar/Video/index.jsx b/src/components/NavBar/Video/index.jsx new file mode 100644 index 0000000..7035f1a --- /dev/null +++ b/src/components/NavBar/Video/index.jsx @@ -0,0 +1,23 @@ +import React from 'react'; +import TabItem from '../Tab/TabItem'; + +const Video = () => { + return ( +
+ + + + + +
+ + + + + + +
+ ) +} + +export default Video \ No newline at end of file diff --git a/src/components/NavBar/index.jsx b/src/components/NavBar/index.jsx new file mode 100644 index 0000000..c13d1e3 --- /dev/null +++ b/src/components/NavBar/index.jsx @@ -0,0 +1,24 @@ +import React from 'react'; +import Video from './Video'; +import Explore from './Explore'; +import MoreYoutube from './MoreYoutube'; +import ServiceCenter from './ServiceCenter'; +import styles from './NavBar.module.scss'; + +const Nav = () => { + return ( +
+
+ ) +} + +export default Nav \ No newline at end of file diff --git a/src/components/NavBar/subNavBar.jsx b/src/components/NavBar/subNavBar.jsx new file mode 100644 index 0000000..5c70a94 --- /dev/null +++ b/src/components/NavBar/subNavBar.jsx @@ -0,0 +1,36 @@ +import React from "react"; +import styles from './SubNavBar.module.scss'; + +export default function SubNavBar() { + return ( +
+
+ + + +

+
+ +
+ + + +

Shorts

+
+ +
+ + + +

구독

+
+ +
+ + + +

보관함

+
+
+ ) +} \ No newline at end of file diff --git a/src/components/PlayVideoInfo/Playing.jsx b/src/components/PlayVideoInfo/Playing.jsx new file mode 100644 index 0000000..6bfc2d4 --- /dev/null +++ b/src/components/PlayVideoInfo/Playing.jsx @@ -0,0 +1,12 @@ +import React from 'react'; +import styles from './Playing.module.scss'; + +const Playing = ({ id }) => { + return ( +
+ +
+ ) +} + +export default Playing \ No newline at end of file diff --git a/src/components/PlayVideoInfo/Playing.module.scss b/src/components/PlayVideoInfo/Playing.module.scss new file mode 100644 index 0000000..b0ce1fe --- /dev/null +++ b/src/components/PlayVideoInfo/Playing.module.scss @@ -0,0 +1,14 @@ +.playing { + grid-area: video; + margin: 20px; + position: relative; + width: 100%; + padding-top: 56.25%; + .video { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + } +} diff --git a/src/components/PlayVideoInfo/VideoInfo.jsx b/src/components/PlayVideoInfo/VideoInfo.jsx new file mode 100644 index 0000000..3d022c7 --- /dev/null +++ b/src/components/PlayVideoInfo/VideoInfo.jsx @@ -0,0 +1,59 @@ +import React from 'react'; +import styles from './VideoInfo.module.scss'; +import calcNum from '../../utils/CalNum'; + +const VideoInfo = ({ video }) => { + // 날짜 계산 + const calcDate = (date) => { + return date?.slice(0, 10) + } + + const videoTags = video[0]?.snippet.tags + const videoTitle = video[0]?.snippet.title + const viewCounts = calcNum(Number(video[0]?.statistics?.viewCount)) + const videoPulished = calcDate(video[0]?.snippet?.publishedAt) + const likeCounts = calcNum(video[0]?.statistics?.likeCount) + + return ( +
+
+ {video ? ( + videoTags?.map((tag, index) => { + return ( + #{tag} + ) + }) + ) : null + } +
+

{videoTitle}

+ 조회수 {viewCounts}회 · {videoPulished} +
+
+ + + + {likeCounts} +
+
+ + + +
+
+ + 공유 +
+
+ + 오프라인 저장 +
+
+ +
+
+
+ ) +} + +export default VideoInfo \ No newline at end of file diff --git a/src/components/PlayVideoInfo/VideoInfo.module.scss b/src/components/PlayVideoInfo/VideoInfo.module.scss new file mode 100644 index 0000000..736cfe5 --- /dev/null +++ b/src/components/PlayVideoInfo/VideoInfo.module.scss @@ -0,0 +1,33 @@ +.videoInfoBox { + height: 155px; + position: relative; + border-bottom: 1px solid rgba(0, 0, 0, 0.1); + padding: 20px; + .tag { + padding: 8px 0 0; + color: #0099ff; + font-weight: 700; + } + .videoTitle { + padding: 16px 0; + font-size: 24px; + font-weight: 700; + } + .menuButtons { + padding-right: 20px; + position: absolute; + display: flex; + height: 65px; + right: 0; + gap: 20px; + align-items: center; + cursor: pointer; + span { + padding-left: 10px; + } + .flexButton { + display: flex; + align-items: center; + } + } +} diff --git a/src/components/PlayVideoInfo/VideoInfoDetail.jsx b/src/components/PlayVideoInfo/VideoInfoDetail.jsx new file mode 100644 index 0000000..aac7eac --- /dev/null +++ b/src/components/PlayVideoInfo/VideoInfoDetail.jsx @@ -0,0 +1,75 @@ +import React, { useState, useEffect } from 'react'; +import styles from './VideoInfoDetail.module.scss'; +import calcNum from '../../utils/CalNum'; +import channelInfo from '../../data/channel.json' +import axios from 'axios'; + +const VideoInfoDetail = ({ video, channelId }) => { + const [channel, setChannel] = useState([]) + + // dummy data 사용 + // useEffect(() => { + // async function getChannel() { + // setChannel(channelInfo.items) + // } + // getChannel() + // }, []) + + // 실제 api 사용 + const params = { + part: ["snippet", "statistics", "contentDetails"], + key: import.meta.env.VITE_API_KEY3, + id: channelId + } + + useEffect(() => { + try { + async function getChannel() { + const data = await axios.get("https://www.googleapis.com/youtube/v3/channels", { + params, + paramsSerializer: { + indexes: null + } + }) + if (data.status !== 200) { + throw new Error() + } + setChannel(data.data.items) + } + getChannel() + } catch (error) { + console.log(`통신 오류: ${error.response}`) + } + }, [channelId]) + + const channelTitle = channel[0]?.snippet?.title + const channelThumb = channel[0]?.snippet?.thumbnails.default.url + const channelSubscribe = calcNum(channel[0]?.statistics?.subscriberCount) + const videoDes = video[0]?.snippet?.description + + return ( +
+ { + channel ? ( +
+ {channelTitle} +
+ {channelTitle} + {channelSubscribe} +
+
+ ) : null + } + + { + video ? ( +
+ {videoDes} +
+ ) : null + } +
+ ) +} + +export default VideoInfoDetail \ No newline at end of file diff --git a/src/components/PlayVideoInfo/VideoInfoDetail.module.scss b/src/components/PlayVideoInfo/VideoInfoDetail.module.scss new file mode 100644 index 0000000..8cfcbae --- /dev/null +++ b/src/components/PlayVideoInfo/VideoInfoDetail.module.scss @@ -0,0 +1,43 @@ +.detailBox { + position: relative; + .channelInfo { + margin: 20px; + display: flex; + align-items: center; + height: 55px; + .channelProfile { + border-radius: 50%; + width: 50px; + height: 50px; + margin-right: 15px; + } + .channelDes { + display: flex; + flex-direction: column; + span { + &:first-child { + font-weight: 700; + } + } + } + } + .subBtn { + width: 100px; + height: 30px; + border-radius: 10px; + background-color: red; + border: none; + color: #fff; + font-weight: 700; + position: absolute; + right: 0; + top: 0; + margin: 20px; + } + .videoDes { + padding: 20px; + line-height: 1.4; + border-radius: 12px; + background-color: rgba(0, 0, 0, .1); + } +} diff --git a/src/components/RelatedVideos/EachRelatedVideo.jsx b/src/components/RelatedVideos/EachRelatedVideo.jsx new file mode 100644 index 0000000..5721372 --- /dev/null +++ b/src/components/RelatedVideos/EachRelatedVideo.jsx @@ -0,0 +1,114 @@ +import React, { useEffect, useState } from "react"; +import styles from "./EachRelatedVideos.module.scss"; +import { Link } from "react-router-dom"; +import calcDate from "../../utils/CalDate"; +import calcDuration from "../../utils/CalDuration"; +import calcNum from "../../utils/CalNum"; +import axios from "axios"; + +const EachRelatedVideo = ({ item, index }) => { + const [relatedVideoSearch, setRelatedVideoSearch] = useState([]); + + // 실제 api + const params = { + part: ["snippet", "contentDetails", "player", "statistics"], + id: item.id.videoId, + key: import.meta.env.VITE_API_KEY2, + }; + + useEffect(() => { + async function getInfo() { + try { + const data = await axios.get( + "https://www.googleapis.com/youtube/v3/videos", + { + params, + paramsSerializer: { + indexes: null, + }, + } + ); + if (data.status !== 200) { + throw new Error(); + } + setRelatedVideoSearch(data.data); + } catch (error) { + console.log("통신오류: ", error.response); + } + } + getInfo(); + }, []); + + // useEffect(() => { + // async function getInfo() { + // try { + // const data = await axios.get( + // "http://localhost:3000/relatedVideoSearch" + // ); + // if (data.status !== 200) { + // throw new Error(); + // } + // setRelatedVideoSearch(data.data); + // } catch (error) { + // console.log("통신오류: ", error.response); + // } + // } + // getInfo(); + // }, []); + + const video = item.snippet; + // 실제용 + const videoDuration = relatedVideoSearch?.items?.[0].contentDetails.duration; + const videoViews = relatedVideoSearch?.items?.[0].statistics.viewCount; + + // 테스트용 + // const videoDuration = + // relatedVideoSearch[index]?.data?.items[0].contentDetails.duration; + // const videoViews = + // relatedVideoSearch[index]?.data?.items[0].statistics.viewCount; + const date = calcDate(video.publishedAt); + const duration = calcDuration(videoDuration); + const views = calcNum(videoViews); + + return ( +
+ {relatedVideoSearch.length !== 0 && ( + +
+ {video.title} +
+ {duration} +
+
+ + + + + +
+
+ + + + + +
+
+
+

{video.title}

+

{video.channelTitle}

+ {`조회수 ${views}회 • ${date} 전`} +
+ + )} +
+ ); +}; + +export default EachRelatedVideo; diff --git a/src/components/RelatedVideos/EachRelatedVideos.module.scss b/src/components/RelatedVideos/EachRelatedVideos.module.scss new file mode 100644 index 0000000..e1fd779 --- /dev/null +++ b/src/components/RelatedVideos/EachRelatedVideos.module.scss @@ -0,0 +1,102 @@ +.videoCard { + &:hover { + .hoverBox { + display: block !important; + } + } + a { + display: flex; + height: 94px; + color: #333; + text-decoration: none; + margin-top: 8px; + .thumbnails { + position: relative; + width: 168px; + height: 94px; + margin-right: 8px; + img { + width: 168px; + height: 94px; + border-radius: 10px; + } + .durationBox { + display: flex; + position: absolute; + width: auto; + height: 12px; + padding: 3px 4px; + margin: 4px; + border-radius: 4px; + align-items: center; + bottom: 0; + right: 0; + background-color: rgba(0, 0, 0, 0.8); + span { + color: #ffffff; + font-size: 12px; + font-weight: 600; + } + } + .hoverBox { + position: absolute; + width: 28px; + height: 28px; + display: none; + border-radius: 5px; + background-color: rgba(0, 0, 0, 0.8); + &:nth-child(3) { + top: 5px; + right: 3px; + } + &:nth-child(4) { + top: 37px; + right: 3px; + } + svg { + display: block; + position: absolute; + width: 24px; + height: 24px; + top: 2px; + left: 2px; + } + } + } + + .description { + max-width: 200px; + h3 { + display: -webkit-box; + width: 200px; + margin: 2px 0 6px 0; + max-height: 50%; + text-overflow: ellipsis; + overflow: hidden; + -webkit-line-clamp: 2; /* 라인수 */ + -webkit-box-orient: vertical; + word-wrap: break-word; + line-height: 130%; + font-size: 14px; + font-weight: 600; + } + p, + span { + color: #606060; + font-size: 12px; + } + p { + margin-bottom: 2px; + } + } + } +} + +@media screen and (max-width: 1024px) { + .videoCard a div.description { + max-width: 600px; + h3 { + width: 100%; + } + } +} diff --git a/src/components/SearchList/SearchList.jsx b/src/components/SearchList/SearchList.jsx new file mode 100644 index 0000000..1546a63 --- /dev/null +++ b/src/components/SearchList/SearchList.jsx @@ -0,0 +1,98 @@ +import axios from "axios"; +import React, { useEffect, useState } from "react"; +import styles from "./SearchList.module.scss"; +import calcNum from "../../utils/CalNum"; +import calcDate from "../../utils/CalDate"; +import calcDuration from "../../utils/CalDuration"; +// import channelData from "../../data/channel.json"; +// import videoData from "../../data/videosDetail.json"; +import { useNavigate } from "react-router-dom"; +import { FiMoreVertical } from "react-icons/fi"; +import { HiOutlineClock } from "react-icons/hi"; +import { RiPlayList2Fill } from "react-icons/ri"; + +export default function SearchList({ data }) { + const [channel, setChannel] = useState([]); + const [video, setVideo] = useState([]); + const navigate = useNavigate(); + + useEffect(() => { + async function getChannel() { + let channelId = data?.snippet.channelId; + const params = { + part: "snippet", + id: channelId, + maxResults: 1, + key: import.meta.env.VITE_API_KEY1, + }; + try { + const channelData = await axios.get('https://www.googleapis.com/youtube/v3/channels', { params }); + setChannel(channelData.data.items); + } catch (error) { + console.log("통신오류: ", error.response); + } + } + async function getVideo() { + let videoId = data?.id.videoId; + const params = { + part: "snippet, contentDetails, statistics", + id: videoId, + maxResults: 1, + key: import.meta.env.VITE_API_KEY1, + }; + try { + const videoData = await axios.get('https://www.googleapis.com/youtube/v3/videos', { params }); + setVideo(videoData.data.items); + } catch (error) { + console.log("통신오류: ", error.response); + } + } + getChannel(); + getVideo(); + }, []); + + const videoThumbnail = data?.snippet.thumbnails.high.url; + const channelThumbnail = channel[0]?.snippet?.thumbnails.default.url; + + const viewCount = calcNum(video[0]?.statistics?.viewCount); + const publishedAt = calcDate(video[0]?.snippet?.publishedAt); + const duration = calcDuration(video[0]?.contentDetails?.duration); + + return ( +
+ +
+ + + video thumbnail { + navigate(`/detail/${data?.id.videoId}`); + }} > +

{duration}

+
+
+

{ + navigate(`/detail/${data?.id.videoId}`); + }} + > + {video[0]?.snippet.title} +

+ + 조회수 {viewCount}회 {" "} + {publishedAt} 전 + +
+ channel thumbnail + + {data?.snippet.channelTitle} + +
+

{data?.snippet.description}

+
+
+ ); +} diff --git a/src/components/SearchList/SearchList.module.scss b/src/components/SearchList/SearchList.module.scss new file mode 100644 index 0000000..1b1ace6 --- /dev/null +++ b/src/components/SearchList/SearchList.module.scss @@ -0,0 +1,94 @@ +.videoContent { + position: relative; + display: flex; + margin-top: 16px; + .moreIcon { + display: none; + position: absolute; + right: 0; + top: 7px; + } + &:hover { + .moreIcon { + display: block; + position: absolute; + right: 0; + top: 7px; + } + .imgContent { + .clockIcon { + display: block; + color: #fff; + background-color: rgba(0, 0, 0, 0.7); + padding: 1.5px; + border-radius: 4px; + position: absolute; + right: 2%; + top: 3%; + } + .playlistIcon { + display: block; + color: #fff; + background-color: rgba(0, 0, 0, 0.7); + padding: 2px; + border-radius: 4px; + position: absolute; + right: 2%; + top: 20%; + } + } + } + .imgContent { + margin-right: 16px; + position: relative; + height: 100%; + .clockIcon { + display: none; + } + .playlistIcon { + display: none; + } + .thumbnail { + max-width: 360px; + aspect-ratio: 16/8.9; + object-fit: cover; + border-radius: 12px; + cursor: pointer; + } + .duration { + background-color: #000; + color: #fff; + position: absolute; + border-radius: 4px; + padding: 3px 4px; + right: 0; + bottom: 4px; + margin: 4px; + font-size: 14px; + } + } + .textContent { + cursor: pointer; + text-decoration: none; + h3 { + line-height: 2.6rem; + font-size: 18px; + font-weight: bold; + } + span, + p { + font-size: 12px; + color: #606060; + } + .channelInfo { + padding: 12px 0; + display: flex; + align-items: center; + .channelThumbnail { + width: 24px; + border-radius: 50%; + margin-right: 8px; + } + } + } +} diff --git a/src/data/channel.json b/src/data/channel.json new file mode 100644 index 0000000..32b5709 --- /dev/null +++ b/src/data/channel.json @@ -0,0 +1,43 @@ +{ + "kind": "youtube#channelListResponse", + "etag": "GznfY1W8p4VnL0mCfnACzWFS5cA", + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + }, + "items": [ + { + "kind": "youtube#channel", + "etag": "GjGvESoSL_KQHMSzEad5mvO9tRg", + "id": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "snippet": { + "title": "카카오프렌즈 KAKAO FRIENDS", + "description": "Welcome to the official channel of KAKAO FRIENDS.\n\nKAKAO FRIENDS 공식 유튜브 채널입니다.\n\n저마다의 개성과 인간적인 매력을 지닌 아홉 친구들,\n카카오프렌즈의 즐겁고 신나는 이야기를 만나보세요🧡", + "customUrl": "@kakaofriends_official", + "publishedAt": "2017-09-20T06:17:20Z", + "thumbnails": { + "default": { + "url": "https://yt3.ggpht.com/lsYxdYiXNHl9g-rjAtAuBmdOgNX-VURn4gTwbCYoiNnyhEM9C6SI-e2RK8OTNNzx6ORb3dJJDw=s88-c-k-c0x00ffffff-no-rj", + "width": 88, + "height": 88 + }, + "medium": { + "url": "https://yt3.ggpht.com/lsYxdYiXNHl9g-rjAtAuBmdOgNX-VURn4gTwbCYoiNnyhEM9C6SI-e2RK8OTNNzx6ORb3dJJDw=s240-c-k-c0x00ffffff-no-rj", + "width": 240, + "height": 240 + }, + "high": { + "url": "https://yt3.ggpht.com/lsYxdYiXNHl9g-rjAtAuBmdOgNX-VURn4gTwbCYoiNnyhEM9C6SI-e2RK8OTNNzx6ORb3dJJDw=s800-c-k-c0x00ffffff-no-rj", + "width": 800, + "height": 800 + } + }, + "localized": { + "title": "카카오프렌즈 KAKAO FRIENDS", + "description": "Welcome to the official channel of KAKAO FRIENDS.\n\nKAKAO FRIENDS 공식 유튜브 채널입니다.\n\n저마다의 개성과 인간적인 매력을 지닌 아홉 친구들,\n카카오프렌즈의 즐겁고 신나는 이야기를 만나보세요🧡" + }, + "country": "KR" + } + } + ] +} diff --git a/src/data/comments.json b/src/data/comments.json new file mode 100644 index 0000000..e217d13 --- /dev/null +++ b/src/data/comments.json @@ -0,0 +1,651 @@ +{ + "kind": "youtube#commentThreadListResponse", + "etag": "l0d8oxyL131HR3cN1uI5VkrFS-k", + "nextPageToken": "QURTSl9pMXcxMHZua2ViZ1U2ZXZCRnpkTGFKZ2x6ZVphMEp1ZlNkZXUzaEhIN245NEpJTjBQcWhfWGc3bEtsNEo5VUk1ZUNaOHF3VDlwdw==", + "pageInfo": { + "totalResults": 20, + "resultsPerPage": 20 + }, + "items": [ + { + "kind": "youtube#commentThread", + "etag": "4NUc6SNDX0Kfq4d1gN-ig8Q1ZcM", + "id": "Ugydx2yM1ibfs7Hyx8N4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "ZOHVS6JyQlRxa5CmD3L9tSpj_JY", + "id": "Ugydx2yM1ibfs7Hyx8N4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "does anyone know what the Song starting at \u003ca href=\"https://www.youtube.com/watch?v=G1hKzCkywM8&t=22m00s\"\u003e22:00\u003c/a\u003e is?", + "textOriginal": "does anyone know what the Song starting at 22:00 is?", + "authorDisplayName": "Leo Schlattmann", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu-VhLl8DuOuhoCwoqc99mMiJSpIWXd7c2W6VYuICB8zmwo2CC9Jeuovuvv2Xu9E=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCqqY8TTXXgLSXffINaLBCbA", + "authorChannelId": { + "value": "UCqqY8TTXXgLSXffINaLBCbA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2023-01-15T15:13:41Z", + "updatedAt": "2023-01-15T15:13:41Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "4qZzzGU4THH-WjApy-ohDCqwJ2o", + "id": "UgyhFuUB5xY0f5FScKB4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "Ep9g2sIyWH3vEogHDASW6yLBarM", + "id": "UgyhFuUB5xY0f5FScKB4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Something beautiful and wonderful 🫡🏞🏔", + "textOriginal": "Something beautiful and wonderful 🫡🏞🏔", + "authorDisplayName": "Abdulaziz", + "authorProfileImageUrl": "https://yt3.ggpht.com/IaDtY1595xjB6_qATDxoeKOx136cXR5G3v1Oghtdvy-wiLLE7RTz5SBVwS6zFkjDmvVCWM86cg=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCVBD4IwajWkCm2MYjBobQWA", + "authorChannelId": { + "value": "UCVBD4IwajWkCm2MYjBobQWA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2023-01-14T17:34:30Z", + "updatedAt": "2023-01-14T17:34:30Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "BujeJmfSJtNMA3S1tJmppeyZc5k", + "id": "UgxjnOKeIef8xsiudkF4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "KqhL_kEtQwBBUhU6JWtJHyKCoIs", + "id": "UgxjnOKeIef8xsiudkF4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "nature is just unbelievable and indescribable! \u003cbr\u003eI ate some shrooms so its hard to type but i love you", + "textOriginal": "nature is just unbelievable and indescribable! \nI ate some shrooms so its hard to type but i love you", + "authorDisplayName": "mat se", + "authorProfileImageUrl": "https://yt3.ggpht.com/63dCm64zLbIvaT8SGJ80rJsTrceU5vBoL2ALVghx4FWHWO59CqC05Bq-AbflYykqkTnlwrJx-kM=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCeOBExdX_DVMn1Ulx_fopaA", + "authorChannelId": { + "value": "UCeOBExdX_DVMn1Ulx_fopaA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2023-01-13T19:22:32Z", + "updatedAt": "2023-01-13T19:22:32Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "NzCN1kYOoNySRDtSgRBv7VAcYNA", + "id": "UgyVOfTb3xOsW8Alug14AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "CAzyw2leAaMq5FBKk45I8kDoVB8", + "id": "UgyVOfTb3xOsW8Alug14AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "The scenery is beautiful!\u003cbr\u003eDo you have any that cycle scenes a lot slower?", + "textOriginal": "The scenery is beautiful!\nDo you have any that cycle scenes a lot slower?", + "authorDisplayName": "Lethargic907", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu_uSPeEM8hs08frbNKmwEtVxt5H7sXW-zooew=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCymev_-heO5zKxp4SBl2lfA", + "authorChannelId": { + "value": "UCymev_-heO5zKxp4SBl2lfA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2023-01-06T19:17:08Z", + "updatedAt": "2023-01-06T19:17:08Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "rs-baKOVJXBe-jjn0TBGb_wH-y0", + "id": "UgxVU-G7VBuoAnH2cXp4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "Kw1iRDeu-zifyH3mv0a1GwlBETo", + "id": "UgxVU-G7VBuoAnH2cXp4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "This is the world if warfare didn’t exist", + "textOriginal": "This is the world if warfare didn’t exist", + "authorDisplayName": "The best pinapple", + "authorProfileImageUrl": "https://yt3.ggpht.com/HY-LYQunWwf_SkfqkQ6agWDPMajd3VQHv3sCUymmBBx6dMF4jmIm28gyO96MQawwtnT5RWPaQQ=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCAYCrebfE4GxMLlpRYU-7hg", + "authorChannelId": { + "value": "UCAYCrebfE4GxMLlpRYU-7hg" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 1, + "publishedAt": "2023-01-06T08:20:52Z", + "updatedAt": "2023-01-06T08:20:52Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "k9OMgsq4DiQ8zjsw3TfZkvdgXhs", + "id": "UgyUk8rF8GKXYg9wwaZ4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "545dFgo7t7YRLAtdbSR0QE5c_tY", + "id": "UgyUk8rF8GKXYg9wwaZ4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Brings me to tears. God The Almighty, the Author of beauty created all the earth. Jallelujah!!", + "textOriginal": "Brings me to tears. God The Almighty, the Author of beauty created all the earth. Jallelujah!!", + "authorDisplayName": "venessa monique", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu9EaG6_4SHbs6K74OeiWPmhRg1yGCO8qx1OY0_n-w=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCPR5zmPJIDpvWcAOz9wqUZQ", + "authorChannelId": { + "value": "UCPR5zmPJIDpvWcAOz9wqUZQ" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2023-01-04T04:55:12Z", + "updatedAt": "2023-01-04T04:55:12Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "_QctFli3vZH4r605ejQWaBo55M8", + "id": "UgybMsl2tCNm5UiUcxN4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "Sh7bwKZb0RNCipLxMv7Fvh2as54", + "id": "UgybMsl2tCNm5UiUcxN4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Is this done with a drone?", + "textOriginal": "Is this done with a drone?", + "authorDisplayName": "John Kenny", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu-i5kKobewknJ9yjai-QA3yyOB5648zoxb5=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UC1EYCE9Rme5lAb0KdDk2xrQ", + "authorChannelId": { + "value": "UC1EYCE9Rme5lAb0KdDk2xrQ" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2023-01-01T10:22:30Z", + "updatedAt": "2023-01-01T10:22:30Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "NRK9QcrJwnNlc-mvDJ6yMucDKLs", + "id": "UgzcY2wj7PvVp_ajE7N4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "snZQOyCh56cEqSXpmCVDHwGPhNE", + "id": "UgzcY2wj7PvVp_ajE7N4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡............................................................................................................... BEAUTYFULL", + "textOriginal": "🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡............................................................................................................... BEAUTYFULL", + "authorDisplayName": "THE NATURE WORLD", + "authorProfileImageUrl": "https://yt3.ggpht.com/e4ITABTQz4S9lwCepGShzfjuBDvBBM2pDdEsUCAV2E_XzPQuhFZ4lmfVGTXdFuzA53sTMntPHA=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCGoCjExGPKUgIN1z0YzzOtg", + "authorChannelId": { + "value": "UCGoCjExGPKUgIN1z0YzzOtg" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-26T16:24:10Z", + "updatedAt": "2022-12-26T16:24:10Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "p0vlofNePSaugsTVuLZYTUyIsv8", + "id": "Ugy43FeLjt2YVW9uLIB4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "KdsNqg3zJbygCeaj8o2rW8Gn-Dg", + "id": "Ugy43FeLjt2YVW9uLIB4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "@PRIMAL EARTH Can i use this for a future video if you dont mind", + "textOriginal": "@PRIMAL EARTH Can i use this for a future video if you dont mind", + "authorDisplayName": "Fir3 less", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu-s78P-KiHiXW2fchehvLMkevl75hxUJHw-g0VJJg=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCz0CFVt-DgYGjBvcRWIslnA", + "authorChannelId": { + "value": "UCz0CFVt-DgYGjBvcRWIslnA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-19T15:38:06Z", + "updatedAt": "2022-12-19T15:38:35Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "YSucTu71ttR3kipn7QWlNuUirS0", + "id": "UgwV5FYrPOSFFGwaKYN4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "VHFiqRiqOEHuSmdZXmdzaSwP688", + "id": "UgwV5FYrPOSFFGwaKYN4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Thanks Emre, for sharing this video with me. I hope u success and healthiness 🤍", + "textOriginal": "Thanks Emre, for sharing this video with me. I hope u success and healthiness 🤍", + "authorDisplayName": "kavackci", + "authorProfileImageUrl": "https://yt3.ggpht.com/Ln9yx3pxqwXKwfGW_xzWw7B4dorKuX9j33tInVR9DyzNYveF4a2Wcj073fInTbr8tAGRXn7Hqg=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UC66SVMq-KBZbUhmsrpHO7lg", + "authorChannelId": { + "value": "UC66SVMq-KBZbUhmsrpHO7lg" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-16T15:58:52Z", + "updatedAt": "2022-12-16T15:58:52Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "h7xm4OUecoDkByX-xUt_JO24wlc", + "id": "UgwMavnr_hPIgpYUnSx4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "24WabmkM1DmH7NUASLEmTOIbnFg", + "id": "UgwMavnr_hPIgpYUnSx4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "\u003ca href=\"https://www.youtube.com/watch?v=G1hKzCkywM8&t=2h02m49s\"\u003e2:02:49\u003c/a\u003e what's the song?💕", + "textOriginal": "2:02:49 what's the song?💕", + "authorDisplayName": "Ethel Sotelo", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu8K7sGNKR8V8ozD8gKT7BT_CcycdZ_CZWs5VRPttLE=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UC-TJVr_4G7V7Kp7MuWn_CAg", + "authorChannelId": { + "value": "UC-TJVr_4G7V7Kp7MuWn_CAg" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-15T17:27:38Z", + "updatedAt": "2022-12-15T17:29:06Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "9B2ZRetMxDSs4E58Qt9Yr5mYohw", + "id": "UgxeeRFUKTzk7QIoFPt4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "1nm8SvvVhlnM3KHJa_ld9N6gytI", + "id": "UgxeeRFUKTzk7QIoFPt4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "I can’t believe it’s places on earth this beautiful 💔🥹🔥🔥", + "textOriginal": "I can’t believe it’s places on earth this beautiful 💔🥹🔥🔥", + "authorDisplayName": "Wonders of the skies🌅", + "authorProfileImageUrl": "https://yt3.ggpht.com/fbTHK9BvAYZTzkkHUsBhBkFxbHKarDLEnUN92ZJAJIggbKQHdZzSHVRh-g2jOlxSABQ21fD0Qds=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCHhzaWVhsTAXxuVCMTZEkiQ", + "authorChannelId": { + "value": "UCHhzaWVhsTAXxuVCMTZEkiQ" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-14T23:51:26Z", + "updatedAt": "2022-12-14T23:51:26Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "Yk4cV6DaiqLS1i_3I_BGkgh80GU", + "id": "UgwAM1xmmyfu15Gl3054AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "UbE-jENtSKUf1vdEQ-ftmlLKOyM", + "id": "UgwAM1xmmyfu15Gl3054AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "nice", + "textOriginal": "nice", + "authorDisplayName": "Nature view through-camera", + "authorProfileImageUrl": "https://yt3.ggpht.com/RUzV5DzsPset155Z43xH29gZ--FnCQeVocRw_yS9A2E56t5SPD-xb3STcq4TI_VDpFUJy7omCw=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCOjNapoFvNxK21IKB0fDIkA", + "authorChannelId": { + "value": "UCOjNapoFvNxK21IKB0fDIkA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-13T07:34:54Z", + "updatedAt": "2022-12-13T07:34:54Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "SGT1R38bmbOVTMsg0erkg4YdzuM", + "id": "Ugwt0dxqnnTF9jez7Bh4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "HhpfY9HrOUWQ9SRgwfJOv9kd6uI", + "id": "Ugwt0dxqnnTF9jez7Bh4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Amazing footage", + "textOriginal": "Amazing footage", + "authorDisplayName": "The Source", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu9P9f6UuUfZ8-K4DhjbQRhvUmcYgVMHc0XdoqGIEw=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCEaR5gKrioOF-IoX4BHKbmw", + "authorChannelId": { + "value": "UCEaR5gKrioOF-IoX4BHKbmw" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-11T14:07:21Z", + "updatedAt": "2022-12-11T14:07:21Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "MXCHEt6csu2Y2Wh2Bx-IlCUimWA", + "id": "Ugw4RzVxPVLW-GRGEcB4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "dDEdMgLyzOUiXq_tXj7vf7tNnXE", + "id": "Ugw4RzVxPVLW-GRGEcB4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Amazing trips with beautiful nature", + "textOriginal": "Amazing trips with beautiful nature", + "authorDisplayName": "Deep Focus Music", + "authorProfileImageUrl": "https://yt3.ggpht.com/XzoQJ5XHRgeFecmRUN9ugQxOKSOHC8HfJDUCmjL8zxjXm3LYwLknPNwFDrrtk4-84miygVCpyw=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCPYDSCY4_jNQQpPNvp_EGLA", + "authorChannelId": { + "value": "UCPYDSCY4_jNQQpPNvp_EGLA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-05T02:41:30Z", + "updatedAt": "2022-12-05T02:41:30Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "P0DemfvRJZwoWMadJ8gMJoBC8JM", + "id": "Ugyd0yZdRm2Sjsihw-14AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "B0n3wZi9qR8LQsUSer41L8Ux3so", + "id": "Ugyd0yZdRm2Sjsihw-14AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Очень красиво, но на мой вкус слишком часто меняются пейзажи.", + "textOriginal": "Очень красиво, но на мой вкус слишком часто меняются пейзажи.", + "authorDisplayName": "Дороги в стране", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu-9E7L9hs2oC_6O3wKxoktlrD_5g-WsWV7PSrbID2h7x5jQJQdKAYiilyHBpG6OAQ=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCTpZxxXxuOdiXOgd1CP9elQ", + "authorChannelId": { + "value": "UCTpZxxXxuOdiXOgd1CP9elQ" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-03T03:43:44Z", + "updatedAt": "2022-12-03T03:43:44Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "wVx-8MJhd8BTUzwSxUJuq3YVUYw", + "id": "Ugw3kADsTggTDfAG2Eh4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "LU2HbYDp3PI3nVZIQREBby5OJ7c", + "id": "Ugw3kADsTggTDfAG2Eh4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "I love how realistic it is ❤️❤️❤️❤️💙❤️💝🖤🍦 and nice sounding", + "textOriginal": "I love how realistic it is ❤️❤️❤️❤️💙❤️💝🖤🍦 and nice sounding", + "authorDisplayName": "Tay-Tayva Lalap", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu_692aIcQ54Poh2dDKin-lTm_yFK1uPCsF8q9VZ=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCQyYdn4QuSAtbhs4rTCneCA", + "authorChannelId": { + "value": "UCQyYdn4QuSAtbhs4rTCneCA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-01T02:18:55Z", + "updatedAt": "2022-12-01T02:18:55Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "gs4wOTB2f7-6JxfXm2gqWH-yHXQ", + "id": "UgynnHo7JbUmaTxLQtx4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "C3DW6Zh-kSfRmq5tQSxGsu9nwho", + "id": "UgynnHo7JbUmaTxLQtx4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "This is not truly 4k footage, you just upscale FHD video, that's sad...", + "textOriginal": "This is not truly 4k footage, you just upscale FHD video, that's sad...", + "authorDisplayName": "C.V.", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu_yrVwwUIGKs6c_ySd6Yu7XSf1PVqcU__k0ENko=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCmNi20VvjRBfTKeoNS_AGcg", + "authorChannelId": { + "value": "UCmNi20VvjRBfTKeoNS_AGcg" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-11-21T18:16:26Z", + "updatedAt": "2022-11-21T18:16:26Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "Gs9gClGLK9YqKpSfEU3jysjHdEs", + "id": "UgzQ4nLsK2KCWxX4kyd4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "Mmz69d5PlrUpN7JTB4pqWqRdhe4", + "id": "UgzQ4nLsK2KCWxX4kyd4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Very nice to watch\u003cbr\u003eWhich place is this?", + "textOriginal": "Very nice to watch\nWhich place is this?", + "authorDisplayName": "Raji CB", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu-vXMVUAg8UDr0pJ0cKH4Z0MI8020hwhsxamQ=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UC3SI6cBejawgGYPP3xqopMw", + "authorChannelId": { + "value": "UC3SI6cBejawgGYPP3xqopMw" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-11-18T03:33:00Z", + "updatedAt": "2022-11-18T03:33:00Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "Y6dlbS8nqJ2BRlf7jXZ6kwM5d5k", + "id": "UgwCDPhI-n2FFIY92bN4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "pBQGjFPh4quu4Y-UcyyicOexnig", + "id": "UgwCDPhI-n2FFIY92bN4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Incredible!", + "textOriginal": "Incredible!", + "authorDisplayName": "Harry Kang’s Photography and Vlogs", + "authorProfileImageUrl": "https://yt3.ggpht.com/Q_o1UFmqBD-3ABCKjii7fF5gZ3WpPD1Qvg79yLJl9BY4PLoSiS2iD1KTvQfy67zi9sxHYnD4Iw=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCjrnbv3fkPGI1tX_QTGrufw", + "authorChannelId": { + "value": "UCjrnbv3fkPGI1tX_QTGrufw" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-11-16T06:39:06Z", + "updatedAt": "2022-11-16T06:39:06Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + } + ] +} diff --git a/src/data/db.json b/src/data/db.json new file mode 100644 index 0000000..ab61812 --- /dev/null +++ b/src/data/db.json @@ -0,0 +1,2698 @@ +{ + "video": { + "kind": "youtube#videoListResponse", + "etag": "j3_sWA3i4-pynd4Gfa1pwaSNYkc", + "items": [ + { + "kind": "youtube#video", + "etag": "X_QzO1iO9C9mTZLq-MGyFdypI20", + "id": "G1hKzCkywM8", + "snippet": { + "publishedAt": "2021-05-22T06:00:05Z", + "channelId": "UCb57aRZr3KsykS_wNsD5Ptw", + "title": "6 Hour 4K Beautiful places Aerial Views", + "description": "Please enjoy 6Hour aerial journey of beautiful places on the Earth.\nThis tour will take you around the world's great nature. \nFrom Islands,Forests, Mountains, Rivers and Waterfalls please enjoy no loop movie of scenic views.\n\nIf you like our video, please subscribe to our channel\nhttp://www.youtube.com/channel/UCb57aRZr3KsykS_wNsD5Ptw?sub_confirmation=1\n\nBeautiful Nature of the Earth\nhttps://www.youtube.com/playlist?list=PL91Hm3FcmpU-CK1lZrfJR_6F8LukIPpxQ\n\nPrimal Earth Sounds\nhttps://www.youtube.com/playlist?list=PL91Hm3FcmpU_vKfeTgE4Rf8zj4mxSme-y", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "PRIMAL EARTH ", + "tags": [ + "Primal Earth Sounds", + "4k", + "4k nature", + "relaxation music" + ], + "categoryId": "19", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "6 Hour 4K Beautiful places Aerial Views", + "description": "Please enjoy 6Hour aerial journey of beautiful places on the Earth.\nThis tour will take you around the world's great nature. \nFrom Islands,Forests, Mountains, Rivers and Waterfalls please enjoy no loop movie of scenic views.\n\nIf you like our video, please subscribe to our channel\nhttp://www.youtube.com/channel/UCb57aRZr3KsykS_wNsD5Ptw?sub_confirmation=1\n\nBeautiful Nature of the Earth\nhttps://www.youtube.com/playlist?list=PL91Hm3FcmpU-CK1lZrfJR_6F8LukIPpxQ\n\nPrimal Earth Sounds\nhttps://www.youtube.com/playlist?list=PL91Hm3FcmpU_vKfeTgE4Rf8zj4mxSme-y" + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT6H10M13S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "2040184", + "likeCount": "11869", + "favoriteCount": "0", + "commentCount": "298" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "channel": { + "kind": "youtube#channelListResponse", + "etag": "J-ApOy7Icy4XT7RN09QkEiQXQHk", + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 5 + }, + "items": [ + { + "kind": "youtube#channel", + "etag": "4nau8nuWPY0K1XA7xvMWJuqMunY", + "id": "UCb57aRZr3KsykS_wNsD5Ptw", + "snippet": { + "title": "PRIMAL EARTH ", + "description": "Our mother planet \"Earth\" and the vibrancy of life on it. Feel the breath of \"Earth\" as you tour the great nature around the world. Beautiful and spectacular scenery and animals are still waiting for you!\n", + "customUrl": "@primalearth8951", + "publishedAt": "2019-11-20T10:19:22.499623Z", + "thumbnails": { + "default": { + "url": "https://yt3.ggpht.com/EjqONiq-nKhXEhz_4FGQWeKAHHXHTWVjIxRYou8_PziBFNW7Fq5-NN-dMIHbG3_MFNbjYs76pg=s88-c-k-c0x00ffffff-no-rj", + "width": 88, + "height": 88 + }, + "medium": { + "url": "https://yt3.ggpht.com/EjqONiq-nKhXEhz_4FGQWeKAHHXHTWVjIxRYou8_PziBFNW7Fq5-NN-dMIHbG3_MFNbjYs76pg=s240-c-k-c0x00ffffff-no-rj", + "width": 240, + "height": 240 + }, + "high": { + "url": "https://yt3.ggpht.com/EjqONiq-nKhXEhz_4FGQWeKAHHXHTWVjIxRYou8_PziBFNW7Fq5-NN-dMIHbG3_MFNbjYs76pg=s800-c-k-c0x00ffffff-no-rj", + "width": 800, + "height": 800 + } + }, + "defaultLanguage": "en", + "localized": { + "title": "PRIMAL EARTH ", + "description": "Our mother planet \"Earth\" and the vibrancy of life on it. Feel the breath of \"Earth\" as you tour the great nature around the world. Beautiful and spectacular scenery and animals are still waiting for you!\n" + }, + "country": "JP" + }, + "contentDetails": { + "relatedPlaylists": { + "likes": "", + "uploads": "UUb57aRZr3KsykS_wNsD5Ptw" + } + }, + "statistics": { + "viewCount": "29352705", + "subscriberCount": "77400", + "hiddenSubscriberCount": false, + "videoCount": "106" + } + } + ] + }, + "comments": { + "kind": "youtube#commentThreadListResponse", + "etag": "l0d8oxyL131HR3cN1uI5VkrFS-k", + "nextPageToken": "QURTSl9pMXcxMHZua2ViZ1U2ZXZCRnpkTGFKZ2x6ZVphMEp1ZlNkZXUzaEhIN245NEpJTjBQcWhfWGc3bEtsNEo5VUk1ZUNaOHF3VDlwdw==", + "pageInfo": { + "totalResults": 20, + "resultsPerPage": 20 + }, + "items": [ + { + "kind": "youtube#commentThread", + "etag": "4NUc6SNDX0Kfq4d1gN-ig8Q1ZcM", + "id": "Ugydx2yM1ibfs7Hyx8N4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "ZOHVS6JyQlRxa5CmD3L9tSpj_JY", + "id": "Ugydx2yM1ibfs7Hyx8N4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "does anyone know what the Song starting at \u003ca href=\"https://www.youtube.com/watch?v=G1hKzCkywM8&t=22m00s\"\u003e22:00\u003c/a\u003e is?", + "textOriginal": "does anyone know what the Song starting at 22:00 is?", + "authorDisplayName": "Leo Schlattmann", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu-VhLl8DuOuhoCwoqc99mMiJSpIWXd7c2W6VYuICB8zmwo2CC9Jeuovuvv2Xu9E=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCqqY8TTXXgLSXffINaLBCbA", + "authorChannelId": { + "value": "UCqqY8TTXXgLSXffINaLBCbA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2023-01-15T15:13:41Z", + "updatedAt": "2023-01-15T15:13:41Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "4qZzzGU4THH-WjApy-ohDCqwJ2o", + "id": "UgyhFuUB5xY0f5FScKB4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "Ep9g2sIyWH3vEogHDASW6yLBarM", + "id": "UgyhFuUB5xY0f5FScKB4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Something beautiful and wonderful 🫡🏞🏔", + "textOriginal": "Something beautiful and wonderful 🫡🏞🏔", + "authorDisplayName": "Abdulaziz", + "authorProfileImageUrl": "https://yt3.ggpht.com/IaDtY1595xjB6_qATDxoeKOx136cXR5G3v1Oghtdvy-wiLLE7RTz5SBVwS6zFkjDmvVCWM86cg=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCVBD4IwajWkCm2MYjBobQWA", + "authorChannelId": { + "value": "UCVBD4IwajWkCm2MYjBobQWA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2023-01-14T17:34:30Z", + "updatedAt": "2023-01-14T17:34:30Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "BujeJmfSJtNMA3S1tJmppeyZc5k", + "id": "UgxjnOKeIef8xsiudkF4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "KqhL_kEtQwBBUhU6JWtJHyKCoIs", + "id": "UgxjnOKeIef8xsiudkF4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "nature is just unbelievable and indescribable! \u003cbr\u003eI ate some shrooms so its hard to type but i love you", + "textOriginal": "nature is just unbelievable and indescribable! \nI ate some shrooms so its hard to type but i love you", + "authorDisplayName": "mat se", + "authorProfileImageUrl": "https://yt3.ggpht.com/63dCm64zLbIvaT8SGJ80rJsTrceU5vBoL2ALVghx4FWHWO59CqC05Bq-AbflYykqkTnlwrJx-kM=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCeOBExdX_DVMn1Ulx_fopaA", + "authorChannelId": { + "value": "UCeOBExdX_DVMn1Ulx_fopaA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2023-01-13T19:22:32Z", + "updatedAt": "2023-01-13T19:22:32Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "NzCN1kYOoNySRDtSgRBv7VAcYNA", + "id": "UgyVOfTb3xOsW8Alug14AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "CAzyw2leAaMq5FBKk45I8kDoVB8", + "id": "UgyVOfTb3xOsW8Alug14AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "The scenery is beautiful!\u003cbr\u003eDo you have any that cycle scenes a lot slower?", + "textOriginal": "The scenery is beautiful!\nDo you have any that cycle scenes a lot slower?", + "authorDisplayName": "Lethargic907", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu_uSPeEM8hs08frbNKmwEtVxt5H7sXW-zooew=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCymev_-heO5zKxp4SBl2lfA", + "authorChannelId": { + "value": "UCymev_-heO5zKxp4SBl2lfA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2023-01-06T19:17:08Z", + "updatedAt": "2023-01-06T19:17:08Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "rs-baKOVJXBe-jjn0TBGb_wH-y0", + "id": "UgxVU-G7VBuoAnH2cXp4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "Kw1iRDeu-zifyH3mv0a1GwlBETo", + "id": "UgxVU-G7VBuoAnH2cXp4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "This is the world if warfare didn’t exist", + "textOriginal": "This is the world if warfare didn’t exist", + "authorDisplayName": "The best pinapple", + "authorProfileImageUrl": "https://yt3.ggpht.com/HY-LYQunWwf_SkfqkQ6agWDPMajd3VQHv3sCUymmBBx6dMF4jmIm28gyO96MQawwtnT5RWPaQQ=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCAYCrebfE4GxMLlpRYU-7hg", + "authorChannelId": { + "value": "UCAYCrebfE4GxMLlpRYU-7hg" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 1, + "publishedAt": "2023-01-06T08:20:52Z", + "updatedAt": "2023-01-06T08:20:52Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "k9OMgsq4DiQ8zjsw3TfZkvdgXhs", + "id": "UgyUk8rF8GKXYg9wwaZ4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "545dFgo7t7YRLAtdbSR0QE5c_tY", + "id": "UgyUk8rF8GKXYg9wwaZ4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Brings me to tears. God The Almighty, the Author of beauty created all the earth. Jallelujah!!", + "textOriginal": "Brings me to tears. God The Almighty, the Author of beauty created all the earth. Jallelujah!!", + "authorDisplayName": "venessa monique", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu9EaG6_4SHbs6K74OeiWPmhRg1yGCO8qx1OY0_n-w=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCPR5zmPJIDpvWcAOz9wqUZQ", + "authorChannelId": { + "value": "UCPR5zmPJIDpvWcAOz9wqUZQ" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2023-01-04T04:55:12Z", + "updatedAt": "2023-01-04T04:55:12Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "_QctFli3vZH4r605ejQWaBo55M8", + "id": "UgybMsl2tCNm5UiUcxN4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "Sh7bwKZb0RNCipLxMv7Fvh2as54", + "id": "UgybMsl2tCNm5UiUcxN4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Is this done with a drone?", + "textOriginal": "Is this done with a drone?", + "authorDisplayName": "John Kenny", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu-i5kKobewknJ9yjai-QA3yyOB5648zoxb5=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UC1EYCE9Rme5lAb0KdDk2xrQ", + "authorChannelId": { + "value": "UC1EYCE9Rme5lAb0KdDk2xrQ" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2023-01-01T10:22:30Z", + "updatedAt": "2023-01-01T10:22:30Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "NRK9QcrJwnNlc-mvDJ6yMucDKLs", + "id": "UgzcY2wj7PvVp_ajE7N4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "snZQOyCh56cEqSXpmCVDHwGPhNE", + "id": "UgzcY2wj7PvVp_ajE7N4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡............................................................................................................... BEAUTYFULL", + "textOriginal": "🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡🧡............................................................................................................... BEAUTYFULL", + "authorDisplayName": "THE NATURE WORLD", + "authorProfileImageUrl": "https://yt3.ggpht.com/e4ITABTQz4S9lwCepGShzfjuBDvBBM2pDdEsUCAV2E_XzPQuhFZ4lmfVGTXdFuzA53sTMntPHA=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCGoCjExGPKUgIN1z0YzzOtg", + "authorChannelId": { + "value": "UCGoCjExGPKUgIN1z0YzzOtg" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-26T16:24:10Z", + "updatedAt": "2022-12-26T16:24:10Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "p0vlofNePSaugsTVuLZYTUyIsv8", + "id": "Ugy43FeLjt2YVW9uLIB4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "KdsNqg3zJbygCeaj8o2rW8Gn-Dg", + "id": "Ugy43FeLjt2YVW9uLIB4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "@PRIMAL EARTH Can i use this for a future video if you dont mind", + "textOriginal": "@PRIMAL EARTH Can i use this for a future video if you dont mind", + "authorDisplayName": "Fir3 less", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu-s78P-KiHiXW2fchehvLMkevl75hxUJHw-g0VJJg=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCz0CFVt-DgYGjBvcRWIslnA", + "authorChannelId": { + "value": "UCz0CFVt-DgYGjBvcRWIslnA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-19T15:38:06Z", + "updatedAt": "2022-12-19T15:38:35Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "YSucTu71ttR3kipn7QWlNuUirS0", + "id": "UgwV5FYrPOSFFGwaKYN4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "VHFiqRiqOEHuSmdZXmdzaSwP688", + "id": "UgwV5FYrPOSFFGwaKYN4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Thanks Emre, for sharing this video with me. I hope u success and healthiness 🤍", + "textOriginal": "Thanks Emre, for sharing this video with me. I hope u success and healthiness 🤍", + "authorDisplayName": "kavackci", + "authorProfileImageUrl": "https://yt3.ggpht.com/Ln9yx3pxqwXKwfGW_xzWw7B4dorKuX9j33tInVR9DyzNYveF4a2Wcj073fInTbr8tAGRXn7Hqg=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UC66SVMq-KBZbUhmsrpHO7lg", + "authorChannelId": { + "value": "UC66SVMq-KBZbUhmsrpHO7lg" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-16T15:58:52Z", + "updatedAt": "2022-12-16T15:58:52Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "h7xm4OUecoDkByX-xUt_JO24wlc", + "id": "UgwMavnr_hPIgpYUnSx4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "24WabmkM1DmH7NUASLEmTOIbnFg", + "id": "UgwMavnr_hPIgpYUnSx4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "\u003ca href=\"https://www.youtube.com/watch?v=G1hKzCkywM8&t=2h02m49s\"\u003e2:02:49\u003c/a\u003e what's the song?💕", + "textOriginal": "2:02:49 what's the song?💕", + "authorDisplayName": "Ethel Sotelo", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu8K7sGNKR8V8ozD8gKT7BT_CcycdZ_CZWs5VRPttLE=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UC-TJVr_4G7V7Kp7MuWn_CAg", + "authorChannelId": { + "value": "UC-TJVr_4G7V7Kp7MuWn_CAg" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-15T17:27:38Z", + "updatedAt": "2022-12-15T17:29:06Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "9B2ZRetMxDSs4E58Qt9Yr5mYohw", + "id": "UgxeeRFUKTzk7QIoFPt4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "1nm8SvvVhlnM3KHJa_ld9N6gytI", + "id": "UgxeeRFUKTzk7QIoFPt4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "I can’t believe it’s places on earth this beautiful 💔🥹🔥🔥", + "textOriginal": "I can’t believe it’s places on earth this beautiful 💔🥹🔥🔥", + "authorDisplayName": "Wonders of the skies🌅", + "authorProfileImageUrl": "https://yt3.ggpht.com/fbTHK9BvAYZTzkkHUsBhBkFxbHKarDLEnUN92ZJAJIggbKQHdZzSHVRh-g2jOlxSABQ21fD0Qds=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCHhzaWVhsTAXxuVCMTZEkiQ", + "authorChannelId": { + "value": "UCHhzaWVhsTAXxuVCMTZEkiQ" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-14T23:51:26Z", + "updatedAt": "2022-12-14T23:51:26Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "Yk4cV6DaiqLS1i_3I_BGkgh80GU", + "id": "UgwAM1xmmyfu15Gl3054AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "UbE-jENtSKUf1vdEQ-ftmlLKOyM", + "id": "UgwAM1xmmyfu15Gl3054AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "nice", + "textOriginal": "nice", + "authorDisplayName": "Nature view through-camera", + "authorProfileImageUrl": "https://yt3.ggpht.com/RUzV5DzsPset155Z43xH29gZ--FnCQeVocRw_yS9A2E56t5SPD-xb3STcq4TI_VDpFUJy7omCw=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCOjNapoFvNxK21IKB0fDIkA", + "authorChannelId": { + "value": "UCOjNapoFvNxK21IKB0fDIkA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-13T07:34:54Z", + "updatedAt": "2022-12-13T07:34:54Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "SGT1R38bmbOVTMsg0erkg4YdzuM", + "id": "Ugwt0dxqnnTF9jez7Bh4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "HhpfY9HrOUWQ9SRgwfJOv9kd6uI", + "id": "Ugwt0dxqnnTF9jez7Bh4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Amazing footage", + "textOriginal": "Amazing footage", + "authorDisplayName": "The Source", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu9P9f6UuUfZ8-K4DhjbQRhvUmcYgVMHc0XdoqGIEw=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCEaR5gKrioOF-IoX4BHKbmw", + "authorChannelId": { + "value": "UCEaR5gKrioOF-IoX4BHKbmw" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-11T14:07:21Z", + "updatedAt": "2022-12-11T14:07:21Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "MXCHEt6csu2Y2Wh2Bx-IlCUimWA", + "id": "Ugw4RzVxPVLW-GRGEcB4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "dDEdMgLyzOUiXq_tXj7vf7tNnXE", + "id": "Ugw4RzVxPVLW-GRGEcB4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Amazing trips with beautiful nature", + "textOriginal": "Amazing trips with beautiful nature", + "authorDisplayName": "Deep Focus Music", + "authorProfileImageUrl": "https://yt3.ggpht.com/XzoQJ5XHRgeFecmRUN9ugQxOKSOHC8HfJDUCmjL8zxjXm3LYwLknPNwFDrrtk4-84miygVCpyw=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCPYDSCY4_jNQQpPNvp_EGLA", + "authorChannelId": { + "value": "UCPYDSCY4_jNQQpPNvp_EGLA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-05T02:41:30Z", + "updatedAt": "2022-12-05T02:41:30Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "P0DemfvRJZwoWMadJ8gMJoBC8JM", + "id": "Ugyd0yZdRm2Sjsihw-14AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "B0n3wZi9qR8LQsUSer41L8Ux3so", + "id": "Ugyd0yZdRm2Sjsihw-14AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Очень красиво, но на мой вкус слишком часто меняются пейзажи.", + "textOriginal": "Очень красиво, но на мой вкус слишком часто меняются пейзажи.", + "authorDisplayName": "Дороги в стране", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu-9E7L9hs2oC_6O3wKxoktlrD_5g-WsWV7PSrbID2h7x5jQJQdKAYiilyHBpG6OAQ=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCTpZxxXxuOdiXOgd1CP9elQ", + "authorChannelId": { + "value": "UCTpZxxXxuOdiXOgd1CP9elQ" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-03T03:43:44Z", + "updatedAt": "2022-12-03T03:43:44Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "wVx-8MJhd8BTUzwSxUJuq3YVUYw", + "id": "Ugw3kADsTggTDfAG2Eh4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "LU2HbYDp3PI3nVZIQREBby5OJ7c", + "id": "Ugw3kADsTggTDfAG2Eh4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "I love how realistic it is ❤️❤️❤️❤️💙❤️💝🖤🍦 and nice sounding", + "textOriginal": "I love how realistic it is ❤️❤️❤️❤️💙❤️💝🖤🍦 and nice sounding", + "authorDisplayName": "Tay-Tayva Lalap", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu_692aIcQ54Poh2dDKin-lTm_yFK1uPCsF8q9VZ=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCQyYdn4QuSAtbhs4rTCneCA", + "authorChannelId": { + "value": "UCQyYdn4QuSAtbhs4rTCneCA" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-12-01T02:18:55Z", + "updatedAt": "2022-12-01T02:18:55Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "gs4wOTB2f7-6JxfXm2gqWH-yHXQ", + "id": "UgynnHo7JbUmaTxLQtx4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "C3DW6Zh-kSfRmq5tQSxGsu9nwho", + "id": "UgynnHo7JbUmaTxLQtx4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "This is not truly 4k footage, you just upscale FHD video, that's sad...", + "textOriginal": "This is not truly 4k footage, you just upscale FHD video, that's sad...", + "authorDisplayName": "C.V.", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu_yrVwwUIGKs6c_ySd6Yu7XSf1PVqcU__k0ENko=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCmNi20VvjRBfTKeoNS_AGcg", + "authorChannelId": { + "value": "UCmNi20VvjRBfTKeoNS_AGcg" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-11-21T18:16:26Z", + "updatedAt": "2022-11-21T18:16:26Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "Gs9gClGLK9YqKpSfEU3jysjHdEs", + "id": "UgzQ4nLsK2KCWxX4kyd4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "Mmz69d5PlrUpN7JTB4pqWqRdhe4", + "id": "UgzQ4nLsK2KCWxX4kyd4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Very nice to watch\u003cbr\u003eWhich place is this?", + "textOriginal": "Very nice to watch\nWhich place is this?", + "authorDisplayName": "Raji CB", + "authorProfileImageUrl": "https://yt3.ggpht.com/ytc/AMLnZu-vXMVUAg8UDr0pJ0cKH4Z0MI8020hwhsxamQ=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UC3SI6cBejawgGYPP3xqopMw", + "authorChannelId": { + "value": "UC3SI6cBejawgGYPP3xqopMw" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-11-18T03:33:00Z", + "updatedAt": "2022-11-18T03:33:00Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + }, + { + "kind": "youtube#commentThread", + "etag": "Y6dlbS8nqJ2BRlf7jXZ6kwM5d5k", + "id": "UgwCDPhI-n2FFIY92bN4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "topLevelComment": { + "kind": "youtube#comment", + "etag": "pBQGjFPh4quu4Y-UcyyicOexnig", + "id": "UgwCDPhI-n2FFIY92bN4AaABAg", + "snippet": { + "videoId": "G1hKzCkywM8", + "textDisplay": "Incredible!", + "textOriginal": "Incredible!", + "authorDisplayName": "Harry Kang’s Photography and Vlogs", + "authorProfileImageUrl": "https://yt3.ggpht.com/Q_o1UFmqBD-3ABCKjii7fF5gZ3WpPD1Qvg79yLJl9BY4PLoSiS2iD1KTvQfy67zi9sxHYnD4Iw=s48-c-k-c0x00ffffff-no-rj", + "authorChannelUrl": "http://www.youtube.com/channel/UCjrnbv3fkPGI1tX_QTGrufw", + "authorChannelId": { + "value": "UCjrnbv3fkPGI1tX_QTGrufw" + }, + "canRate": true, + "viewerRating": "none", + "likeCount": 0, + "publishedAt": "2022-11-16T06:39:06Z", + "updatedAt": "2022-11-16T06:39:06Z" + } + }, + "canReply": true, + "totalReplyCount": 0, + "isPublic": true + } + } + ] + }, + "relatedVideo": { + "kind": "youtube#searchListResponse", + "etag": "3u37-IP1K48ZWezLAbQcCjAfOtU", + "items": [ + { + "kind": "youtube#searchResult", + "etag": "5XAnlK9_KLGIZS-oOusw9CqSm-8", + "id": { + "kind": "youtube#video", + "videoId": "QSNa8U1yGrM" + }, + "snippet": { + "publishedAt": "2021-05-03T00:20:58Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "EARTH in 8K ULTRA HD - Tour Through the Planet Earth - Best Places and Animals Relaxing Music 8K TV", + "description": "Despite its name, Earth may be the only planet in our solar system that has oceans. It is the fifth-largest planet in the solar system and perhaps the only one that harbors life.\n\nThe Earth's seas and oceans, which cover 70% of its surface, are home to a large amount of life. With an average depth of 4 km, they account for 97% of the water on the planet. In addition, they feature some impressive landforms: the most extensive mountain range, the Mid-Oceanic Ridge, is deep under the sea. Four times as long as the Andes, the Rocky Mountains, and the Himalayas arranged in a row, it stretches 65,000 km across the Arctic and the Atlantic.\n\nA study carried out jointly by the Universities of Münster, Cambridge, and the Zurich Technique showed that the age of the planet is between 4,400 million and 4,510 million years. So far, five mass extinctions have been recorded on the planet. The first occurred 440 million years ago and the last 65 million years ago. Michael Rampino, an Earth science expert at New York University, argues that it takes about 30 million years for the Solar System to cross the plane of the Milky Way. The presence of the system could be one of the reasons why comets' orbits are destabilized, launching them towards the planet. To this, he adds a possibility that is little studied today: dark matter.\n\n8.7 million species, a single planet. The ecosystems that we depend on, as humans, to survive are made up of around 8.7 million plant and animal species. At least this is confirmed by a study by the University of Hawaii (United States) carried out in 2011, which is said to be the most accurate to date. Of these, we only know 1.3 million. Unfortunately, WWF warns with its Living Planet report that, since the 70s of the last century, only the world population of vertebrates has been reduced by 60% due to global warming, the destruction of ecosystems, and the crisis of biodiversity caused by human action. It is in our power to care for and protect (and even discover) all those species that make our planet an (almost) inexhaustible source of life.\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaravia\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nEARTH in 8K ULTRA HD - Tour Through the Planet Earth - Best Places and Animals Relaxing Music 8K TV (FUHD) Demo 8K ULTRA HD\n\n#8K #PLANET #EARTH", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "liveBroadcastContent": "none", + "publishTime": "2021-05-03T00:20:58Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "0lzi4doh091CHcZkfX4Hegej0XA", + "id": { + "kind": "youtube#video", + "videoId": "hlWiI4xVXKY" + }, + "snippet": { + "publishedAt": "2018-10-07T06:28:56Z", + "channelId": "UCjzHeG1KWoonmf9d5KBvSiw", + "title": "Beautiful Relaxing Music • Peaceful Piano Music & Guitar Music | Sunny Mornings by @PederBHellandMusic", + "description": "Beautiful relaxing music by Peder B. Helland. Enjoy peaceful piano music and guitar music (\"Sunny Mornings\" ) with birds singing in the background. Stream or download music from Soothing Relaxation: https://soothingrelaxation.lnk.to/listenYL\n\n💿 Track information:\nTitle: Sunny Mornings \nComposer: @PederBHellandMusic \nIndex: ★151\nAlbum: Sunny Mornings\nBuy or stream this album: https://soothingrelaxation.lnk.to/sunny-mornings\nBuy this track: https://soothingrelaxation.com/products/sunny-mornings-beautiful-relaxing-music-151\nBuy this video as an MP3 file: https://soothingrelaxation.com/products/hlWiI4xVXKY\nLicense this track: https://soothingrelaxation.com/products/sunny-mornings-license\nSheet music: https://soothingrelaxation.com/products/sunny-mornings\n\nFollow Soothing Relaxation on...\nOur website: https://soothingrelaxation.lnk.to/websiteYL\nFacebook: https://soothingrelaxation.lnk.to/FacebookYL\nInstagram: https://soothingrelaxation.lnk.to/InstagramYL\nSpotify: https://soothingrelaxation.lnk.to/listenYL/spotify\nApple Music: https://soothingrelaxation.lnk.to/listenYL/applemusic\nYouTube Music: https://soothingrelaxation.lnk.to/listenYL/youtubemusic\nAmazon Music: https://soothingrelaxation.lnk.to/listenYL/amazonmusic\nDeezer: https://soothingrelaxation.lnk.to/listenYL/deezer\n\nFollow Peder B. Helland on...\nWebsite: https://pederbhelland.lnk.to/websiteYL\nFacebook: https://pederbhelland.lnk.to/facebookYL\nInstagram: https://pederbhelland.lnk.to/instagramYL\n\nListen to more relaxing music: https://www.youtube.com/playlist?list=PLQ_PIlf6OzqL3BE0rB6clb9IzLLkkSKUF\n\nGet a free music download and stay updated with our newsletter: https://soothingrelaxation.lnk.to/newsletterYL\n\n📜 Message from the composer and creator of Soothing Relaxation:\n\"I am a composer from Norway and I started this channel with a simple vision: to create a place that you can visit whenever you want to sit down and relax. I compose music that can be labeled as for example: sleep music, calm music, yoga music, study music, peaceful music, beautiful music and relaxing music. I love to compose music and I put a lot of work into it. \n\nThank you very much for listening and for leaving feedback. Every single day I am completely astonished by all your warm support and it really inspires me to work even harder on my music. If you enjoy my work, I would be very happy if you decided to subscribe and join our community. Have a wonderful day or evening!\"\n\n- Peder B. Helland, composer for Soothing Relaxation\n\n© Copyright:\nMusic composed by Peder B. Helland. \nFootage/photos licensed from:\n• Pond5: azgek1, pavlas24, aflomotion \n\n☀️ Relevant hashtags:\n#relaxingmusic, #relax, #soothingrelaxation, #music, #sleep", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Soothing Relaxation", + "liveBroadcastContent": "none", + "publishTime": "2018-10-07T06:28:56Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "IrvMgf146KXD8T5QIy7uL17ayfA", + "id": { + "kind": "youtube#video", + "videoId": "hpfVMPCR3xA" + }, + "snippet": { + "publishedAt": "2021-08-07T11:58:20Z", + "channelId": "UCS4jPUCax8d3f-uke--YXXQ", + "title": "FLYING OVER CANADA (4K UHD) - Relaxing Music With Stunning Beautiful Nature (4K Video Ultra HD)", + "description": "Welcome to Earth Relaxation !\nCanada is a country in North America. Its ten provinces and three territories extend from the Atlantic to the Pacific and northward into the Arctic Ocean, covering 9.98 million square kilometres (3.85 million square miles), making it the world's second-largest country by total area. Its southern and western border with the United States, stretching 8,891 kilometres (5,525 mi), is the world's longest bi-national land border. Canada's capital is Ottawa, and its three largest metropolitan areas are Toronto, Montreal, and Vancouver. A highly developed country, Canada has the seventeenth-highest nominal per-capita income globally and the sixteenth-highest ranking in the Human Development Index. Its advanced economy is the tenth-largest in the world, relying chiefly upon its abundant natural resources and well-developed international trade networks.\nMusic has so many benefits, and one of them is that it calms your nerves down. It's always a good idea to listen to some background music while you're doing something. So here are some relaxing piano pieces with 4k nature videos that will help you relax, feel relaxed, and get ready for bed.\nIn this video, I'm going to show you my favorite nature video that will help you relax and improve your mood. It's a 4k video with relaxing music and calming nature sounds. There are no talking in this video so you can enjoy the natural sound of the forest, the sound of a river, and some birds chirping.\nWatch the 4k ultra high definition video in this video in somewhere at nail salon, public transport or restaurant. Relaxing music is playing in the background. Try out this 4k ultra high definition video let me know what you think in the comments below!.\n▽ Follow Earth Relaxation\n➤ Youtube → https://www.youtube.com/channel/UCS4jPUCax8d3f-uke--YXXQ\n#earthrelaxation​ #relaxingmusic​ #4kcanada\n----------------------------------------------------------------------\nMusic provided by EMVN\nSubmit your music: http://emvn.co/submitDemo\n📌 Contacts: copyright.thstudio@gmail.com, network@emvn.co\nTrack list:\n0:0:0 | 1 . Relax\n0:4:54 | 2 . Calm\n0:9:46 | 3 . Beach\n0:14:30 | 4 . Water\n\nFollow Artists:\nhttps://emvn.fanlink.to/melosy\n----------------------------------------------------------------------\n►All rights belong to their respective owners.\n✔ This video was given a special license directly from the artists and the right holders.", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Earth Relaxation", + "liveBroadcastContent": "none", + "publishTime": "2021-08-07T11:58:20Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "tE-onscHNqnNdqU_CGuFgD58Jrg", + "id": { + "kind": "youtube#video", + "videoId": "Tjsdoxovb2U" + }, + "snippet": { + "publishedAt": "2023-01-13T17:17:12Z", + "channelId": "UCuaYvu45lq5fwmnv_zF8sng", + "title": "Norway - Scenic Relaxation Film 4k", + "description": "#nature #4kfilm #4knature #norway \nWatch this 4k video tour of Norway and experience the beautiful landscape and stunning culture first-hand. From the capital Oslo to the rugged mountain ranges of the Fjeldhjellet, this video will take you on a journey through one of the world's most beautiful countries.\n\nStep into the Norwegian wilderness and experience the natural beauty of this stunning country for yourself with this 4k video tour! With stunning landscapes and a culture steeped in history, Norway is a must-see destination for anyone visiting Europe. Experience this beautiful country in 4k quality with this video!\n\nOur other Films:\nIndonesia 4K - https://www.youtube.com/watch?v=nAfrCO28fVc\nThailand 4K - https://www.youtube.com/watch?v=sA2c9naaLTg\nSri Lanka 4K - https://www.youtube.com/watch?v=vdA8lrAoL9A\nUtah 4k - https://www.youtube.com/watch?v=s6Ak0Q41FcY\nItaly 4k - https://www.youtube.com/watch?v=ko5EIZM0gb8\n\nTimeline:\n00:00 Intro\n00:47 Lovatnet lake\n01:28 Trolltunga\n01:57 Langfoss waterfall\n02:25 Haukland Beach \n03:27 Alesund \n03:50 Hardanger Bridge \n05:00 Sognefjord\n06:07 Atlantic Ocean Road \n07:43 Lofoten island \n09:45 Henningsvaer\n10:53 Kragero \n12:48 Vøringsfossen waterfall \n13:43 Briksdalsbreen Glacier\n15:00 Hamningberg\n16:22 Trollstigen\n18:03 Seven Sisters Waterfall \n18:33 Pulpit rock\n20:10 Lovatnet lake\n20:57 Saltstraumen bridge \n21:44 Zakariasdamm\n22:15 Lindesnes Lighthouse\n23:39 Tromso\n25:29 North Cape\n01:00:43 Thanks for waching, save nature, save the planet\n\nMore inspiration: \nYouTube https://www.youtube.com/@Earth_to_inspire\nInstagram https://www.instagram.com/earth_to_inspire/\nTikTok https://www.tiktok.com/@earth_to_inspire?lang=en.\n\n#norway4k #dronevideo #droneview #relaxing #calmmusic #savetheworld #savethenature #savetheplanet", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Earth to inspire", + "liveBroadcastContent": "none", + "publishTime": "2023-01-13T17:17:12Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "vs3WO9PnY7wBrBeGxVuBojKt0eA", + "id": { + "kind": "youtube#video", + "videoId": "YFhwEJosUsU" + }, + "snippet": { + "publishedAt": "2022-08-20T02:42:35Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "TOP 50 • Most Beautiful Places in the World 8K ULTRA HD", + "description": "TOP 50 - In this video you will find a TOP 50 of the Most Beautiful Places in the World 8K. You will take a tour around the world to see the best places on the planet earth 8K.\nIn this video you will see the amazing Halong Bay in Vietnam that for many, the seascape of Ha Long Bay is one of the most beautiful beaches in the world. Cruises sail emerald green waters among thousands of rugged islands and islets with islands and most amazing landscapes.\nPamukkale Is The Most Visited Individual Site in All of Turkey! Not Istanbul's Hagia Sophia. Not the ancient ruins of Ephesus.\nKrabi is famous for its scenic view and breathtaking beaches and Islands. Its coral reef vistas are also one of the world’s most beautiful, which makes the City a great spot for coral and fish video.\nFiordland is one of the most dramatic and beautiful parts of New Zealand. Absorb the breathtaking treasures of this region by water, air or hiking.\nMu Cang Chai is home to some of Asia’s most magnificent cultivated lands. Rice terraces coil in parts around the hills to spectacular effect, luring photographers, hikers, and amazing motorbikers.\nThis citadel in the clouds was abandoned only 100 years later but Spanish invaders never found Machu Picchu. It was left to nature before explorer Hiram Bingham caught wind of it on an expedition in 1911 and decided to investigate. A hidden city protected by the mountains, and still wonderfully inaccessible other than by foot or train, Machu Picchu is now a New Seven Wonders of the World.\nThe Great Wall of China is one of the greatest sights in the world, the longest wall in the world, an awe-inspiring feat of ancient defensive architecture.\nLocated on the northern side of Greece, Meteora is included in the World Heritage List. Dotted with towering rocks, it boasts a breathtaking landscape, creating otherworldly beautiful scenery.\nBe sure to visit Keukenhof, where you will experience the gorgeous views of blooming Dutch tulips and other flowers for which Holland is famous. Keukenhof is the most famous and largest flower park in the world and lies not far from Amsterdam.\nThe island is actually a group of islands consisting of Thira, Thirassia, Aspronissi, Palea and Nea Kameni in the southernmost part of the Cyclades.\nOne highlight of the trails inside the Torres del Paine National Park The viewpoint over the Grey lake and glaciar in chile.\nNorway's Lofoten Islands are referred to as the Lofoten Wall because they are vertical rows of granite shooting out of the Arctic Sea.\nThe Amalfi Coast is a 34-mile-long region in Campania, Italy. \nCappadocia is a beautiful region in central Turkey famous for its fairytale scenery.\nAntarctica is the coldest, windiest and driest continent. It contains 90 percent of all of the ice on Earth 8K.\n\nList of the Most Beautiful Places in the Planet Earth 8K:\n00:00 Intro 8K ULTRA HD\n00:10 Halong Bay, Vietnam\n00:46 Pamukkale, Turkey\n01:25 Plitvice Lakes National Park, Croatia\n02:12 Krabi, Thailand\n03:12 Fiordland, New Zeland\n03:58 Mu Cang Chai, Vietnam\n04:57 Machu Picchu, Peru\n05:29 The Great Wall of China\n06:19 Meteora, Thessaly, Greece\n07:18 Keukenhof Gardens, Netherlands\n08:16 Santorini Island, Greece\n09:09 Torres del Paine, Chile\n09:56 Lofoten Islands, Norway\n11:38 Amalfi Coast, Italy\n12:48 Cappadocia, Turkey\n14:02 Fiji\n15:38 Fjords, Norway\n17:09 Antarctica\n19:10 Bagan, Myanmar\n20:29 Dubai, United Arab Emirates\n21:54 Maldives\n23:47 Monument Valley, USA\n25:18 Iguazu Falls, Brasil - Argentina\n26:26 Swiss Alps, Switzerland\n27:49 Angkor Wat, Cambodia\n29:03 Fernando de Noronha, Brazil\n30:22 Lisbon, Portugal\n31:58 Paris, France\n33:25 Cape Town, South Africa\n34:22 Himalayas, Nepal\n35:22 Venice, Italy\n36:55 Zhangye Danxia, China\n37:52 Sossusvlei, Namibia\n38:57 Forbiden City, China\n38:50 Petra, Jordan\n40:36 Zlatni Rat, Croatia\n42:00 Barcelona, Spain\n43:12 Giza, Egypt\n44:23 Atacama Desert, Chile\n45:30 Okavango Delta, Botswana\n46:45 Whitsunday, Australia\n47:28 Cinque Terre, Italy\n48:54 Neuschwanstein Castle, Germany\n50:01 Tuscany, Italy\n51:45 Sahara Desert, Africa\n53:25 Bamboo Forest, Japan\n54:32 Lake Bled, Slovenia\n55:54 Li River, China\n57:43 Zakynthos, Greece\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\n\nTOP 50 Most Beautiful Places in the World 8K ULTRA HD 8K HDR 60FPS (FUHD) Demo TV 8K ULTRA HD\n\n#8K #MOST #BEAUTIFUL #PLACES #PLANET #EARTH #WORLD #TOP50", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "liveBroadcastContent": "none", + "publishTime": "2022-08-20T02:42:35Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "HMaqXfV2hlnRHLuUTFXHwn60xbI", + "id": { + "kind": "youtube#video", + "videoId": "nq4tT68UoCg" + }, + "snippet": { + "publishedAt": "2022-01-05T16:59:13Z", + "channelId": "UCkFeoNSqYTa7trn75WM9tsg", + "title": "✨ Space Ambient Music • Deep Relaxation Space Journey [ 4K UHD ]", + "description": "Space Ambient Music [ Space Exploration ]. It is an excellent ambient Cosmic soundscape Background for Space exploring, stargazing, learning astronomy, Dreaming, Soul Healing, Stress Relief and complete relaxation. Also you can try to use it while creating arts, writing, studying etc. Use it for Universe Exploring, Astronomy, Astral Projection, for creating continues cosmic mood for dreaming and reading fantastic, exploring outer space, gaming and coding\n\n🎵 Music: Space Exploration \n Album: Starfield\n https://spoti.fi/39EL8F0\n https://apple.co/3mXohYu \n💎 Animation: by Blue Wave Studio\nⓒ Copyrights: Blue Wave Studio\n\n#spacemusic\n#spaceambient\n#ambient", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Relaxation Ambient Music", + "liveBroadcastContent": "none", + "publishTime": "2022-01-05T16:59:13Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "9oGs0OPqYP-U8YLf3qUwjY4XLyI", + "id": { + "kind": "youtube#video", + "videoId": "RgCENw09Dpk" + }, + "snippet": { + "publishedAt": "2022-09-17T02:50:31Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "TOP 50 • Most Beautiful CITIES in the World 8K ULTRA HD", + "description": "TOP 50 of the Most Beautiful CITIES in the World 8K for your best 8k device. Travel around the planet earth 8K to see the best cities in the world.\nAre you making some plans to visit beautiful places in the planet earth? The world is full of beautiful and amazing places to visit like cities skylines where you can enjoy mother nature and amazing cities skylines around the world. We have compiled this list to help you plan your trip to see the most beautiful places on the planet.\nBeautiful cities are popular for their beauty, architecture of the buildings, people that live there, and most importantly the most popular food in the world. People who love traveling are always searching for a new city to go to.\nFor this reason, you need to know the particular information about these cities to safely visit and explore all the possible places around the planet earth 8K with the best cities.\n50 Most Beautiful Cities in the World:\n\n00:00 Intro 8K ULTRA HD\n00:10 50 Most Beautiful Cities in the World\n00:15 Paris, France\n00:48 New York, United States\n01:29 London, United Kingdom\n02:01 Venice, Italy\n02:48 Barcelona, Spain\n03:48 Amsterdam, Netherlands\n04:33 Rome, Italy\n05:14 Singapore\n05:47 Lisbon, Portugal\n06:43 Prague, Czech Republic\n08:12 Istanbul, Turkey\n09:02 Tokyo, Japan\n09:51 Vienna, Austria\n11:21 Buenos Aires, Argentina\n12:36 San Diego, United States\n14:00 Hong Kong\n15:16 Chicago, United States\n16:54 Bruges, Belgium\n18:09 Madrid, Spain\n19:25 Dubai, United Arab Emirates\n20:42 Edinburgh, United Kingdom\n22:08 Zurich, Switzerland\n23:26 Cuzco, Peru\n24:43 St. Petersburg, Russiaç\n25:59 Berlin, Germany\n27:15 Hanoi, Vietnam\n28:25 Queenstown, New Zeland\n28:37 Dubrovnik, Croatia\n30:58 Bangkok, Thailand\n32:24 Dublin, Ireland\n33:34 Bergen, Norway\n34:59 Beijing, China\n35:46 Athens, Greece\n37:08 Phuket, Thailand\n38:30 Edinburgh, Scotland\n40:08 Mexico City, Mexico\n41:18 Moscow, Russia\n42:29 Munich, Germany\n43:55 Cairo, Egypt\n44:48 Chicago, United States\n46:38 Zurich, Switzerland\n47:45 Copenhagen, Denmark\n48:56 Reykjavik, Iceland\n50:12 Kyoto, Japan\n51:18 Florence, Italy\n52:44 Porto, Portugal\n54:10 Jakarta, Indonesia\n55:09 Best Cities to live in the Planet\n55:14 Outro 8K ULTRA HD\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nAmazing & Beautiful Cities Around the Planet Earth 8K HDR 60FPS (FUHD) Demo TV 8K ULTRA HD\n\n#8K #CITIES #SKYLINE #BEAUTIFUL #RELAXING #WORLD #CITIESSKYLINES #TRAVEL #TOUR", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "liveBroadcastContent": "none", + "publishTime": "2022-09-17T02:50:31Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "Ega2ZKTVBIIkrF0xOo9LEfx7Owg", + "id": { + "kind": "youtube#video", + "videoId": "2OEL4P1Rz04" + }, + "snippet": { + "publishedAt": "2019-09-04T06:50:42Z", + "channelId": "UCjzHeG1KWoonmf9d5KBvSiw", + "title": "Beautiful Relaxing Music for Stress Relief • Meditation Music, Sleep Music, Ambient Study Music", + "description": "Beautiful relaxing music for stress relief, composed by Peder B. Helland. This instrumental music (\"The Hidden Valley\") works well as sleep music, ambient study music, meditation music or relaxation music. Stream or download music from Soothing Relaxation: https://soothingrelaxation.lnk.to/listenYL\n\n💿 Track information:\nTitle: The Hidden Valley \nComposer: Peder B. Helland\nIndex: ★183\nAlbum: Flying\nBuy or stream this album: https://soothingrelaxation.com/products/flying-album\nBuy this track: https://soothingrelaxation.com/products/the-hidden-valley\nLicense this track: https://soothingrelaxation.com/products/the-hidden-valley-license\n\nFollow Soothing Relaxation on...\nSoothing Relaxation: https://soothingrelaxation.lnk.to/websiteYL\nFacebook: https://soothingrelaxation.lnk.to/FacebookYL\nInstagram: https://soothingrelaxation.lnk.to/InstagramYL\nSpotify: https://soothingrelaxation.lnk.to/listenYL/spotify\nApple Music: https://soothingrelaxation.lnk.to/listenYL/applemusic\nYouTube Music: https://soothingrelaxation.lnk.to/listenYL/youtubemusic\nAmazon Music: https://soothingrelaxation.lnk.to/listenYL/amazonmusic\nDeezer: https://soothingrelaxation.lnk.to/listenYL/deezer\n\nFollow Peder B. Helland on...\nWebsite: https://pederbhelland.lnk.to/websiteYL\nFacebook: https://pederbhelland.lnk.to/facebookYL\nInstagram: https://pederbhelland.lnk.to/instagramYL\n\nListen to our playlists on other music services: https://www.soothingplaylists.com/\nListen to more relaxing music: https://www.youtube.com/playlist?list=PLQ_PIlf6OzqL3BE0rB6clb9IzLLkkSKUF\nGet a free music download and stay updated with our newsletter: https://soothingrelaxation.lnk.to/newsletterYL\n\n📜 Message from the composer and creator of Soothing Relaxation:\n\"I am a composer from Norway and I started this channel with a simple vision: to create a place that you can visit whenever you want to sit down and relax. I compose music that often can be described as sleep music, calm music, yoga music, study music, peaceful music, beautiful music and relaxing music. I love to compose music and I put a lot of work into it. \n\nThank you very much for listening and for leaving feedback. Every single day I am completely astonished by all your warm support and it really inspires me to work even harder on my music. If you enjoy my work, I would be very happy if you decided to subscribe and join our community. Have a wonderful day or evening!\"\n\n- Peder B. Helland, composer for Soothing Relaxation\n\n© Copyright:\nMusic composed/arranged by Peder B. Helland. \nFootage/photos licensed from:\n• iStockPhoto: Treedeo, Yiming Li, Filmovar, MediaProduction, luza studios, ZoneCreative, SimonSkafar, captamotion, lavoview, f9photos, bo1982, sergeysxp, SimonSkafar, nattanan726, rmnunes, Forrestbro, crbellette, Mumemories, phaitoons, Yiming Li, komisar, ibigfish, gorodenkoff, FatCamera, SimonSkafar, JohnFScott, phaitoons, captamotion, Schroptschop, luza studios, Onfokus, DeoTree, Mumemories, superoke, NanoStockk\n• Pond5: azgek1, pavlas24, aflomotion \n• Videoblocks: jakerbreaker, cookelma, VladyslavStarozhylov, taden, guillaumelynn, Vadim_Key\n\n☀️ Relevant hashtags:\n#relaxingmusic, #relax, #soothingrelaxation, #music, #sleep", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Soothing Relaxation", + "liveBroadcastContent": "none", + "publishTime": "2019-09-04T06:50:42Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "IfqlEXrSTf6Z4SOm0mN3zjavftY", + "id": { + "kind": "youtube#video", + "videoId": "vQoR7gJTirk" + }, + "snippet": { + "publishedAt": "2021-06-19T00:43:51Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "The Colors of the Ocean 8K ULTRA HD - The Best 8K Sea Animals for Relaxation & Calming Music", + "description": "THE COLORS OF THE OCEAN is a beautiful and RELAXING 8K Film about Sea Life and Marine Animals. In this video, we can watch marine animals from all over the world, with beautiful colors and shapes for relaxing sleep, or relaxation time.\nIt is estimated that 70 and 80 percent of all life on earth is below the ocean's surface and the oceans contain 99 percent of the planet's living space. Less than 11% of that space has been explored by humans. About 85 percent of the area and 90 percent of the volume constitute the dark and cold environment that we call the deep sea. The average depth of the ocean is 3,761 meters. The average height of the terrain is 850 meters.\nSo there are at least 236,878 marine species, but most likely there are at least 750,000 marine species, and possibly up to 25 million marine species. That's amazing!\nThe lowest known point on our Earth, called Challenger Deep, is 11,034 meters deep, in the Mariana Trench in the western Pacific. To get an idea of ​​how deep that is, if I could take Mount Everest and place it at the bottom of that place, there would still be more than a mile of the ocean above. The Dead Sea is the lowest land point on Earth with an elevation of 396 meters below sea level.\n\nSome Facts about the ocean and Sea Life:\n\n- Ocean water looks blue and not transparent. Sunlight is made up of all colors. When it reaches the sea, this white light passes through the water, absorbing the red and orange tones and allowing the green and bluish tones to pass through.\n- The Pacific Ocean is the largest ocean in the world. It occupies a third of its surface and extends approximately 15,000 km from the Bering Sea bordering the Arctic in the north to the south with Antarctica.\n- The oceanic clam, a marine mollusk from the North Atlantic, is the oldest animal in history with an estimated age of 507 years. It is about 8 cm long.\n- The largest mountainous area in the world is under the sea and is known as the mid-ocean ridges that run through the middle of the Atlantic Ocean to the Indian and Pacific.\n\nfollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nThe Colors of the Ocean 8K ULTRA HD - The Best 8K Sea Animals for Relaxation & Calming Music (FUHD) Demo 8K ULTRA HD\n\n#8K #ANIMALS #AQUARIUM", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "liveBroadcastContent": "none", + "publishTime": "2021-06-19T00:43:51Z" + } + } + ] + }, + "videos": { + "kind": "youtube#searchListResponse", + "etag": "2RCFFcHXtMOgP_VRocs90LTeEG8", + "nextPageToken": "CAUQAA", + "regionCode": "KR", + "pageInfo": { + "totalResults": 1000000, + "resultsPerPage": 5 + }, + "items": [ + { + "kind": "youtube#searchResult", + "etag": "bb8H2NegrbaoMPgWcehE8C3AjS4", + "id": { + "kind": "youtube#video", + "videoId": "G1hKzCkywM8" + }, + "snippet": { + "publishedAt": "2021-05-22T06:00:05Z", + "channelId": "UCb57aRZr3KsykS_wNsD5Ptw", + "title": "6 Hour 4K Beautiful places Aerial Views", + "description": "Please enjoy 6Hour aerial journey of beautiful places on the Earth. This tour will take you around the world's great nature.", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "PRIMAL EARTH ", + "liveBroadcastContent": "none", + "publishTime": "2021-05-22T06:00:05Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "mvOKLCMftV_V1bCiKSRec3OPjHc", + "id": { + "kind": "youtube#video", + "videoId": "gig9-jO7YL4" + }, + "snippet": { + "publishedAt": "2021-07-17T10:00:21Z", + "channelId": "UCb57aRZr3KsykS_wNsD5Ptw", + "title": "Most Amazing 100 Places on The Earth 4K", + "description": "Please let us know by comments, which places are your favorite places in the video! There are many beautiful places on Earth.", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/gig9-jO7YL4/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/gig9-jO7YL4/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/gig9-jO7YL4/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "PRIMAL EARTH ", + "liveBroadcastContent": "none", + "publishTime": "2021-07-17T10:00:21Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "JMa-GjMYEYBq0nz2xQvua_4wCLA", + "id": { + "kind": "youtube#video", + "videoId": "YFhwEJosUsU" + }, + "snippet": { + "publishedAt": "2022-09-02T13:00:15Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "TOP 50 • Most Beautiful Places in the World 8K ULTRA HD", + "description": "TOP 50 - In this video you will find a TOP 50 of the Most Beautiful Places in the World 8K. You will take a tour around the world to ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "liveBroadcastContent": "none", + "publishTime": "2022-09-02T13:00:15Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "C6bCvcy8MUigvJ3g4PnVuwjE1_M", + "id": { + "kind": "youtube#video", + "videoId": "0q7c3Jac56A" + }, + "snippet": { + "publishedAt": "2022-04-21T11:00:00Z", + "channelId": "UCRpNVpZoW56rOsV-6wFK3lg", + "title": "20 Most Beautiful Places On Planet Earth", + "description": "In this video, we'll be showing you 20 of the Most Beautiful Places on Planet Earth. Is it the world's highest sky corridor waterfall ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/0q7c3Jac56A/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/0q7c3Jac56A/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/0q7c3Jac56A/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "4 Ever Green", + "liveBroadcastContent": "none", + "publishTime": "2022-04-21T11:00:00Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "-mUYdD_boPvktcJaed5G8B8VOLU", + "id": { + "kind": "youtube#video", + "videoId": "OHAWwaYu2H0" + }, + "snippet": { + "publishedAt": "2017-06-15T14:30:00Z", + "channelId": "UCaWd5_7JhbQBe4dknZhsHJg", + "title": "Top 10 Most Beautiful Places In The World", + "description": "Top 10 Most Beautiful Places In The World. Subscribe http://goo.gl/Q2kKrD More incredible around-the-world content & awesome ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/OHAWwaYu2H0/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/OHAWwaYu2H0/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/OHAWwaYu2H0/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "WatchMojo.com", + "liveBroadcastContent": "none", + "publishTime": "2017-06-15T14:30:00Z" + } + } + ] + }, + "relatedVideoSearch": [ + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "fA_NbpMzj_RHfxQ4v-4O6uxHb5g", + "items": [ + { + "kind": "youtube#video", + "etag": "Ygz3eEKCalqE4PAmCKUMpRAdxEU", + "id": "QSNa8U1yGrM", + "snippet": { + "publishedAt": "2021-05-07T13:00:09Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "EARTH in 8K ULTRA HD - Tour Through the Planet Earth - Best Places and Animals Relaxing Music 8K TV", + "description": "Despite its name, Earth may be the only planet in our solar system that has oceans. It is the fifth-largest planet in the solar system and perhaps the only one that harbors life.\n\nThe Earth's seas and oceans, which cover 70% of its surface, are home to a large amount of life. With an average depth of 4 km, they account for 97% of the water on the planet. In addition, they feature some impressive landforms: the most extensive mountain range, the Mid-Oceanic Ridge, is deep under the sea. Four times as long as the Andes, the Rocky Mountains, and the Himalayas arranged in a row, it stretches 65,000 km across the Arctic and the Atlantic.\n\nA study carried out jointly by the Universities of Münster, Cambridge, and the Zurich Technique showed that the age of the planet is between 4,400 million and 4,510 million years. So far, five mass extinctions have been recorded on the planet. The first occurred 440 million years ago and the last 65 million years ago. Michael Rampino, an Earth science expert at New York University, argues that it takes about 30 million years for the Solar System to cross the plane of the Milky Way. The presence of the system could be one of the reasons why comets' orbits are destabilized, launching them towards the planet. To this, he adds a possibility that is little studied today: dark matter.\n\n8.7 million species, a single planet. The ecosystems that we depend on, as humans, to survive are made up of around 8.7 million plant and animal species. At least this is confirmed by a study by the University of Hawaii (United States) carried out in 2011, which is said to be the most accurate to date. Of these, we only know 1.3 million. Unfortunately, WWF warns with its Living Planet report that, since the 70s of the last century, only the world population of vertebrates has been reduced by 60% due to global warming, the destruction of ecosystems, and the crisis of biodiversity caused by human action. It is in our power to care for and protect (and even discover) all those species that make our planet an (almost) inexhaustible source of life.\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaravia\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nEARTH in 8K ULTRA HD - Tour Through the Planet Earth - Best Places and Animals Relaxing Music 8K TV (FUHD) Demo 8K ULTRA HD\n\n#8K #PLANET #EARTH", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "tags": [ + "8k video", + "8k video ultra hd", + "8k tv samsung", + "8k tv ps5", + "8k tv review", + "4k ultra hd", + "planet earth", + "planet earth 2", + "planet earth turns slowly", + "tour around the world", + "tour around the states", + "nature sounds relaxing music", + "travel around the world", + "planet", + "earth", + "8k earth", + "8k earth video", + "8k planet earth", + "8k earth clouds", + "4k earth", + "4k earth from space", + "4k earth video", + "4k earth nature", + "4k tv", + "animals collection", + "4k animals", + "8k animals", + "earth from space live", + "earth from space", + "tv" + ], + "categoryId": "1", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "EARTH in 8K ULTRA HD - Tour Through the Planet Earth - Best Places and Animals Relaxing Music 8K TV", + "description": "Despite its name, Earth may be the only planet in our solar system that has oceans. It is the fifth-largest planet in the solar system and perhaps the only one that harbors life.\n\nThe Earth's seas and oceans, which cover 70% of its surface, are home to a large amount of life. With an average depth of 4 km, they account for 97% of the water on the planet. In addition, they feature some impressive landforms: the most extensive mountain range, the Mid-Oceanic Ridge, is deep under the sea. Four times as long as the Andes, the Rocky Mountains, and the Himalayas arranged in a row, it stretches 65,000 km across the Arctic and the Atlantic.\n\nA study carried out jointly by the Universities of Münster, Cambridge, and the Zurich Technique showed that the age of the planet is between 4,400 million and 4,510 million years. So far, five mass extinctions have been recorded on the planet. The first occurred 440 million years ago and the last 65 million years ago. Michael Rampino, an Earth science expert at New York University, argues that it takes about 30 million years for the Solar System to cross the plane of the Milky Way. The presence of the system could be one of the reasons why comets' orbits are destabilized, launching them towards the planet. To this, he adds a possibility that is little studied today: dark matter.\n\n8.7 million species, a single planet. The ecosystems that we depend on, as humans, to survive are made up of around 8.7 million plant and animal species. At least this is confirmed by a study by the University of Hawaii (United States) carried out in 2011, which is said to be the most accurate to date. Of these, we only know 1.3 million. Unfortunately, WWF warns with its Living Planet report that, since the 70s of the last century, only the world population of vertebrates has been reduced by 60% due to global warming, the destruction of ecosystems, and the crisis of biodiversity caused by human action. It is in our power to care for and protect (and even discover) all those species that make our planet an (almost) inexhaustible source of life.\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaravia\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nEARTH in 8K ULTRA HD - Tour Through the Planet Earth - Best Places and Animals Relaxing Music 8K TV (FUHD) Demo 8K ULTRA HD\n\n#8K #PLANET #EARTH" + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT30M19S", + "dimension": "2d", + "definition": "hd", + "caption": "true", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "15813174", + "likeCount": "98247", + "favoriteCount": "0", + "commentCount": "1623" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "2435", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "QSNa8U1yGrM", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "DwgDA9_T5oAH6McxBOghqsFk-k8", + "items": [ + { + "kind": "youtube#video", + "etag": "fGf_IgB2RYNR7LtBkUGpPNC2MK0", + "id": "hlWiI4xVXKY", + "snippet": { + "publishedAt": "2018-10-07T15:22:12Z", + "channelId": "UCjzHeG1KWoonmf9d5KBvSiw", + "title": "Beautiful Relaxing Music • Peaceful Piano Music & Guitar Music | Sunny Mornings by @PederBHellandMusic", + "description": "Beautiful relaxing music by Peder B. Helland. Enjoy peaceful piano music and guitar music (\"Sunny Mornings\" ) with birds singing in the background. Stream or download music from Soothing Relaxation: https://soothingrelaxation.lnk.to/listenYL\n\n💿 Track information:\nTitle: Sunny Mornings \nComposer: @PederBHellandMusic \nIndex: ★151\nAlbum: Sunny Mornings\nBuy or stream this album: https://soothingrelaxation.lnk.to/sunny-mornings\nBuy this track: https://soothingrelaxation.com/products/sunny-mornings-beautiful-relaxing-music-151\nBuy this video as an MP3 file: https://soothingrelaxation.com/products/hlWiI4xVXKY\nLicense this track: https://soothingrelaxation.com/products/sunny-mornings-license\nSheet music: https://soothingrelaxation.com/products/sunny-mornings\n\nFollow Soothing Relaxation on...\nOur website: https://soothingrelaxation.lnk.to/websiteYL\nFacebook: https://soothingrelaxation.lnk.to/FacebookYL\nInstagram: https://soothingrelaxation.lnk.to/InstagramYL\nSpotify: https://soothingrelaxation.lnk.to/listenYL/spotify\nApple Music: https://soothingrelaxation.lnk.to/listenYL/applemusic\nYouTube Music: https://soothingrelaxation.lnk.to/listenYL/youtubemusic\nAmazon Music: https://soothingrelaxation.lnk.to/listenYL/amazonmusic\nDeezer: https://soothingrelaxation.lnk.to/listenYL/deezer\n\nFollow Peder B. Helland on...\nWebsite: https://pederbhelland.lnk.to/websiteYL\nFacebook: https://pederbhelland.lnk.to/facebookYL\nInstagram: https://pederbhelland.lnk.to/instagramYL\n\nListen to more relaxing music: https://www.youtube.com/playlist?list=PLQ_PIlf6OzqL3BE0rB6clb9IzLLkkSKUF\n\nGet a free music download and stay updated with our newsletter: https://soothingrelaxation.lnk.to/newsletterYL\n\n📜 Message from the composer and creator of Soothing Relaxation:\n\"I am a composer from Norway and I started this channel with a simple vision: to create a place that you can visit whenever you want to sit down and relax. I compose music that can be labeled as for example: sleep music, calm music, yoga music, study music, peaceful music, beautiful music and relaxing music. I love to compose music and I put a lot of work into it. \n\nThank you very much for listening and for leaving feedback. Every single day I am completely astonished by all your warm support and it really inspires me to work even harder on my music. If you enjoy my work, I would be very happy if you decided to subscribe and join our community. Have a wonderful day or evening!\"\n\n- Peder B. Helland, composer for Soothing Relaxation\n\n© Copyright:\nMusic composed by Peder B. Helland. \nFootage/photos licensed from:\n• Pond5: azgek1, pavlas24, aflomotion \n\n☀️ Relevant hashtags:\n#relaxingmusic, #relax, #soothingrelaxation, #music, #sleep", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Soothing Relaxation", + "tags": [ + "calm", + "calm music", + "calming", + "calming music", + "cello", + "dormir", + "détendre", + "guitar", + "insomnia", + "meditar", + "meditation", + "meditation music", + "peaceful", + "peaceful music", + "peder b. helland", + "peter b. helland", + "piano", + "piano music", + "relajarse", + "relax", + "relaxante", + "relaxation", + "relaxing", + "relaxing music", + "sleep", + "sleep music", + "sleeping", + "sleeping music", + "smoothing relaxation", + "soothing", + "soothing music", + "soothing relaxation", + "study music" + ], + "categoryId": "10", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "Beautiful Relaxing Music • Peaceful Piano Music & Guitar Music | Sunny Mornings by @PederBHellandMusic", + "description": "Beautiful relaxing music by Peder B. Helland. Enjoy peaceful piano music and guitar music (\"Sunny Mornings\" ) with birds singing in the background. Stream or download music from Soothing Relaxation: https://soothingrelaxation.lnk.to/listenYL\n\n💿 Track information:\nTitle: Sunny Mornings \nComposer: @PederBHellandMusic \nIndex: ★151\nAlbum: Sunny Mornings\nBuy or stream this album: https://soothingrelaxation.lnk.to/sunny-mornings\nBuy this track: https://soothingrelaxation.com/products/sunny-mornings-beautiful-relaxing-music-151\nBuy this video as an MP3 file: https://soothingrelaxation.com/products/hlWiI4xVXKY\nLicense this track: https://soothingrelaxation.com/products/sunny-mornings-license\nSheet music: https://soothingrelaxation.com/products/sunny-mornings\n\nFollow Soothing Relaxation on...\nOur website: https://soothingrelaxation.lnk.to/websiteYL\nFacebook: https://soothingrelaxation.lnk.to/FacebookYL\nInstagram: https://soothingrelaxation.lnk.to/InstagramYL\nSpotify: https://soothingrelaxation.lnk.to/listenYL/spotify\nApple Music: https://soothingrelaxation.lnk.to/listenYL/applemusic\nYouTube Music: https://soothingrelaxation.lnk.to/listenYL/youtubemusic\nAmazon Music: https://soothingrelaxation.lnk.to/listenYL/amazonmusic\nDeezer: https://soothingrelaxation.lnk.to/listenYL/deezer\n\nFollow Peder B. Helland on...\nWebsite: https://pederbhelland.lnk.to/websiteYL\nFacebook: https://pederbhelland.lnk.to/facebookYL\nInstagram: https://pederbhelland.lnk.to/instagramYL\n\nListen to more relaxing music: https://www.youtube.com/playlist?list=PLQ_PIlf6OzqL3BE0rB6clb9IzLLkkSKUF\n\nGet a free music download and stay updated with our newsletter: https://soothingrelaxation.lnk.to/newsletterYL\n\n📜 Message from the composer and creator of Soothing Relaxation:\n\"I am a composer from Norway and I started this channel with a simple vision: to create a place that you can visit whenever you want to sit down and relax. I compose music that can be labeled as for example: sleep music, calm music, yoga music, study music, peaceful music, beautiful music and relaxing music. I love to compose music and I put a lot of work into it. \n\nThank you very much for listening and for leaving feedback. Every single day I am completely astonished by all your warm support and it really inspires me to work even harder on my music. If you enjoy my work, I would be very happy if you decided to subscribe and join our community. Have a wonderful day or evening!\"\n\n- Peder B. Helland, composer for Soothing Relaxation\n\n© Copyright:\nMusic composed by Peder B. Helland. \nFootage/photos licensed from:\n• Pond5: azgek1, pavlas24, aflomotion \n\n☀️ Relevant hashtags:\n#relaxingmusic, #relax, #soothingrelaxation, #music, #sleep" + }, + "defaultAudioLanguage": "en-US" + }, + "contentDetails": { + "duration": "PT3H3M39S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "214302645", + "likeCount": "1516580", + "favoriteCount": "0", + "commentCount": "48934" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "2150", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "hlWiI4xVXKY", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "MxH6nNVn0J8mKAYzlqEpu78azKc", + "items": [ + { + "kind": "youtube#video", + "etag": "8NGjh1gr9zAdGk0_TZsxR3stT34", + "id": "Tjsdoxovb2U", + "snippet": { + "publishedAt": "2023-01-14T10:55:00Z", + "channelId": "UCuaYvu45lq5fwmnv_zF8sng", + "title": "Norway - Scenic Relaxation Film 4k", + "description": "#nature #4kfilm #4knature #norway \nWatch this 4k video tour of Norway and experience the beautiful landscape and stunning culture first-hand. From the capital Oslo to the rugged mountain ranges of the Fjeldhjellet, this video will take you on a journey through one of the world's most beautiful countries.\n\nStep into the Norwegian wilderness and experience the natural beauty of this stunning country for yourself with this 4k video tour! With stunning landscapes and a culture steeped in history, Norway is a must-see destination for anyone visiting Europe. Experience this beautiful country in 4k quality with this video!\n\nOur other Films:\nIndonesia 4K - https://www.youtube.com/watch?v=nAfrCO28fVc\nThailand 4K - https://www.youtube.com/watch?v=sA2c9naaLTg\nSri Lanka 4K - https://www.youtube.com/watch?v=vdA8lrAoL9A\nUtah 4k - https://www.youtube.com/watch?v=s6Ak0Q41FcY\nItaly 4k - https://www.youtube.com/watch?v=ko5EIZM0gb8\n\nTimeline:\n00:00 Intro\n00:47 Lovatnet lake\n01:28 Trolltunga\n01:57 Langfoss waterfall\n02:25 Haukland Beach \n03:27 Alesund \n03:50 Hardanger Bridge \n05:00 Sognefjord\n06:07 Atlantic Ocean Road \n07:43 Lofoten island \n09:45 Henningsvaer\n10:53 Kragero \n12:48 Vøringsfossen waterfall \n13:43 Briksdalsbreen Glacier\n15:00 Hamningberg\n16:22 Trollstigen\n18:03 Seven Sisters Waterfall \n18:33 Pulpit rock\n20:10 Lovatnet lake\n20:57 Saltstraumen bridge \n21:44 Zakariasdamm\n22:15 Lindesnes Lighthouse\n23:39 Tromso\n25:29 North Cape\n01:00:43 Thanks for waching, save nature, save the planet\n\nMore inspiration: \nYouTube https://www.youtube.com/@Earth_to_inspire\nInstagram https://www.instagram.com/earth_to_inspire/\nTikTok https://www.tiktok.com/@earth_to_inspire?lang=en.\n\n#norway4k #dronevideo #droneview #relaxing #calmmusic #savetheworld #savethenature #savetheplanet", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Earth to inspire", + "tags": [ + "norway", + "norway travel", + "norway travel guide", + "norway 4k", + "norway relaxation", + "relaxation film", + "nature video", + "Norway 4k", + "4k", + "4k video", + "nature", + "relaxing music", + "Norway AMAZING", + "Beautiful Nature", + "norway nature", + "Europe beautiful", + "4K", + "where to visit in Norway", + "top places in Norway", + "relax 4k", + "ultra hd", + "peaceful", + "nature relaxation", + "drone film 4k", + "aerial film", + "the mountains", + "cinematic video 4k nature", + "cinematic drone videos", + "drones", + "save nature", + "save the planet", + "4k nature", + "visit norway" + ], + "categoryId": "19", + "liveBroadcastContent": "none", + "localized": { + "title": "Norway - Scenic Relaxation Film 4k", + "description": "#nature #4kfilm #4knature #norway \nWatch this 4k video tour of Norway and experience the beautiful landscape and stunning culture first-hand. From the capital Oslo to the rugged mountain ranges of the Fjeldhjellet, this video will take you on a journey through one of the world's most beautiful countries.\n\nStep into the Norwegian wilderness and experience the natural beauty of this stunning country for yourself with this 4k video tour! With stunning landscapes and a culture steeped in history, Norway is a must-see destination for anyone visiting Europe. Experience this beautiful country in 4k quality with this video!\n\nOur other Films:\nIndonesia 4K - https://www.youtube.com/watch?v=nAfrCO28fVc\nThailand 4K - https://www.youtube.com/watch?v=sA2c9naaLTg\nSri Lanka 4K - https://www.youtube.com/watch?v=vdA8lrAoL9A\nUtah 4k - https://www.youtube.com/watch?v=s6Ak0Q41FcY\nItaly 4k - https://www.youtube.com/watch?v=ko5EIZM0gb8\n\nTimeline:\n00:00 Intro\n00:47 Lovatnet lake\n01:28 Trolltunga\n01:57 Langfoss waterfall\n02:25 Haukland Beach \n03:27 Alesund \n03:50 Hardanger Bridge \n05:00 Sognefjord\n06:07 Atlantic Ocean Road \n07:43 Lofoten island \n09:45 Henningsvaer\n10:53 Kragero \n12:48 Vøringsfossen waterfall \n13:43 Briksdalsbreen Glacier\n15:00 Hamningberg\n16:22 Trollstigen\n18:03 Seven Sisters Waterfall \n18:33 Pulpit rock\n20:10 Lovatnet lake\n20:57 Saltstraumen bridge \n21:44 Zakariasdamm\n22:15 Lindesnes Lighthouse\n23:39 Tromso\n25:29 North Cape\n01:00:43 Thanks for waching, save nature, save the planet\n\nMore inspiration: \nYouTube https://www.youtube.com/@Earth_to_inspire\nInstagram https://www.instagram.com/earth_to_inspire/\nTikTok https://www.tiktok.com/@earth_to_inspire?lang=en.\n\n#norway4k #dronevideo #droneview #relaxing #calmmusic #savetheworld #savethenature #savetheplanet" + } + }, + "contentDetails": { + "duration": "PT1H58S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": false, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "13560", + "likeCount": "144", + "favoriteCount": "0", + "commentCount": "9" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "1994", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "Tjsdoxovb2U", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "0LO0R8ApUV1bFLrW5V2Gtxb71NQ", + "items": [ + { + "kind": "youtube#video", + "etag": "2F67KS2m-ZdNPJSt8_Q4N66Yxl4", + "id": "RgCENw09Dpk", + "snippet": { + "publishedAt": "2022-09-23T13:00:17Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "TOP 50 • Most Beautiful CITIES in the World 8K ULTRA HD", + "description": "TOP 50 of the Most Beautiful CITIES in the World 8K for your best 8k device. Travel around the planet earth 8K to see the best cities in the world.\nAre you making some plans to visit beautiful places in the planet earth? The world is full of beautiful and amazing places to visit like cities skylines where you can enjoy mother nature and amazing cities skylines around the world. We have compiled this list to help you plan your trip to see the most beautiful places on the planet.\nBeautiful cities are popular for their beauty, architecture of the buildings, people that live there, and most importantly the most popular food in the world. People who love traveling are always searching for a new city to go to.\nFor this reason, you need to know the particular information about these cities to safely visit and explore all the possible places around the planet earth 8K with the best cities.\n50 Most Beautiful Cities in the World:\n\n00:00 Intro 8K ULTRA HD\n00:10 50 Most Beautiful Cities in the World\n00:15 Paris, France\n00:48 New York, United States\n01:29 London, United Kingdom\n02:01 Venice, Italy\n02:48 Barcelona, Spain\n03:48 Amsterdam, Netherlands\n04:33 Rome, Italy\n05:14 Singapore\n05:47 Lisbon, Portugal\n06:43 Prague, Czech Republic\n08:12 Istanbul, Turkey\n09:02 Tokyo, Japan\n09:51 Vienna, Austria\n11:21 Buenos Aires, Argentina\n12:36 San Diego, United States\n14:00 Hong Kong\n15:16 Chicago, United States\n16:54 Bruges, Belgium\n18:09 Madrid, Spain\n19:25 Dubai, United Arab Emirates\n20:42 Edinburgh, United Kingdom\n22:08 Zurich, Switzerland\n23:26 Cuzco, Peru\n24:43 St. Petersburg, Russiaç\n25:59 Berlin, Germany\n27:15 Hanoi, Vietnam\n28:25 Queenstown, New Zeland\n28:37 Dubrovnik, Croatia\n30:58 Bangkok, Thailand\n32:24 Dublin, Ireland\n33:34 Bergen, Norway\n34:59 Beijing, China\n35:46 Athens, Greece\n37:08 Phuket, Thailand\n38:30 Edinburgh, Scotland\n40:08 Mexico City, Mexico\n41:18 Moscow, Russia\n42:29 Munich, Germany\n43:55 Cairo, Egypt\n44:48 Chicago, United States\n46:38 Zurich, Switzerland\n47:45 Copenhagen, Denmark\n48:56 Reykjavik, Iceland\n50:12 Kyoto, Japan\n51:18 Florence, Italy\n52:44 Porto, Portugal\n54:10 Jakarta, Indonesia\n55:09 Best Cities to live in the Planet\n55:14 Outro 8K ULTRA HD\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nAmazing & Beautiful Cities Around the Planet Earth 8K HDR 60FPS (FUHD) Demo TV 8K ULTRA HD\n\n#8K #CITIES #SKYLINE #BEAUTIFUL #RELAXING #WORLD #CITIESSKYLINES #TRAVEL #TOUR", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "tags": [ + "most beautiful places in the world", + "most beautiful cities in the world", + "most beautiful cities in usa", + "most beautiful cities in europe", + "most beautiful city in india", + "most beautiful cities in italy", + "most beautiful cities in america", + "8k", + "8k video ultra hd", + "8k video songs", + "8k music", + "piano music", + "piano music relaxing", + "4k video", + "best cities to live in america", + "best cities in the world", + "best cities to visit in usa", + "8k tv samsung", + "8k tv review", + "8k tv ps5", + "qled", + "oled", + "cities skylines", + "tv" + ], + "categoryId": "1", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "TOP 50 • Most Beautiful CITIES in the World 8K ULTRA HD", + "description": "TOP 50 of the Most Beautiful CITIES in the World 8K for your best 8k device. Travel around the planet earth 8K to see the best cities in the world.\nAre you making some plans to visit beautiful places in the planet earth? The world is full of beautiful and amazing places to visit like cities skylines where you can enjoy mother nature and amazing cities skylines around the world. We have compiled this list to help you plan your trip to see the most beautiful places on the planet.\nBeautiful cities are popular for their beauty, architecture of the buildings, people that live there, and most importantly the most popular food in the world. People who love traveling are always searching for a new city to go to.\nFor this reason, you need to know the particular information about these cities to safely visit and explore all the possible places around the planet earth 8K with the best cities.\n50 Most Beautiful Cities in the World:\n\n00:00 Intro 8K ULTRA HD\n00:10 50 Most Beautiful Cities in the World\n00:15 Paris, France\n00:48 New York, United States\n01:29 London, United Kingdom\n02:01 Venice, Italy\n02:48 Barcelona, Spain\n03:48 Amsterdam, Netherlands\n04:33 Rome, Italy\n05:14 Singapore\n05:47 Lisbon, Portugal\n06:43 Prague, Czech Republic\n08:12 Istanbul, Turkey\n09:02 Tokyo, Japan\n09:51 Vienna, Austria\n11:21 Buenos Aires, Argentina\n12:36 San Diego, United States\n14:00 Hong Kong\n15:16 Chicago, United States\n16:54 Bruges, Belgium\n18:09 Madrid, Spain\n19:25 Dubai, United Arab Emirates\n20:42 Edinburgh, United Kingdom\n22:08 Zurich, Switzerland\n23:26 Cuzco, Peru\n24:43 St. Petersburg, Russiaç\n25:59 Berlin, Germany\n27:15 Hanoi, Vietnam\n28:25 Queenstown, New Zeland\n28:37 Dubrovnik, Croatia\n30:58 Bangkok, Thailand\n32:24 Dublin, Ireland\n33:34 Bergen, Norway\n34:59 Beijing, China\n35:46 Athens, Greece\n37:08 Phuket, Thailand\n38:30 Edinburgh, Scotland\n40:08 Mexico City, Mexico\n41:18 Moscow, Russia\n42:29 Munich, Germany\n43:55 Cairo, Egypt\n44:48 Chicago, United States\n46:38 Zurich, Switzerland\n47:45 Copenhagen, Denmark\n48:56 Reykjavik, Iceland\n50:12 Kyoto, Japan\n51:18 Florence, Italy\n52:44 Porto, Portugal\n54:10 Jakarta, Indonesia\n55:09 Best Cities to live in the Planet\n55:14 Outro 8K ULTRA HD\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nAmazing & Beautiful Cities Around the Planet Earth 8K HDR 60FPS (FUHD) Demo TV 8K ULTRA HD\n\n#8K #CITIES #SKYLINE #BEAUTIFUL #RELAXING #WORLD #CITIESSKYLINES #TRAVEL #TOUR" + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT55M25S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "1944298", + "likeCount": "10956", + "favoriteCount": "0", + "commentCount": "219" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "2491", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "RgCENw09Dpk", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "gGjpu2Sa_2BuYxhrTH9ienfnzLU", + "items": [ + { + "kind": "youtube#video", + "etag": "XSL6tHPmxD1QQBY7Ol7o5EwETbM", + "id": "vQoR7gJTirk", + "snippet": { + "publishedAt": "2021-06-25T13:00:34Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "The Colors of the Ocean 8K ULTRA HD - The Best 8K Sea Animals for Relaxation & Calming Music", + "description": "THE COLORS OF THE OCEAN is a beautiful and RELAXING 8K Film about Sea Life and Marine Animals. In this video, we can watch marine animals from all over the world, with beautiful colors and shapes for relaxing sleep, or relaxation time.\nIt is estimated that 70 and 80 percent of all life on earth is below the ocean's surface and the oceans contain 99 percent of the planet's living space. Less than 11% of that space has been explored by humans. About 85 percent of the area and 90 percent of the volume constitute the dark and cold environment that we call the deep sea. The average depth of the ocean is 3,761 meters. The average height of the terrain is 850 meters.\nSo there are at least 236,878 marine species, but most likely there are at least 750,000 marine species, and possibly up to 25 million marine species. That's amazing!\nThe lowest known point on our Earth, called Challenger Deep, is 11,034 meters deep, in the Mariana Trench in the western Pacific. To get an idea of ​​how deep that is, if I could take Mount Everest and place it at the bottom of that place, there would still be more than a mile of the ocean above. The Dead Sea is the lowest land point on Earth with an elevation of 396 meters below sea level.\n\nSome Facts about the ocean and Sea Life:\n\n- Ocean water looks blue and not transparent. Sunlight is made up of all colors. When it reaches the sea, this white light passes through the water, absorbing the red and orange tones and allowing the green and bluish tones to pass through.\n- The Pacific Ocean is the largest ocean in the world. It occupies a third of its surface and extends approximately 15,000 km from the Bering Sea bordering the Arctic in the north to the south with Antarctica.\n- The oceanic clam, a marine mollusk from the North Atlantic, is the oldest animal in history with an estimated age of 507 years. It is about 8 cm long.\n- The largest mountainous area in the world is under the sea and is known as the mid-ocean ridges that run through the middle of the Atlantic Ocean to the Indian and Pacific.\n\nfollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nThe Colors of the Ocean 8K ULTRA HD - The Best 8K Sea Animals for Relaxation & Calming Music (FUHD) Demo 8K ULTRA HD\n\n#8K #ANIMALS #AQUARIUM", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "tags": [ + "relax music (relaxation music)", + "aquarium relax music", + "sleep music", + "musica clasica relax", + "sleeping", + "relaxing", + "relax music", + "aquarium relax", + "relaxing music", + "background music", + "aquarium", + "underwater", + "screensaver", + "aquarium video", + "4k resolution", + "fish tank (film)", + "4k video", + "coral reef", + "fish tank", + "stress relief", + "relaxing aquarium", + "8k ultra hd", + "8k video ultra hd", + "8k aquarium", + "8k tv samsung", + "8k tv review", + "4k tv test", + "8k ocean video", + "8k animals", + "wildlife 8k", + "4k aquarium video ultra hd" + ], + "categoryId": "1", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "The Colors of the Ocean 8K ULTRA HD - The Best 8K Sea Animals for Relaxation & Calming Music", + "description": "THE COLORS OF THE OCEAN is a beautiful and RELAXING 8K Film about Sea Life and Marine Animals. In this video, we can watch marine animals from all over the world, with beautiful colors and shapes for relaxing sleep, or relaxation time.\nIt is estimated that 70 and 80 percent of all life on earth is below the ocean's surface and the oceans contain 99 percent of the planet's living space. Less than 11% of that space has been explored by humans. About 85 percent of the area and 90 percent of the volume constitute the dark and cold environment that we call the deep sea. The average depth of the ocean is 3,761 meters. The average height of the terrain is 850 meters.\nSo there are at least 236,878 marine species, but most likely there are at least 750,000 marine species, and possibly up to 25 million marine species. That's amazing!\nThe lowest known point on our Earth, called Challenger Deep, is 11,034 meters deep, in the Mariana Trench in the western Pacific. To get an idea of ​​how deep that is, if I could take Mount Everest and place it at the bottom of that place, there would still be more than a mile of the ocean above. The Dead Sea is the lowest land point on Earth with an elevation of 396 meters below sea level.\n\nSome Facts about the ocean and Sea Life:\n\n- Ocean water looks blue and not transparent. Sunlight is made up of all colors. When it reaches the sea, this white light passes through the water, absorbing the red and orange tones and allowing the green and bluish tones to pass through.\n- The Pacific Ocean is the largest ocean in the world. It occupies a third of its surface and extends approximately 15,000 km from the Bering Sea bordering the Arctic in the north to the south with Antarctica.\n- The oceanic clam, a marine mollusk from the North Atlantic, is the oldest animal in history with an estimated age of 507 years. It is about 8 cm long.\n- The largest mountainous area in the world is under the sea and is known as the mid-ocean ridges that run through the middle of the Atlantic Ocean to the Indian and Pacific.\n\nfollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nThe Colors of the Ocean 8K ULTRA HD - The Best 8K Sea Animals for Relaxation & Calming Music (FUHD) Demo 8K ULTRA HD\n\n#8K #ANIMALS #AQUARIUM" + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT34M31S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "10796376", + "likeCount": "50521", + "favoriteCount": "0", + "commentCount": "981" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "2416", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "vQoR7gJTirk", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "BpeO8E_zqqUMwbPqafuluYwskrI", + "items": [ + { + "kind": "youtube#video", + "etag": "mW45uTdk5AfVazoC61Bi8K51l40", + "id": "YFhwEJosUsU", + "snippet": { + "publishedAt": "2022-09-02T13:00:15Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "TOP 50 • Most Beautiful Places in the World 8K ULTRA HD", + "description": "TOP 50 - In this video you will find a TOP 50 of the Most Beautiful Places in the World 8K. You will take a tour around the world to see the best places on the planet earth 8K.\nIn this video you will see the amazing Halong Bay in Vietnam that for many, the seascape of Ha Long Bay is one of the most beautiful beaches in the world. Cruises sail emerald green waters among thousands of rugged islands and islets with islands and most amazing landscapes.\nPamukkale Is The Most Visited Individual Site in All of Turkey! Not Istanbul's Hagia Sophia. Not the ancient ruins of Ephesus.\nKrabi is famous for its scenic view and breathtaking beaches and Islands. Its coral reef vistas are also one of the world’s most beautiful, which makes the City a great spot for coral and fish video.\nFiordland is one of the most dramatic and beautiful parts of New Zealand. Absorb the breathtaking treasures of this region by water, air or hiking.\nMu Cang Chai is home to some of Asia’s most magnificent cultivated lands. Rice terraces coil in parts around the hills to spectacular effect, luring photographers, hikers, and amazing motorbikers.\nThis citadel in the clouds was abandoned only 100 years later but Spanish invaders never found Machu Picchu. It was left to nature before explorer Hiram Bingham caught wind of it on an expedition in 1911 and decided to investigate. A hidden city protected by the mountains, and still wonderfully inaccessible other than by foot or train, Machu Picchu is now a New Seven Wonders of the World.\nThe Great Wall of China is one of the greatest sights in the world, the longest wall in the world, an awe-inspiring feat of ancient defensive architecture.\nLocated on the northern side of Greece, Meteora is included in the World Heritage List. Dotted with towering rocks, it boasts a breathtaking landscape, creating otherworldly beautiful scenery.\nBe sure to visit Keukenhof, where you will experience the gorgeous views of blooming Dutch tulips and other flowers for which Holland is famous. Keukenhof is the most famous and largest flower park in the world and lies not far from Amsterdam.\nThe island is actually a group of islands consisting of Thira, Thirassia, Aspronissi, Palea and Nea Kameni in the southernmost part of the Cyclades.\nOne highlight of the trails inside the Torres del Paine National Park The viewpoint over the Grey lake and glaciar in chile.\nNorway's Lofoten Islands are referred to as the Lofoten Wall because they are vertical rows of granite shooting out of the Arctic Sea.\nThe Amalfi Coast is a 34-mile-long region in Campania, Italy. \nCappadocia is a beautiful region in central Turkey famous for its fairytale scenery.\nAntarctica is the coldest, windiest and driest continent. It contains 90 percent of all of the ice on Earth 8K.\n\nList of the Most Beautiful Places in the Planet Earth 8K:\n00:00 Intro 8K ULTRA HD\n00:10 Halong Bay, Vietnam\n00:46 Pamukkale, Turkey\n01:25 Plitvice Lakes National Park, Croatia\n02:12 Krabi, Thailand\n03:12 Fiordland, New Zeland\n03:58 Mu Cang Chai, Vietnam\n04:57 Machu Picchu, Peru\n05:29 The Great Wall of China\n06:19 Meteora, Thessaly, Greece\n07:18 Keukenhof Gardens, Netherlands\n08:16 Santorini Island, Greece\n09:09 Torres del Paine, Chile\n09:56 Lofoten Islands, Norway\n11:38 Amalfi Coast, Italy\n12:48 Cappadocia, Turkey\n14:02 Fiji\n15:38 Fjords, Norway\n17:09 Antarctica\n19:10 Bagan, Myanmar\n20:29 Dubai, United Arab Emirates\n21:54 Maldives\n23:47 Monument Valley, USA\n25:18 Iguazu Falls, Brasil - Argentina\n26:26 Swiss Alps, Switzerland\n27:49 Angkor Wat, Cambodia\n29:03 Fernando de Noronha, Brazil\n30:22 Lisbon, Portugal\n31:58 Paris, France\n33:25 Cape Town, South Africa\n34:22 Himalayas, Nepal\n35:22 Venice, Italy\n36:55 Zhangye Danxia, China\n37:52 Sossusvlei, Namibia\n38:57 Forbiden City, China\n38:50 Petra, Jordan\n40:36 Zlatni Rat, Croatia\n42:00 Barcelona, Spain\n43:12 Giza, Egypt\n44:23 Atacama Desert, Chile\n45:30 Okavango Delta, Botswana\n46:45 Whitsunday, Australia\n47:28 Cinque Terre, Italy\n48:54 Neuschwanstein Castle, Germany\n50:01 Tuscany, Italy\n51:45 Sahara Desert, Africa\n53:25 Bamboo Forest, Japan\n54:32 Lake Bled, Slovenia\n55:54 Li River, China\n57:43 Zakynthos, Greece\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\n\nTOP 50 Most Beautiful Places in the World 8K ULTRA HD 8K HDR 60FPS (FUHD) Demo TV 8K ULTRA HD\n\n#8K #MOST #BEAUTIFUL #PLACES #PLANET #EARTH #WORLD #TOP50", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "tags": [ + "most beautiful places in the world", + "most beautiful music", + "top 50 songs", + "top 100", + "top 10", + "top 20", + "top 50 most beautiful places in the world", + "top 50 most beautiful cities in the world", + "top 50 most beautiful countries in the world", + "8k ultra hd", + "4k video", + "8k", + "8k earth", + "8k planet earth", + "8k tv", + "8k hdr", + "8k hdr dolby vision", + "most beautiful places on earth", + "beautiful places in the world", + "nature sounds relaxing music", + "relaxing music", + "oled", + "qled", + "8k tv samsung", + "4k tv", + "tv test", + "dubai", + "4k" + ], + "categoryId": "1", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "TOP 50 • Most Beautiful Places in the World 8K ULTRA HD", + "description": "TOP 50 - In this video you will find a TOP 50 of the Most Beautiful Places in the World 8K. You will take a tour around the world to see the best places on the planet earth 8K.\nIn this video you will see the amazing Halong Bay in Vietnam that for many, the seascape of Ha Long Bay is one of the most beautiful beaches in the world. Cruises sail emerald green waters among thousands of rugged islands and islets with islands and most amazing landscapes.\nPamukkale Is The Most Visited Individual Site in All of Turkey! Not Istanbul's Hagia Sophia. Not the ancient ruins of Ephesus.\nKrabi is famous for its scenic view and breathtaking beaches and Islands. Its coral reef vistas are also one of the world’s most beautiful, which makes the City a great spot for coral and fish video.\nFiordland is one of the most dramatic and beautiful parts of New Zealand. Absorb the breathtaking treasures of this region by water, air or hiking.\nMu Cang Chai is home to some of Asia’s most magnificent cultivated lands. Rice terraces coil in parts around the hills to spectacular effect, luring photographers, hikers, and amazing motorbikers.\nThis citadel in the clouds was abandoned only 100 years later but Spanish invaders never found Machu Picchu. It was left to nature before explorer Hiram Bingham caught wind of it on an expedition in 1911 and decided to investigate. A hidden city protected by the mountains, and still wonderfully inaccessible other than by foot or train, Machu Picchu is now a New Seven Wonders of the World.\nThe Great Wall of China is one of the greatest sights in the world, the longest wall in the world, an awe-inspiring feat of ancient defensive architecture.\nLocated on the northern side of Greece, Meteora is included in the World Heritage List. Dotted with towering rocks, it boasts a breathtaking landscape, creating otherworldly beautiful scenery.\nBe sure to visit Keukenhof, where you will experience the gorgeous views of blooming Dutch tulips and other flowers for which Holland is famous. Keukenhof is the most famous and largest flower park in the world and lies not far from Amsterdam.\nThe island is actually a group of islands consisting of Thira, Thirassia, Aspronissi, Palea and Nea Kameni in the southernmost part of the Cyclades.\nOne highlight of the trails inside the Torres del Paine National Park The viewpoint over the Grey lake and glaciar in chile.\nNorway's Lofoten Islands are referred to as the Lofoten Wall because they are vertical rows of granite shooting out of the Arctic Sea.\nThe Amalfi Coast is a 34-mile-long region in Campania, Italy. \nCappadocia is a beautiful region in central Turkey famous for its fairytale scenery.\nAntarctica is the coldest, windiest and driest continent. It contains 90 percent of all of the ice on Earth 8K.\n\nList of the Most Beautiful Places in the Planet Earth 8K:\n00:00 Intro 8K ULTRA HD\n00:10 Halong Bay, Vietnam\n00:46 Pamukkale, Turkey\n01:25 Plitvice Lakes National Park, Croatia\n02:12 Krabi, Thailand\n03:12 Fiordland, New Zeland\n03:58 Mu Cang Chai, Vietnam\n04:57 Machu Picchu, Peru\n05:29 The Great Wall of China\n06:19 Meteora, Thessaly, Greece\n07:18 Keukenhof Gardens, Netherlands\n08:16 Santorini Island, Greece\n09:09 Torres del Paine, Chile\n09:56 Lofoten Islands, Norway\n11:38 Amalfi Coast, Italy\n12:48 Cappadocia, Turkey\n14:02 Fiji\n15:38 Fjords, Norway\n17:09 Antarctica\n19:10 Bagan, Myanmar\n20:29 Dubai, United Arab Emirates\n21:54 Maldives\n23:47 Monument Valley, USA\n25:18 Iguazu Falls, Brasil - Argentina\n26:26 Swiss Alps, Switzerland\n27:49 Angkor Wat, Cambodia\n29:03 Fernando de Noronha, Brazil\n30:22 Lisbon, Portugal\n31:58 Paris, France\n33:25 Cape Town, South Africa\n34:22 Himalayas, Nepal\n35:22 Venice, Italy\n36:55 Zhangye Danxia, China\n37:52 Sossusvlei, Namibia\n38:57 Forbiden City, China\n38:50 Petra, Jordan\n40:36 Zlatni Rat, Croatia\n42:00 Barcelona, Spain\n43:12 Giza, Egypt\n44:23 Atacama Desert, Chile\n45:30 Okavango Delta, Botswana\n46:45 Whitsunday, Australia\n47:28 Cinque Terre, Italy\n48:54 Neuschwanstein Castle, Germany\n50:01 Tuscany, Italy\n51:45 Sahara Desert, Africa\n53:25 Bamboo Forest, Japan\n54:32 Lake Bled, Slovenia\n55:54 Li River, China\n57:43 Zakynthos, Greece\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\n\nTOP 50 Most Beautiful Places in the World 8K ULTRA HD 8K HDR 60FPS (FUHD) Demo TV 8K ULTRA HD\n\n#8K #MOST #BEAUTIFUL #PLACES #PLANET #EARTH #WORLD #TOP50" + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT59M28S", + "dimension": "2d", + "definition": "hd", + "caption": "true", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "5609300", + "likeCount": "20608", + "favoriteCount": "0", + "commentCount": "243" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "3480", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "YFhwEJosUsU", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "W19-kZWJv7bS3C_3MW1r29mB5xw", + "items": [ + { + "kind": "youtube#video", + "etag": "yi1Csd1tQjscI4nkwKwDZNoEIjQ", + "id": "nq4tT68UoCg", + "snippet": { + "publishedAt": "2022-01-05T17:54:39Z", + "channelId": "UCkFeoNSqYTa7trn75WM9tsg", + "title": "✨ Space Ambient Music • Deep Relaxation Space Journey [ 4K UHD ]", + "description": "Space Ambient Music [ Space Exploration ]. It is an excellent ambient Cosmic soundscape Background for Space exploring, stargazing, learning astronomy, Dreaming, Soul Healing, Stress Relief and complete relaxation. Also you can try to use it while creating arts, writing, studying etc. Use it for Universe Exploring, Astronomy, Astral Projection, for creating continues cosmic mood for dreaming and reading fantastic, exploring outer space, gaming and coding\n\n🎵 Music: Space Exploration \n Album: Starfield\n https://spoti.fi/39EL8F0\n https://apple.co/3mXohYu \n💎 Animation: by Blue Wave Studio\nⓒ Copyrights: Blue Wave Studio\n\n#spacemusic\n#spaceambient\n#ambient", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Relaxation Ambient Music", + "categoryId": "10", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "✨ Space Ambient Music • Deep Relaxation Space Journey [ 4K UHD ]", + "description": "Space Ambient Music [ Space Exploration ]. It is an excellent ambient Cosmic soundscape Background for Space exploring, stargazing, learning astronomy, Dreaming, Soul Healing, Stress Relief and complete relaxation. Also you can try to use it while creating arts, writing, studying etc. Use it for Universe Exploring, Astronomy, Astral Projection, for creating continues cosmic mood for dreaming and reading fantastic, exploring outer space, gaming and coding\n\n🎵 Music: Space Exploration \n Album: Starfield\n https://spoti.fi/39EL8F0\n https://apple.co/3mXohYu \n💎 Animation: by Blue Wave Studio\nⓒ Copyrights: Blue Wave Studio\n\n#spacemusic\n#spaceambient\n#ambient" + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT3H34M22S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "1874936", + "likeCount": "23300", + "favoriteCount": "0", + "commentCount": "549" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "1271", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "nq4tT68UoCg", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "jXlxWI2x2DdAW5juzIftZizW4vU", + "items": [ + { + "kind": "youtube#video", + "etag": "saOa0VtlQYqDD-XJXvjKb6MFy6g", + "id": "hpfVMPCR3xA", + "snippet": { + "publishedAt": "2021-08-08T05:28:13Z", + "channelId": "UCS4jPUCax8d3f-uke--YXXQ", + "title": "FLYING OVER CANADA (4K UHD) - Relaxing Music With Stunning Beautiful Nature (4K Video Ultra HD)", + "description": "Welcome to Earth Relaxation !\nCanada is a country in North America. Its ten provinces and three territories extend from the Atlantic to the Pacific and northward into the Arctic Ocean, covering 9.98 million square kilometres (3.85 million square miles), making it the world's second-largest country by total area. Its southern and western border with the United States, stretching 8,891 kilometres (5,525 mi), is the world's longest bi-national land border. Canada's capital is Ottawa, and its three largest metropolitan areas are Toronto, Montreal, and Vancouver. A highly developed country, Canada has the seventeenth-highest nominal per-capita income globally and the sixteenth-highest ranking in the Human Development Index. Its advanced economy is the tenth-largest in the world, relying chiefly upon its abundant natural resources and well-developed international trade networks.\nMusic has so many benefits, and one of them is that it calms your nerves down. It's always a good idea to listen to some background music while you're doing something. So here are some relaxing piano pieces with 4k nature videos that will help you relax, feel relaxed, and get ready for bed.\nIn this video, I'm going to show you my favorite nature video that will help you relax and improve your mood. It's a 4k video with relaxing music and calming nature sounds. There are no talking in this video so you can enjoy the natural sound of the forest, the sound of a river, and some birds chirping.\nWatch the 4k ultra high definition video in this video in somewhere at nail salon, public transport or restaurant. Relaxing music is playing in the background. Try out this 4k ultra high definition video let me know what you think in the comments below!.\n▽ Follow Earth Relaxation\n➤ Youtube → https://www.youtube.com/channel/UCS4jPUCax8d3f-uke--YXXQ\n#earthrelaxation​ #relaxingmusic​ #4kcanada\n----------------------------------------------------------------------\nMusic provided by EMVN\nSubmit your music: http://emvn.co/submitDemo\n📌 Contacts: copyright.thstudio@gmail.com, network@emvn.co\nTrack list:\n0:0:0 | 1 . Relax\n0:4:54 | 2 . Calm\n0:9:46 | 3 . Beach\n0:14:30 | 4 . Water\n\nFollow Artists:\nhttps://emvn.fanlink.to/melosy\n----------------------------------------------------------------------\n►All rights belong to their respective owners.\n✔ This video was given a special license directly from the artists and the right holders.", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Earth Relaxation", + "tags": [ + "scenic relaxation", + "4k", + "4k video", + "4k video 60fps", + "video 4k", + "4k videos", + "relax 4k", + "zen", + "ultra hd", + "relaxing music", + "bgm", + "background music", + "soothing relaxation", + "piano relax", + "piano relaxing", + "nature sounds", + "relax music", + "spa music", + "meditation music", + "music for meditation", + "music for sleeping", + "healing music", + "relaxation music", + "stunning nature", + "relax", + "sleep music", + "dream music", + "stress relief", + "calm", + "drone film", + "aerial film", + "simple happiness", + "instrumental music", + "canada", + "canada 4k" + ], + "categoryId": "10", + "liveBroadcastContent": "none", + "localized": { + "title": "FLYING OVER CANADA (4K UHD) - Relaxing Music With Stunning Beautiful Nature (4K Video Ultra HD)", + "description": "Welcome to Earth Relaxation !\nCanada is a country in North America. Its ten provinces and three territories extend from the Atlantic to the Pacific and northward into the Arctic Ocean, covering 9.98 million square kilometres (3.85 million square miles), making it the world's second-largest country by total area. Its southern and western border with the United States, stretching 8,891 kilometres (5,525 mi), is the world's longest bi-national land border. Canada's capital is Ottawa, and its three largest metropolitan areas are Toronto, Montreal, and Vancouver. A highly developed country, Canada has the seventeenth-highest nominal per-capita income globally and the sixteenth-highest ranking in the Human Development Index. Its advanced economy is the tenth-largest in the world, relying chiefly upon its abundant natural resources and well-developed international trade networks.\nMusic has so many benefits, and one of them is that it calms your nerves down. It's always a good idea to listen to some background music while you're doing something. So here are some relaxing piano pieces with 4k nature videos that will help you relax, feel relaxed, and get ready for bed.\nIn this video, I'm going to show you my favorite nature video that will help you relax and improve your mood. It's a 4k video with relaxing music and calming nature sounds. There are no talking in this video so you can enjoy the natural sound of the forest, the sound of a river, and some birds chirping.\nWatch the 4k ultra high definition video in this video in somewhere at nail salon, public transport or restaurant. Relaxing music is playing in the background. Try out this 4k ultra high definition video let me know what you think in the comments below!.\n▽ Follow Earth Relaxation\n➤ Youtube → https://www.youtube.com/channel/UCS4jPUCax8d3f-uke--YXXQ\n#earthrelaxation​ #relaxingmusic​ #4kcanada\n----------------------------------------------------------------------\nMusic provided by EMVN\nSubmit your music: http://emvn.co/submitDemo\n📌 Contacts: copyright.thstudio@gmail.com, network@emvn.co\nTrack list:\n0:0:0 | 1 . Relax\n0:4:54 | 2 . Calm\n0:9:46 | 3 . Beach\n0:14:30 | 4 . Water\n\nFollow Artists:\nhttps://emvn.fanlink.to/melosy\n----------------------------------------------------------------------\n►All rights belong to their respective owners.\n✔ This video was given a special license directly from the artists and the right holders." + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT11H55M", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "2469341", + "likeCount": "9732", + "favoriteCount": "0", + "commentCount": "272" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "2340", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "hpfVMPCR3xA", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "328CcyeZl9Oo4tJ329OKRxgKHWI", + "items": [ + { + "kind": "youtube#video", + "etag": "oTYO1RgHPmQJcmrId6Bs_yysNkQ", + "id": "2OEL4P1Rz04", + "snippet": { + "publishedAt": "2019-09-04T13:08:32Z", + "channelId": "UCjzHeG1KWoonmf9d5KBvSiw", + "title": "Beautiful Relaxing Music for Stress Relief • Meditation Music, Sleep Music, Ambient Study Music", + "description": "Beautiful relaxing music for stress relief, composed by Peder B. Helland. This instrumental music (\"The Hidden Valley\") works well as sleep music, ambient study music, meditation music or relaxation music. Stream or download music from Soothing Relaxation: https://soothingrelaxation.lnk.to/listenYL\n\n💿 Track information:\nTitle: The Hidden Valley \nComposer: Peder B. Helland\nIndex: ★183\nAlbum: Flying\nBuy or stream this album: https://soothingrelaxation.com/products/flying-album\nBuy this track: https://soothingrelaxation.com/products/the-hidden-valley\nLicense this track: https://soothingrelaxation.com/products/the-hidden-valley-license\n\nFollow Soothing Relaxation on...\nSoothing Relaxation: https://soothingrelaxation.lnk.to/websiteYL\nFacebook: https://soothingrelaxation.lnk.to/FacebookYL\nInstagram: https://soothingrelaxation.lnk.to/InstagramYL\nSpotify: https://soothingrelaxation.lnk.to/listenYL/spotify\nApple Music: https://soothingrelaxation.lnk.to/listenYL/applemusic\nYouTube Music: https://soothingrelaxation.lnk.to/listenYL/youtubemusic\nAmazon Music: https://soothingrelaxation.lnk.to/listenYL/amazonmusic\nDeezer: https://soothingrelaxation.lnk.to/listenYL/deezer\n\nFollow Peder B. Helland on...\nWebsite: https://pederbhelland.lnk.to/websiteYL\nFacebook: https://pederbhelland.lnk.to/facebookYL\nInstagram: https://pederbhelland.lnk.to/instagramYL\n\nListen to our playlists on other music services: https://www.soothingplaylists.com/\nListen to more relaxing music: https://www.youtube.com/playlist?list=PLQ_PIlf6OzqL3BE0rB6clb9IzLLkkSKUF\nGet a free music download and stay updated with our newsletter: https://soothingrelaxation.lnk.to/newsletterYL\n\n📜 Message from the composer and creator of Soothing Relaxation:\n\"I am a composer from Norway and I started this channel with a simple vision: to create a place that you can visit whenever you want to sit down and relax. I compose music that often can be described as sleep music, calm music, yoga music, study music, peaceful music, beautiful music and relaxing music. I love to compose music and I put a lot of work into it. \n\nThank you very much for listening and for leaving feedback. Every single day I am completely astonished by all your warm support and it really inspires me to work even harder on my music. If you enjoy my work, I would be very happy if you decided to subscribe and join our community. Have a wonderful day or evening!\"\n\n- Peder B. Helland, composer for Soothing Relaxation\n\n© Copyright:\nMusic composed/arranged by Peder B. Helland. \nFootage/photos licensed from:\n• iStockPhoto: Treedeo, Yiming Li, Filmovar, MediaProduction, luza studios, ZoneCreative, SimonSkafar, captamotion, lavoview, f9photos, bo1982, sergeysxp, SimonSkafar, nattanan726, rmnunes, Forrestbro, crbellette, Mumemories, phaitoons, Yiming Li, komisar, ibigfish, gorodenkoff, FatCamera, SimonSkafar, JohnFScott, phaitoons, captamotion, Schroptschop, luza studios, Onfokus, DeoTree, Mumemories, superoke, NanoStockk\n• Pond5: azgek1, pavlas24, aflomotion \n• Videoblocks: jakerbreaker, cookelma, VladyslavStarozhylov, taden, guillaumelynn, Vadim_Key\n\n☀️ Relevant hashtags:\n#relaxingmusic, #relax, #soothingrelaxation, #music, #sleep", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Soothing Relaxation", + "tags": [ + "calm", + "calm music", + "calming", + "calming music", + "cello", + "dormir", + "détendre", + "guitar", + "insomnia", + "meditar", + "meditation", + "meditation music", + "peaceful", + "peaceful music", + "peder b. helland", + "peter b. helland", + "piano", + "piano music", + "relajarse", + "relax", + "relaxante", + "relaxation", + "relaxing", + "relaxing music", + "sleep", + "sleep music", + "sleeping", + "sleeping music", + "smoothing relaxation", + "soothing", + "soothing music", + "soothing relaxation", + "study music" + ], + "categoryId": "10", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "Beautiful Relaxing Music for Stress Relief • Meditation Music, Sleep Music, Ambient Study Music", + "description": "Beautiful relaxing music for stress relief, composed by Peder B. Helland. This instrumental music (\"The Hidden Valley\") works well as sleep music, ambient study music, meditation music or relaxation music. Stream or download music from Soothing Relaxation: https://soothingrelaxation.lnk.to/listenYL\n\n💿 Track information:\nTitle: The Hidden Valley \nComposer: Peder B. Helland\nIndex: ★183\nAlbum: Flying\nBuy or stream this album: https://soothingrelaxation.com/products/flying-album\nBuy this track: https://soothingrelaxation.com/products/the-hidden-valley\nLicense this track: https://soothingrelaxation.com/products/the-hidden-valley-license\n\nFollow Soothing Relaxation on...\nSoothing Relaxation: https://soothingrelaxation.lnk.to/websiteYL\nFacebook: https://soothingrelaxation.lnk.to/FacebookYL\nInstagram: https://soothingrelaxation.lnk.to/InstagramYL\nSpotify: https://soothingrelaxation.lnk.to/listenYL/spotify\nApple Music: https://soothingrelaxation.lnk.to/listenYL/applemusic\nYouTube Music: https://soothingrelaxation.lnk.to/listenYL/youtubemusic\nAmazon Music: https://soothingrelaxation.lnk.to/listenYL/amazonmusic\nDeezer: https://soothingrelaxation.lnk.to/listenYL/deezer\n\nFollow Peder B. Helland on...\nWebsite: https://pederbhelland.lnk.to/websiteYL\nFacebook: https://pederbhelland.lnk.to/facebookYL\nInstagram: https://pederbhelland.lnk.to/instagramYL\n\nListen to our playlists on other music services: https://www.soothingplaylists.com/\nListen to more relaxing music: https://www.youtube.com/playlist?list=PLQ_PIlf6OzqL3BE0rB6clb9IzLLkkSKUF\nGet a free music download and stay updated with our newsletter: https://soothingrelaxation.lnk.to/newsletterYL\n\n📜 Message from the composer and creator of Soothing Relaxation:\n\"I am a composer from Norway and I started this channel with a simple vision: to create a place that you can visit whenever you want to sit down and relax. I compose music that often can be described as sleep music, calm music, yoga music, study music, peaceful music, beautiful music and relaxing music. I love to compose music and I put a lot of work into it. \n\nThank you very much for listening and for leaving feedback. Every single day I am completely astonished by all your warm support and it really inspires me to work even harder on my music. If you enjoy my work, I would be very happy if you decided to subscribe and join our community. Have a wonderful day or evening!\"\n\n- Peder B. Helland, composer for Soothing Relaxation\n\n© Copyright:\nMusic composed/arranged by Peder B. Helland. \nFootage/photos licensed from:\n• iStockPhoto: Treedeo, Yiming Li, Filmovar, MediaProduction, luza studios, ZoneCreative, SimonSkafar, captamotion, lavoview, f9photos, bo1982, sergeysxp, SimonSkafar, nattanan726, rmnunes, Forrestbro, crbellette, Mumemories, phaitoons, Yiming Li, komisar, ibigfish, gorodenkoff, FatCamera, SimonSkafar, JohnFScott, phaitoons, captamotion, Schroptschop, luza studios, Onfokus, DeoTree, Mumemories, superoke, NanoStockk\n• Pond5: azgek1, pavlas24, aflomotion \n• Videoblocks: jakerbreaker, cookelma, VladyslavStarozhylov, taden, guillaumelynn, Vadim_Key\n\n☀️ Relevant hashtags:\n#relaxingmusic, #relax, #soothingrelaxation, #music, #sleep" + }, + "defaultAudioLanguage": "en-US" + }, + "contentDetails": { + "duration": "PT3H1M8S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "43034058", + "likeCount": "291322", + "favoriteCount": "0", + "commentCount": "13032" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "2457", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "2OEL4P1Rz04", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + } + ] +} diff --git a/src/data/realatedVideo.json b/src/data/realatedVideo.json new file mode 100644 index 0000000..2dcefdf --- /dev/null +++ b/src/data/realatedVideo.json @@ -0,0 +1,402 @@ +{ + "kind": "youtube#searchListResponse", + "etag": "3u37-IP1K48ZWezLAbQcCjAfOtU", + "items": [ + { + "kind": "youtube#searchResult", + "etag": "5XAnlK9_KLGIZS-oOusw9CqSm-8", + "id": { + "kind": "youtube#video", + "videoId": "QSNa8U1yGrM" + }, + "snippet": { + "publishedAt": "2021-05-03T00:20:58Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "EARTH in 8K ULTRA HD - Tour Through the Planet Earth - Best Places and Animals Relaxing Music 8K TV", + "description": "Despite its name, Earth may be the only planet in our solar system that has oceans. It is the fifth-largest planet in the solar system and perhaps the only one that harbors life.\n\nThe Earth's seas and oceans, which cover 70% of its surface, are home to a large amount of life. With an average depth of 4 km, they account for 97% of the water on the planet. In addition, they feature some impressive landforms: the most extensive mountain range, the Mid-Oceanic Ridge, is deep under the sea. Four times as long as the Andes, the Rocky Mountains, and the Himalayas arranged in a row, it stretches 65,000 km across the Arctic and the Atlantic.\n\nA study carried out jointly by the Universities of Münster, Cambridge, and the Zurich Technique showed that the age of the planet is between 4,400 million and 4,510 million years. So far, five mass extinctions have been recorded on the planet. The first occurred 440 million years ago and the last 65 million years ago. Michael Rampino, an Earth science expert at New York University, argues that it takes about 30 million years for the Solar System to cross the plane of the Milky Way. The presence of the system could be one of the reasons why comets' orbits are destabilized, launching them towards the planet. To this, he adds a possibility that is little studied today: dark matter.\n\n8.7 million species, a single planet. The ecosystems that we depend on, as humans, to survive are made up of around 8.7 million plant and animal species. At least this is confirmed by a study by the University of Hawaii (United States) carried out in 2011, which is said to be the most accurate to date. Of these, we only know 1.3 million. Unfortunately, WWF warns with its Living Planet report that, since the 70s of the last century, only the world population of vertebrates has been reduced by 60% due to global warming, the destruction of ecosystems, and the crisis of biodiversity caused by human action. It is in our power to care for and protect (and even discover) all those species that make our planet an (almost) inexhaustible source of life.\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaravia\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nEARTH in 8K ULTRA HD - Tour Through the Planet Earth - Best Places and Animals Relaxing Music 8K TV (FUHD) Demo 8K ULTRA HD\n\n#8K #PLANET #EARTH", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "liveBroadcastContent": "none", + "publishTime": "2021-05-03T00:20:58Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "0lzi4doh091CHcZkfX4Hegej0XA", + "id": { + "kind": "youtube#video", + "videoId": "hlWiI4xVXKY" + }, + "snippet": { + "publishedAt": "2018-10-07T06:28:56Z", + "channelId": "UCjzHeG1KWoonmf9d5KBvSiw", + "title": "Beautiful Relaxing Music • Peaceful Piano Music & Guitar Music | Sunny Mornings by @PederBHellandMusic", + "description": "Beautiful relaxing music by Peder B. Helland. Enjoy peaceful piano music and guitar music (\"Sunny Mornings\" ) with birds singing in the background. Stream or download music from Soothing Relaxation: https://soothingrelaxation.lnk.to/listenYL\n\n💿 Track information:\nTitle: Sunny Mornings \nComposer: @PederBHellandMusic \nIndex: ★151\nAlbum: Sunny Mornings\nBuy or stream this album: https://soothingrelaxation.lnk.to/sunny-mornings\nBuy this track: https://soothingrelaxation.com/products/sunny-mornings-beautiful-relaxing-music-151\nBuy this video as an MP3 file: https://soothingrelaxation.com/products/hlWiI4xVXKY\nLicense this track: https://soothingrelaxation.com/products/sunny-mornings-license\nSheet music: https://soothingrelaxation.com/products/sunny-mornings\n\nFollow Soothing Relaxation on...\nOur website: https://soothingrelaxation.lnk.to/websiteYL\nFacebook: https://soothingrelaxation.lnk.to/FacebookYL\nInstagram: https://soothingrelaxation.lnk.to/InstagramYL\nSpotify: https://soothingrelaxation.lnk.to/listenYL/spotify\nApple Music: https://soothingrelaxation.lnk.to/listenYL/applemusic\nYouTube Music: https://soothingrelaxation.lnk.to/listenYL/youtubemusic\nAmazon Music: https://soothingrelaxation.lnk.to/listenYL/amazonmusic\nDeezer: https://soothingrelaxation.lnk.to/listenYL/deezer\n\nFollow Peder B. Helland on...\nWebsite: https://pederbhelland.lnk.to/websiteYL\nFacebook: https://pederbhelland.lnk.to/facebookYL\nInstagram: https://pederbhelland.lnk.to/instagramYL\n\nListen to more relaxing music: https://www.youtube.com/playlist?list=PLQ_PIlf6OzqL3BE0rB6clb9IzLLkkSKUF\n\nGet a free music download and stay updated with our newsletter: https://soothingrelaxation.lnk.to/newsletterYL\n\n📜 Message from the composer and creator of Soothing Relaxation:\n\"I am a composer from Norway and I started this channel with a simple vision: to create a place that you can visit whenever you want to sit down and relax. I compose music that can be labeled as for example: sleep music, calm music, yoga music, study music, peaceful music, beautiful music and relaxing music. I love to compose music and I put a lot of work into it. \n\nThank you very much for listening and for leaving feedback. Every single day I am completely astonished by all your warm support and it really inspires me to work even harder on my music. If you enjoy my work, I would be very happy if you decided to subscribe and join our community. Have a wonderful day or evening!\"\n\n- Peder B. Helland, composer for Soothing Relaxation\n\n© Copyright:\nMusic composed by Peder B. Helland. \nFootage/photos licensed from:\n• Pond5: azgek1, pavlas24, aflomotion \n\n☀️ Relevant hashtags:\n#relaxingmusic, #relax, #soothingrelaxation, #music, #sleep", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Soothing Relaxation", + "liveBroadcastContent": "none", + "publishTime": "2018-10-07T06:28:56Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "IrvMgf146KXD8T5QIy7uL17ayfA", + "id": { + "kind": "youtube#video", + "videoId": "hpfVMPCR3xA" + }, + "snippet": { + "publishedAt": "2021-08-07T11:58:20Z", + "channelId": "UCS4jPUCax8d3f-uke--YXXQ", + "title": "FLYING OVER CANADA (4K UHD) - Relaxing Music With Stunning Beautiful Nature (4K Video Ultra HD)", + "description": "Welcome to Earth Relaxation !\nCanada is a country in North America. Its ten provinces and three territories extend from the Atlantic to the Pacific and northward into the Arctic Ocean, covering 9.98 million square kilometres (3.85 million square miles), making it the world's second-largest country by total area. Its southern and western border with the United States, stretching 8,891 kilometres (5,525 mi), is the world's longest bi-national land border. Canada's capital is Ottawa, and its three largest metropolitan areas are Toronto, Montreal, and Vancouver. A highly developed country, Canada has the seventeenth-highest nominal per-capita income globally and the sixteenth-highest ranking in the Human Development Index. Its advanced economy is the tenth-largest in the world, relying chiefly upon its abundant natural resources and well-developed international trade networks.\nMusic has so many benefits, and one of them is that it calms your nerves down. It's always a good idea to listen to some background music while you're doing something. So here are some relaxing piano pieces with 4k nature videos that will help you relax, feel relaxed, and get ready for bed.\nIn this video, I'm going to show you my favorite nature video that will help you relax and improve your mood. It's a 4k video with relaxing music and calming nature sounds. There are no talking in this video so you can enjoy the natural sound of the forest, the sound of a river, and some birds chirping.\nWatch the 4k ultra high definition video in this video in somewhere at nail salon, public transport or restaurant. Relaxing music is playing in the background. Try out this 4k ultra high definition video let me know what you think in the comments below!.\n▽ Follow Earth Relaxation\n➤ Youtube → https://www.youtube.com/channel/UCS4jPUCax8d3f-uke--YXXQ\n#earthrelaxation​ #relaxingmusic​ #4kcanada\n----------------------------------------------------------------------\nMusic provided by EMVN\nSubmit your music: http://emvn.co/submitDemo\n📌 Contacts: copyright.thstudio@gmail.com, network@emvn.co\nTrack list:\n0:0:0 | 1 . Relax\n0:4:54 | 2 . Calm\n0:9:46 | 3 . Beach\n0:14:30 | 4 . Water\n\nFollow Artists:\nhttps://emvn.fanlink.to/melosy\n----------------------------------------------------------------------\n►All rights belong to their respective owners.\n✔ This video was given a special license directly from the artists and the right holders.", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Earth Relaxation", + "liveBroadcastContent": "none", + "publishTime": "2021-08-07T11:58:20Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "tE-onscHNqnNdqU_CGuFgD58Jrg", + "id": { + "kind": "youtube#video", + "videoId": "Tjsdoxovb2U" + }, + "snippet": { + "publishedAt": "2023-01-13T17:17:12Z", + "channelId": "UCuaYvu45lq5fwmnv_zF8sng", + "title": "Norway - Scenic Relaxation Film 4k", + "description": "#nature #4kfilm #4knature #norway \nWatch this 4k video tour of Norway and experience the beautiful landscape and stunning culture first-hand. From the capital Oslo to the rugged mountain ranges of the Fjeldhjellet, this video will take you on a journey through one of the world's most beautiful countries.\n\nStep into the Norwegian wilderness and experience the natural beauty of this stunning country for yourself with this 4k video tour! With stunning landscapes and a culture steeped in history, Norway is a must-see destination for anyone visiting Europe. Experience this beautiful country in 4k quality with this video!\n\nOur other Films:\nIndonesia 4K - https://www.youtube.com/watch?v=nAfrCO28fVc\nThailand 4K - https://www.youtube.com/watch?v=sA2c9naaLTg\nSri Lanka 4K - https://www.youtube.com/watch?v=vdA8lrAoL9A\nUtah 4k - https://www.youtube.com/watch?v=s6Ak0Q41FcY\nItaly 4k - https://www.youtube.com/watch?v=ko5EIZM0gb8\n\nTimeline:\n00:00 Intro\n00:47 Lovatnet lake\n01:28 Trolltunga\n01:57 Langfoss waterfall\n02:25 Haukland Beach \n03:27 Alesund \n03:50 Hardanger Bridge \n05:00 Sognefjord\n06:07 Atlantic Ocean Road \n07:43 Lofoten island \n09:45 Henningsvaer\n10:53 Kragero \n12:48 Vøringsfossen waterfall \n13:43 Briksdalsbreen Glacier\n15:00 Hamningberg\n16:22 Trollstigen\n18:03 Seven Sisters Waterfall \n18:33 Pulpit rock\n20:10 Lovatnet lake\n20:57 Saltstraumen bridge \n21:44 Zakariasdamm\n22:15 Lindesnes Lighthouse\n23:39 Tromso\n25:29 North Cape\n01:00:43 Thanks for waching, save nature, save the planet\n\nMore inspiration: \nYouTube https://www.youtube.com/@Earth_to_inspire\nInstagram https://www.instagram.com/earth_to_inspire/\nTikTok https://www.tiktok.com/@earth_to_inspire?lang=en.\n\n#norway4k #dronevideo #droneview #relaxing #calmmusic #savetheworld #savethenature #savetheplanet", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Earth to inspire", + "liveBroadcastContent": "none", + "publishTime": "2023-01-13T17:17:12Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "vs3WO9PnY7wBrBeGxVuBojKt0eA", + "id": { + "kind": "youtube#video", + "videoId": "YFhwEJosUsU" + }, + "snippet": { + "publishedAt": "2022-08-20T02:42:35Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "TOP 50 • Most Beautiful Places in the World 8K ULTRA HD", + "description": "TOP 50 - In this video you will find a TOP 50 of the Most Beautiful Places in the World 8K. You will take a tour around the world to see the best places on the planet earth 8K.\nIn this video you will see the amazing Halong Bay in Vietnam that for many, the seascape of Ha Long Bay is one of the most beautiful beaches in the world. Cruises sail emerald green waters among thousands of rugged islands and islets with islands and most amazing landscapes.\nPamukkale Is The Most Visited Individual Site in All of Turkey! Not Istanbul's Hagia Sophia. Not the ancient ruins of Ephesus.\nKrabi is famous for its scenic view and breathtaking beaches and Islands. Its coral reef vistas are also one of the world’s most beautiful, which makes the City a great spot for coral and fish video.\nFiordland is one of the most dramatic and beautiful parts of New Zealand. Absorb the breathtaking treasures of this region by water, air or hiking.\nMu Cang Chai is home to some of Asia’s most magnificent cultivated lands. Rice terraces coil in parts around the hills to spectacular effect, luring photographers, hikers, and amazing motorbikers.\nThis citadel in the clouds was abandoned only 100 years later but Spanish invaders never found Machu Picchu. It was left to nature before explorer Hiram Bingham caught wind of it on an expedition in 1911 and decided to investigate. A hidden city protected by the mountains, and still wonderfully inaccessible other than by foot or train, Machu Picchu is now a New Seven Wonders of the World.\nThe Great Wall of China is one of the greatest sights in the world, the longest wall in the world, an awe-inspiring feat of ancient defensive architecture.\nLocated on the northern side of Greece, Meteora is included in the World Heritage List. Dotted with towering rocks, it boasts a breathtaking landscape, creating otherworldly beautiful scenery.\nBe sure to visit Keukenhof, where you will experience the gorgeous views of blooming Dutch tulips and other flowers for which Holland is famous. Keukenhof is the most famous and largest flower park in the world and lies not far from Amsterdam.\nThe island is actually a group of islands consisting of Thira, Thirassia, Aspronissi, Palea and Nea Kameni in the southernmost part of the Cyclades.\nOne highlight of the trails inside the Torres del Paine National Park The viewpoint over the Grey lake and glaciar in chile.\nNorway's Lofoten Islands are referred to as the Lofoten Wall because they are vertical rows of granite shooting out of the Arctic Sea.\nThe Amalfi Coast is a 34-mile-long region in Campania, Italy. \nCappadocia is a beautiful region in central Turkey famous for its fairytale scenery.\nAntarctica is the coldest, windiest and driest continent. It contains 90 percent of all of the ice on Earth 8K.\n\nList of the Most Beautiful Places in the Planet Earth 8K:\n00:00 Intro 8K ULTRA HD\n00:10 Halong Bay, Vietnam\n00:46 Pamukkale, Turkey\n01:25 Plitvice Lakes National Park, Croatia\n02:12 Krabi, Thailand\n03:12 Fiordland, New Zeland\n03:58 Mu Cang Chai, Vietnam\n04:57 Machu Picchu, Peru\n05:29 The Great Wall of China\n06:19 Meteora, Thessaly, Greece\n07:18 Keukenhof Gardens, Netherlands\n08:16 Santorini Island, Greece\n09:09 Torres del Paine, Chile\n09:56 Lofoten Islands, Norway\n11:38 Amalfi Coast, Italy\n12:48 Cappadocia, Turkey\n14:02 Fiji\n15:38 Fjords, Norway\n17:09 Antarctica\n19:10 Bagan, Myanmar\n20:29 Dubai, United Arab Emirates\n21:54 Maldives\n23:47 Monument Valley, USA\n25:18 Iguazu Falls, Brasil - Argentina\n26:26 Swiss Alps, Switzerland\n27:49 Angkor Wat, Cambodia\n29:03 Fernando de Noronha, Brazil\n30:22 Lisbon, Portugal\n31:58 Paris, France\n33:25 Cape Town, South Africa\n34:22 Himalayas, Nepal\n35:22 Venice, Italy\n36:55 Zhangye Danxia, China\n37:52 Sossusvlei, Namibia\n38:57 Forbiden City, China\n38:50 Petra, Jordan\n40:36 Zlatni Rat, Croatia\n42:00 Barcelona, Spain\n43:12 Giza, Egypt\n44:23 Atacama Desert, Chile\n45:30 Okavango Delta, Botswana\n46:45 Whitsunday, Australia\n47:28 Cinque Terre, Italy\n48:54 Neuschwanstein Castle, Germany\n50:01 Tuscany, Italy\n51:45 Sahara Desert, Africa\n53:25 Bamboo Forest, Japan\n54:32 Lake Bled, Slovenia\n55:54 Li River, China\n57:43 Zakynthos, Greece\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\n\nTOP 50 Most Beautiful Places in the World 8K ULTRA HD 8K HDR 60FPS (FUHD) Demo TV 8K ULTRA HD\n\n#8K #MOST #BEAUTIFUL #PLACES #PLANET #EARTH #WORLD #TOP50", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "liveBroadcastContent": "none", + "publishTime": "2022-08-20T02:42:35Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "HMaqXfV2hlnRHLuUTFXHwn60xbI", + "id": { + "kind": "youtube#video", + "videoId": "nq4tT68UoCg" + }, + "snippet": { + "publishedAt": "2022-01-05T16:59:13Z", + "channelId": "UCkFeoNSqYTa7trn75WM9tsg", + "title": "✨ Space Ambient Music • Deep Relaxation Space Journey [ 4K UHD ]", + "description": "Space Ambient Music [ Space Exploration ]. It is an excellent ambient Cosmic soundscape Background for Space exploring, stargazing, learning astronomy, Dreaming, Soul Healing, Stress Relief and complete relaxation. Also you can try to use it while creating arts, writing, studying etc. Use it for Universe Exploring, Astronomy, Astral Projection, for creating continues cosmic mood for dreaming and reading fantastic, exploring outer space, gaming and coding\n\n🎵 Music: Space Exploration \n Album: Starfield\n https://spoti.fi/39EL8F0\n https://apple.co/3mXohYu \n💎 Animation: by Blue Wave Studio\nⓒ Copyrights: Blue Wave Studio\n\n#spacemusic\n#spaceambient\n#ambient", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Relaxation Ambient Music", + "liveBroadcastContent": "none", + "publishTime": "2022-01-05T16:59:13Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "9oGs0OPqYP-U8YLf3qUwjY4XLyI", + "id": { + "kind": "youtube#video", + "videoId": "RgCENw09Dpk" + }, + "snippet": { + "publishedAt": "2022-09-17T02:50:31Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "TOP 50 • Most Beautiful CITIES in the World 8K ULTRA HD", + "description": "TOP 50 of the Most Beautiful CITIES in the World 8K for your best 8k device. Travel around the planet earth 8K to see the best cities in the world.\nAre you making some plans to visit beautiful places in the planet earth? The world is full of beautiful and amazing places to visit like cities skylines where you can enjoy mother nature and amazing cities skylines around the world. We have compiled this list to help you plan your trip to see the most beautiful places on the planet.\nBeautiful cities are popular for their beauty, architecture of the buildings, people that live there, and most importantly the most popular food in the world. People who love traveling are always searching for a new city to go to.\nFor this reason, you need to know the particular information about these cities to safely visit and explore all the possible places around the planet earth 8K with the best cities.\n50 Most Beautiful Cities in the World:\n\n00:00 Intro 8K ULTRA HD\n00:10 50 Most Beautiful Cities in the World\n00:15 Paris, France\n00:48 New York, United States\n01:29 London, United Kingdom\n02:01 Venice, Italy\n02:48 Barcelona, Spain\n03:48 Amsterdam, Netherlands\n04:33 Rome, Italy\n05:14 Singapore\n05:47 Lisbon, Portugal\n06:43 Prague, Czech Republic\n08:12 Istanbul, Turkey\n09:02 Tokyo, Japan\n09:51 Vienna, Austria\n11:21 Buenos Aires, Argentina\n12:36 San Diego, United States\n14:00 Hong Kong\n15:16 Chicago, United States\n16:54 Bruges, Belgium\n18:09 Madrid, Spain\n19:25 Dubai, United Arab Emirates\n20:42 Edinburgh, United Kingdom\n22:08 Zurich, Switzerland\n23:26 Cuzco, Peru\n24:43 St. Petersburg, Russiaç\n25:59 Berlin, Germany\n27:15 Hanoi, Vietnam\n28:25 Queenstown, New Zeland\n28:37 Dubrovnik, Croatia\n30:58 Bangkok, Thailand\n32:24 Dublin, Ireland\n33:34 Bergen, Norway\n34:59 Beijing, China\n35:46 Athens, Greece\n37:08 Phuket, Thailand\n38:30 Edinburgh, Scotland\n40:08 Mexico City, Mexico\n41:18 Moscow, Russia\n42:29 Munich, Germany\n43:55 Cairo, Egypt\n44:48 Chicago, United States\n46:38 Zurich, Switzerland\n47:45 Copenhagen, Denmark\n48:56 Reykjavik, Iceland\n50:12 Kyoto, Japan\n51:18 Florence, Italy\n52:44 Porto, Portugal\n54:10 Jakarta, Indonesia\n55:09 Best Cities to live in the Planet\n55:14 Outro 8K ULTRA HD\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nAmazing & Beautiful Cities Around the Planet Earth 8K HDR 60FPS (FUHD) Demo TV 8K ULTRA HD\n\n#8K #CITIES #SKYLINE #BEAUTIFUL #RELAXING #WORLD #CITIESSKYLINES #TRAVEL #TOUR", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "liveBroadcastContent": "none", + "publishTime": "2022-09-17T02:50:31Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "Ega2ZKTVBIIkrF0xOo9LEfx7Owg", + "id": { + "kind": "youtube#video", + "videoId": "2OEL4P1Rz04" + }, + "snippet": { + "publishedAt": "2019-09-04T06:50:42Z", + "channelId": "UCjzHeG1KWoonmf9d5KBvSiw", + "title": "Beautiful Relaxing Music for Stress Relief • Meditation Music, Sleep Music, Ambient Study Music", + "description": "Beautiful relaxing music for stress relief, composed by Peder B. Helland. This instrumental music (\"The Hidden Valley\") works well as sleep music, ambient study music, meditation music or relaxation music. Stream or download music from Soothing Relaxation: https://soothingrelaxation.lnk.to/listenYL\n\n💿 Track information:\nTitle: The Hidden Valley \nComposer: Peder B. Helland\nIndex: ★183\nAlbum: Flying\nBuy or stream this album: https://soothingrelaxation.com/products/flying-album\nBuy this track: https://soothingrelaxation.com/products/the-hidden-valley\nLicense this track: https://soothingrelaxation.com/products/the-hidden-valley-license\n\nFollow Soothing Relaxation on...\nSoothing Relaxation: https://soothingrelaxation.lnk.to/websiteYL\nFacebook: https://soothingrelaxation.lnk.to/FacebookYL\nInstagram: https://soothingrelaxation.lnk.to/InstagramYL\nSpotify: https://soothingrelaxation.lnk.to/listenYL/spotify\nApple Music: https://soothingrelaxation.lnk.to/listenYL/applemusic\nYouTube Music: https://soothingrelaxation.lnk.to/listenYL/youtubemusic\nAmazon Music: https://soothingrelaxation.lnk.to/listenYL/amazonmusic\nDeezer: https://soothingrelaxation.lnk.to/listenYL/deezer\n\nFollow Peder B. Helland on...\nWebsite: https://pederbhelland.lnk.to/websiteYL\nFacebook: https://pederbhelland.lnk.to/facebookYL\nInstagram: https://pederbhelland.lnk.to/instagramYL\n\nListen to our playlists on other music services: https://www.soothingplaylists.com/\nListen to more relaxing music: https://www.youtube.com/playlist?list=PLQ_PIlf6OzqL3BE0rB6clb9IzLLkkSKUF\nGet a free music download and stay updated with our newsletter: https://soothingrelaxation.lnk.to/newsletterYL\n\n📜 Message from the composer and creator of Soothing Relaxation:\n\"I am a composer from Norway and I started this channel with a simple vision: to create a place that you can visit whenever you want to sit down and relax. I compose music that often can be described as sleep music, calm music, yoga music, study music, peaceful music, beautiful music and relaxing music. I love to compose music and I put a lot of work into it. \n\nThank you very much for listening and for leaving feedback. Every single day I am completely astonished by all your warm support and it really inspires me to work even harder on my music. If you enjoy my work, I would be very happy if you decided to subscribe and join our community. Have a wonderful day or evening!\"\n\n- Peder B. Helland, composer for Soothing Relaxation\n\n© Copyright:\nMusic composed/arranged by Peder B. Helland. \nFootage/photos licensed from:\n• iStockPhoto: Treedeo, Yiming Li, Filmovar, MediaProduction, luza studios, ZoneCreative, SimonSkafar, captamotion, lavoview, f9photos, bo1982, sergeysxp, SimonSkafar, nattanan726, rmnunes, Forrestbro, crbellette, Mumemories, phaitoons, Yiming Li, komisar, ibigfish, gorodenkoff, FatCamera, SimonSkafar, JohnFScott, phaitoons, captamotion, Schroptschop, luza studios, Onfokus, DeoTree, Mumemories, superoke, NanoStockk\n• Pond5: azgek1, pavlas24, aflomotion \n• Videoblocks: jakerbreaker, cookelma, VladyslavStarozhylov, taden, guillaumelynn, Vadim_Key\n\n☀️ Relevant hashtags:\n#relaxingmusic, #relax, #soothingrelaxation, #music, #sleep", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Soothing Relaxation", + "liveBroadcastContent": "none", + "publishTime": "2019-09-04T06:50:42Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "IfqlEXrSTf6Z4SOm0mN3zjavftY", + "id": { + "kind": "youtube#video", + "videoId": "vQoR7gJTirk" + }, + "snippet": { + "publishedAt": "2021-06-19T00:43:51Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "The Colors of the Ocean 8K ULTRA HD - The Best 8K Sea Animals for Relaxation & Calming Music", + "description": "THE COLORS OF THE OCEAN is a beautiful and RELAXING 8K Film about Sea Life and Marine Animals. In this video, we can watch marine animals from all over the world, with beautiful colors and shapes for relaxing sleep, or relaxation time.\nIt is estimated that 70 and 80 percent of all life on earth is below the ocean's surface and the oceans contain 99 percent of the planet's living space. Less than 11% of that space has been explored by humans. About 85 percent of the area and 90 percent of the volume constitute the dark and cold environment that we call the deep sea. The average depth of the ocean is 3,761 meters. The average height of the terrain is 850 meters.\nSo there are at least 236,878 marine species, but most likely there are at least 750,000 marine species, and possibly up to 25 million marine species. That's amazing!\nThe lowest known point on our Earth, called Challenger Deep, is 11,034 meters deep, in the Mariana Trench in the western Pacific. To get an idea of ​​how deep that is, if I could take Mount Everest and place it at the bottom of that place, there would still be more than a mile of the ocean above. The Dead Sea is the lowest land point on Earth with an elevation of 396 meters below sea level.\n\nSome Facts about the ocean and Sea Life:\n\n- Ocean water looks blue and not transparent. Sunlight is made up of all colors. When it reaches the sea, this white light passes through the water, absorbing the red and orange tones and allowing the green and bluish tones to pass through.\n- The Pacific Ocean is the largest ocean in the world. It occupies a third of its surface and extends approximately 15,000 km from the Bering Sea bordering the Arctic in the north to the south with Antarctica.\n- The oceanic clam, a marine mollusk from the North Atlantic, is the oldest animal in history with an estimated age of 507 years. It is about 8 cm long.\n- The largest mountainous area in the world is under the sea and is known as the mid-ocean ridges that run through the middle of the Atlantic Ocean to the Indian and Pacific.\n\nfollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nThe Colors of the Ocean 8K ULTRA HD - The Best 8K Sea Animals for Relaxation & Calming Music (FUHD) Demo 8K ULTRA HD\n\n#8K #ANIMALS #AQUARIUM", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "liveBroadcastContent": "none", + "publishTime": "2021-06-19T00:43:51Z" + } + } + ] +} \ No newline at end of file diff --git a/src/data/relatedVideoSearch.json b/src/data/relatedVideoSearch.json new file mode 100644 index 0000000..145c727 --- /dev/null +++ b/src/data/relatedVideoSearch.json @@ -0,0 +1,1324 @@ +[ + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "fA_NbpMzj_RHfxQ4v-4O6uxHb5g", + "items": [ + { + "kind": "youtube#video", + "etag": "Ygz3eEKCalqE4PAmCKUMpRAdxEU", + "id": "QSNa8U1yGrM", + "snippet": { + "publishedAt": "2021-05-07T13:00:09Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "EARTH in 8K ULTRA HD - Tour Through the Planet Earth - Best Places and Animals Relaxing Music 8K TV", + "description": "Despite its name, Earth may be the only planet in our solar system that has oceans. It is the fifth-largest planet in the solar system and perhaps the only one that harbors life.\n\nThe Earth's seas and oceans, which cover 70% of its surface, are home to a large amount of life. With an average depth of 4 km, they account for 97% of the water on the planet. In addition, they feature some impressive landforms: the most extensive mountain range, the Mid-Oceanic Ridge, is deep under the sea. Four times as long as the Andes, the Rocky Mountains, and the Himalayas arranged in a row, it stretches 65,000 km across the Arctic and the Atlantic.\n\nA study carried out jointly by the Universities of Münster, Cambridge, and the Zurich Technique showed that the age of the planet is between 4,400 million and 4,510 million years. So far, five mass extinctions have been recorded on the planet. The first occurred 440 million years ago and the last 65 million years ago. Michael Rampino, an Earth science expert at New York University, argues that it takes about 30 million years for the Solar System to cross the plane of the Milky Way. The presence of the system could be one of the reasons why comets' orbits are destabilized, launching them towards the planet. To this, he adds a possibility that is little studied today: dark matter.\n\n8.7 million species, a single planet. The ecosystems that we depend on, as humans, to survive are made up of around 8.7 million plant and animal species. At least this is confirmed by a study by the University of Hawaii (United States) carried out in 2011, which is said to be the most accurate to date. Of these, we only know 1.3 million. Unfortunately, WWF warns with its Living Planet report that, since the 70s of the last century, only the world population of vertebrates has been reduced by 60% due to global warming, the destruction of ecosystems, and the crisis of biodiversity caused by human action. It is in our power to care for and protect (and even discover) all those species that make our planet an (almost) inexhaustible source of life.\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaravia\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nEARTH in 8K ULTRA HD - Tour Through the Planet Earth - Best Places and Animals Relaxing Music 8K TV (FUHD) Demo 8K ULTRA HD\n\n#8K #PLANET #EARTH", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/QSNa8U1yGrM/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "tags": [ + "8k video", + "8k video ultra hd", + "8k tv samsung", + "8k tv ps5", + "8k tv review", + "4k ultra hd", + "planet earth", + "planet earth 2", + "planet earth turns slowly", + "tour around the world", + "tour around the states", + "nature sounds relaxing music", + "travel around the world", + "planet", + "earth", + "8k earth", + "8k earth video", + "8k planet earth", + "8k earth clouds", + "4k earth", + "4k earth from space", + "4k earth video", + "4k earth nature", + "4k tv", + "animals collection", + "4k animals", + "8k animals", + "earth from space live", + "earth from space", + "tv" + ], + "categoryId": "1", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "EARTH in 8K ULTRA HD - Tour Through the Planet Earth - Best Places and Animals Relaxing Music 8K TV", + "description": "Despite its name, Earth may be the only planet in our solar system that has oceans. It is the fifth-largest planet in the solar system and perhaps the only one that harbors life.\n\nThe Earth's seas and oceans, which cover 70% of its surface, are home to a large amount of life. With an average depth of 4 km, they account for 97% of the water on the planet. In addition, they feature some impressive landforms: the most extensive mountain range, the Mid-Oceanic Ridge, is deep under the sea. Four times as long as the Andes, the Rocky Mountains, and the Himalayas arranged in a row, it stretches 65,000 km across the Arctic and the Atlantic.\n\nA study carried out jointly by the Universities of Münster, Cambridge, and the Zurich Technique showed that the age of the planet is between 4,400 million and 4,510 million years. So far, five mass extinctions have been recorded on the planet. The first occurred 440 million years ago and the last 65 million years ago. Michael Rampino, an Earth science expert at New York University, argues that it takes about 30 million years for the Solar System to cross the plane of the Milky Way. The presence of the system could be one of the reasons why comets' orbits are destabilized, launching them towards the planet. To this, he adds a possibility that is little studied today: dark matter.\n\n8.7 million species, a single planet. The ecosystems that we depend on, as humans, to survive are made up of around 8.7 million plant and animal species. At least this is confirmed by a study by the University of Hawaii (United States) carried out in 2011, which is said to be the most accurate to date. Of these, we only know 1.3 million. Unfortunately, WWF warns with its Living Planet report that, since the 70s of the last century, only the world population of vertebrates has been reduced by 60% due to global warming, the destruction of ecosystems, and the crisis of biodiversity caused by human action. It is in our power to care for and protect (and even discover) all those species that make our planet an (almost) inexhaustible source of life.\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaravia\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nEARTH in 8K ULTRA HD - Tour Through the Planet Earth - Best Places and Animals Relaxing Music 8K TV (FUHD) Demo 8K ULTRA HD\n\n#8K #PLANET #EARTH" + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT30M19S", + "dimension": "2d", + "definition": "hd", + "caption": "true", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "15813174", + "likeCount": "98247", + "favoriteCount": "0", + "commentCount": "1623" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "2435", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "QSNa8U1yGrM", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "DwgDA9_T5oAH6McxBOghqsFk-k8", + "items": [ + { + "kind": "youtube#video", + "etag": "fGf_IgB2RYNR7LtBkUGpPNC2MK0", + "id": "hlWiI4xVXKY", + "snippet": { + "publishedAt": "2018-10-07T15:22:12Z", + "channelId": "UCjzHeG1KWoonmf9d5KBvSiw", + "title": "Beautiful Relaxing Music • Peaceful Piano Music & Guitar Music | Sunny Mornings by @PederBHellandMusic", + "description": "Beautiful relaxing music by Peder B. Helland. Enjoy peaceful piano music and guitar music (\"Sunny Mornings\" ) with birds singing in the background. Stream or download music from Soothing Relaxation: https://soothingrelaxation.lnk.to/listenYL\n\n💿 Track information:\nTitle: Sunny Mornings \nComposer: @PederBHellandMusic \nIndex: ★151\nAlbum: Sunny Mornings\nBuy or stream this album: https://soothingrelaxation.lnk.to/sunny-mornings\nBuy this track: https://soothingrelaxation.com/products/sunny-mornings-beautiful-relaxing-music-151\nBuy this video as an MP3 file: https://soothingrelaxation.com/products/hlWiI4xVXKY\nLicense this track: https://soothingrelaxation.com/products/sunny-mornings-license\nSheet music: https://soothingrelaxation.com/products/sunny-mornings\n\nFollow Soothing Relaxation on...\nOur website: https://soothingrelaxation.lnk.to/websiteYL\nFacebook: https://soothingrelaxation.lnk.to/FacebookYL\nInstagram: https://soothingrelaxation.lnk.to/InstagramYL\nSpotify: https://soothingrelaxation.lnk.to/listenYL/spotify\nApple Music: https://soothingrelaxation.lnk.to/listenYL/applemusic\nYouTube Music: https://soothingrelaxation.lnk.to/listenYL/youtubemusic\nAmazon Music: https://soothingrelaxation.lnk.to/listenYL/amazonmusic\nDeezer: https://soothingrelaxation.lnk.to/listenYL/deezer\n\nFollow Peder B. Helland on...\nWebsite: https://pederbhelland.lnk.to/websiteYL\nFacebook: https://pederbhelland.lnk.to/facebookYL\nInstagram: https://pederbhelland.lnk.to/instagramYL\n\nListen to more relaxing music: https://www.youtube.com/playlist?list=PLQ_PIlf6OzqL3BE0rB6clb9IzLLkkSKUF\n\nGet a free music download and stay updated with our newsletter: https://soothingrelaxation.lnk.to/newsletterYL\n\n📜 Message from the composer and creator of Soothing Relaxation:\n\"I am a composer from Norway and I started this channel with a simple vision: to create a place that you can visit whenever you want to sit down and relax. I compose music that can be labeled as for example: sleep music, calm music, yoga music, study music, peaceful music, beautiful music and relaxing music. I love to compose music and I put a lot of work into it. \n\nThank you very much for listening and for leaving feedback. Every single day I am completely astonished by all your warm support and it really inspires me to work even harder on my music. If you enjoy my work, I would be very happy if you decided to subscribe and join our community. Have a wonderful day or evening!\"\n\n- Peder B. Helland, composer for Soothing Relaxation\n\n© Copyright:\nMusic composed by Peder B. Helland. \nFootage/photos licensed from:\n• Pond5: azgek1, pavlas24, aflomotion \n\n☀️ Relevant hashtags:\n#relaxingmusic, #relax, #soothingrelaxation, #music, #sleep", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/hlWiI4xVXKY/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Soothing Relaxation", + "tags": [ + "calm", + "calm music", + "calming", + "calming music", + "cello", + "dormir", + "détendre", + "guitar", + "insomnia", + "meditar", + "meditation", + "meditation music", + "peaceful", + "peaceful music", + "peder b. helland", + "peter b. helland", + "piano", + "piano music", + "relajarse", + "relax", + "relaxante", + "relaxation", + "relaxing", + "relaxing music", + "sleep", + "sleep music", + "sleeping", + "sleeping music", + "smoothing relaxation", + "soothing", + "soothing music", + "soothing relaxation", + "study music" + ], + "categoryId": "10", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "Beautiful Relaxing Music • Peaceful Piano Music & Guitar Music | Sunny Mornings by @PederBHellandMusic", + "description": "Beautiful relaxing music by Peder B. Helland. Enjoy peaceful piano music and guitar music (\"Sunny Mornings\" ) with birds singing in the background. Stream or download music from Soothing Relaxation: https://soothingrelaxation.lnk.to/listenYL\n\n💿 Track information:\nTitle: Sunny Mornings \nComposer: @PederBHellandMusic \nIndex: ★151\nAlbum: Sunny Mornings\nBuy or stream this album: https://soothingrelaxation.lnk.to/sunny-mornings\nBuy this track: https://soothingrelaxation.com/products/sunny-mornings-beautiful-relaxing-music-151\nBuy this video as an MP3 file: https://soothingrelaxation.com/products/hlWiI4xVXKY\nLicense this track: https://soothingrelaxation.com/products/sunny-mornings-license\nSheet music: https://soothingrelaxation.com/products/sunny-mornings\n\nFollow Soothing Relaxation on...\nOur website: https://soothingrelaxation.lnk.to/websiteYL\nFacebook: https://soothingrelaxation.lnk.to/FacebookYL\nInstagram: https://soothingrelaxation.lnk.to/InstagramYL\nSpotify: https://soothingrelaxation.lnk.to/listenYL/spotify\nApple Music: https://soothingrelaxation.lnk.to/listenYL/applemusic\nYouTube Music: https://soothingrelaxation.lnk.to/listenYL/youtubemusic\nAmazon Music: https://soothingrelaxation.lnk.to/listenYL/amazonmusic\nDeezer: https://soothingrelaxation.lnk.to/listenYL/deezer\n\nFollow Peder B. Helland on...\nWebsite: https://pederbhelland.lnk.to/websiteYL\nFacebook: https://pederbhelland.lnk.to/facebookYL\nInstagram: https://pederbhelland.lnk.to/instagramYL\n\nListen to more relaxing music: https://www.youtube.com/playlist?list=PLQ_PIlf6OzqL3BE0rB6clb9IzLLkkSKUF\n\nGet a free music download and stay updated with our newsletter: https://soothingrelaxation.lnk.to/newsletterYL\n\n📜 Message from the composer and creator of Soothing Relaxation:\n\"I am a composer from Norway and I started this channel with a simple vision: to create a place that you can visit whenever you want to sit down and relax. I compose music that can be labeled as for example: sleep music, calm music, yoga music, study music, peaceful music, beautiful music and relaxing music. I love to compose music and I put a lot of work into it. \n\nThank you very much for listening and for leaving feedback. Every single day I am completely astonished by all your warm support and it really inspires me to work even harder on my music. If you enjoy my work, I would be very happy if you decided to subscribe and join our community. Have a wonderful day or evening!\"\n\n- Peder B. Helland, composer for Soothing Relaxation\n\n© Copyright:\nMusic composed by Peder B. Helland. \nFootage/photos licensed from:\n• Pond5: azgek1, pavlas24, aflomotion \n\n☀️ Relevant hashtags:\n#relaxingmusic, #relax, #soothingrelaxation, #music, #sleep" + }, + "defaultAudioLanguage": "en-US" + }, + "contentDetails": { + "duration": "PT3H3M39S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "214302645", + "likeCount": "1516580", + "favoriteCount": "0", + "commentCount": "48934" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "2150", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "hlWiI4xVXKY", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "MxH6nNVn0J8mKAYzlqEpu78azKc", + "items": [ + { + "kind": "youtube#video", + "etag": "8NGjh1gr9zAdGk0_TZsxR3stT34", + "id": "Tjsdoxovb2U", + "snippet": { + "publishedAt": "2023-01-14T10:55:00Z", + "channelId": "UCuaYvu45lq5fwmnv_zF8sng", + "title": "Norway - Scenic Relaxation Film 4k", + "description": "#nature #4kfilm #4knature #norway \nWatch this 4k video tour of Norway and experience the beautiful landscape and stunning culture first-hand. From the capital Oslo to the rugged mountain ranges of the Fjeldhjellet, this video will take you on a journey through one of the world's most beautiful countries.\n\nStep into the Norwegian wilderness and experience the natural beauty of this stunning country for yourself with this 4k video tour! With stunning landscapes and a culture steeped in history, Norway is a must-see destination for anyone visiting Europe. Experience this beautiful country in 4k quality with this video!\n\nOur other Films:\nIndonesia 4K - https://www.youtube.com/watch?v=nAfrCO28fVc\nThailand 4K - https://www.youtube.com/watch?v=sA2c9naaLTg\nSri Lanka 4K - https://www.youtube.com/watch?v=vdA8lrAoL9A\nUtah 4k - https://www.youtube.com/watch?v=s6Ak0Q41FcY\nItaly 4k - https://www.youtube.com/watch?v=ko5EIZM0gb8\n\nTimeline:\n00:00 Intro\n00:47 Lovatnet lake\n01:28 Trolltunga\n01:57 Langfoss waterfall\n02:25 Haukland Beach \n03:27 Alesund \n03:50 Hardanger Bridge \n05:00 Sognefjord\n06:07 Atlantic Ocean Road \n07:43 Lofoten island \n09:45 Henningsvaer\n10:53 Kragero \n12:48 Vøringsfossen waterfall \n13:43 Briksdalsbreen Glacier\n15:00 Hamningberg\n16:22 Trollstigen\n18:03 Seven Sisters Waterfall \n18:33 Pulpit rock\n20:10 Lovatnet lake\n20:57 Saltstraumen bridge \n21:44 Zakariasdamm\n22:15 Lindesnes Lighthouse\n23:39 Tromso\n25:29 North Cape\n01:00:43 Thanks for waching, save nature, save the planet\n\nMore inspiration: \nYouTube https://www.youtube.com/@Earth_to_inspire\nInstagram https://www.instagram.com/earth_to_inspire/\nTikTok https://www.tiktok.com/@earth_to_inspire?lang=en.\n\n#norway4k #dronevideo #droneview #relaxing #calmmusic #savetheworld #savethenature #savetheplanet", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/Tjsdoxovb2U/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Earth to inspire", + "tags": [ + "norway", + "norway travel", + "norway travel guide", + "norway 4k", + "norway relaxation", + "relaxation film", + "nature video", + "Norway 4k", + "4k", + "4k video", + "nature", + "relaxing music", + "Norway AMAZING", + "Beautiful Nature", + "norway nature", + "Europe beautiful", + "4K", + "where to visit in Norway", + "top places in Norway", + "relax 4k", + "ultra hd", + "peaceful", + "nature relaxation", + "drone film 4k", + "aerial film", + "the mountains", + "cinematic video 4k nature", + "cinematic drone videos", + "drones", + "save nature", + "save the planet", + "4k nature", + "visit norway" + ], + "categoryId": "19", + "liveBroadcastContent": "none", + "localized": { + "title": "Norway - Scenic Relaxation Film 4k", + "description": "#nature #4kfilm #4knature #norway \nWatch this 4k video tour of Norway and experience the beautiful landscape and stunning culture first-hand. From the capital Oslo to the rugged mountain ranges of the Fjeldhjellet, this video will take you on a journey through one of the world's most beautiful countries.\n\nStep into the Norwegian wilderness and experience the natural beauty of this stunning country for yourself with this 4k video tour! With stunning landscapes and a culture steeped in history, Norway is a must-see destination for anyone visiting Europe. Experience this beautiful country in 4k quality with this video!\n\nOur other Films:\nIndonesia 4K - https://www.youtube.com/watch?v=nAfrCO28fVc\nThailand 4K - https://www.youtube.com/watch?v=sA2c9naaLTg\nSri Lanka 4K - https://www.youtube.com/watch?v=vdA8lrAoL9A\nUtah 4k - https://www.youtube.com/watch?v=s6Ak0Q41FcY\nItaly 4k - https://www.youtube.com/watch?v=ko5EIZM0gb8\n\nTimeline:\n00:00 Intro\n00:47 Lovatnet lake\n01:28 Trolltunga\n01:57 Langfoss waterfall\n02:25 Haukland Beach \n03:27 Alesund \n03:50 Hardanger Bridge \n05:00 Sognefjord\n06:07 Atlantic Ocean Road \n07:43 Lofoten island \n09:45 Henningsvaer\n10:53 Kragero \n12:48 Vøringsfossen waterfall \n13:43 Briksdalsbreen Glacier\n15:00 Hamningberg\n16:22 Trollstigen\n18:03 Seven Sisters Waterfall \n18:33 Pulpit rock\n20:10 Lovatnet lake\n20:57 Saltstraumen bridge \n21:44 Zakariasdamm\n22:15 Lindesnes Lighthouse\n23:39 Tromso\n25:29 North Cape\n01:00:43 Thanks for waching, save nature, save the planet\n\nMore inspiration: \nYouTube https://www.youtube.com/@Earth_to_inspire\nInstagram https://www.instagram.com/earth_to_inspire/\nTikTok https://www.tiktok.com/@earth_to_inspire?lang=en.\n\n#norway4k #dronevideo #droneview #relaxing #calmmusic #savetheworld #savethenature #savetheplanet" + } + }, + "contentDetails": { + "duration": "PT1H58S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": false, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "13560", + "likeCount": "144", + "favoriteCount": "0", + "commentCount": "9" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "1994", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "Tjsdoxovb2U", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "0LO0R8ApUV1bFLrW5V2Gtxb71NQ", + "items": [ + { + "kind": "youtube#video", + "etag": "2F67KS2m-ZdNPJSt8_Q4N66Yxl4", + "id": "RgCENw09Dpk", + "snippet": { + "publishedAt": "2022-09-23T13:00:17Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "TOP 50 • Most Beautiful CITIES in the World 8K ULTRA HD", + "description": "TOP 50 of the Most Beautiful CITIES in the World 8K for your best 8k device. Travel around the planet earth 8K to see the best cities in the world.\nAre you making some plans to visit beautiful places in the planet earth? The world is full of beautiful and amazing places to visit like cities skylines where you can enjoy mother nature and amazing cities skylines around the world. We have compiled this list to help you plan your trip to see the most beautiful places on the planet.\nBeautiful cities are popular for their beauty, architecture of the buildings, people that live there, and most importantly the most popular food in the world. People who love traveling are always searching for a new city to go to.\nFor this reason, you need to know the particular information about these cities to safely visit and explore all the possible places around the planet earth 8K with the best cities.\n50 Most Beautiful Cities in the World:\n\n00:00 Intro 8K ULTRA HD\n00:10 50 Most Beautiful Cities in the World\n00:15 Paris, France\n00:48 New York, United States\n01:29 London, United Kingdom\n02:01 Venice, Italy\n02:48 Barcelona, Spain\n03:48 Amsterdam, Netherlands\n04:33 Rome, Italy\n05:14 Singapore\n05:47 Lisbon, Portugal\n06:43 Prague, Czech Republic\n08:12 Istanbul, Turkey\n09:02 Tokyo, Japan\n09:51 Vienna, Austria\n11:21 Buenos Aires, Argentina\n12:36 San Diego, United States\n14:00 Hong Kong\n15:16 Chicago, United States\n16:54 Bruges, Belgium\n18:09 Madrid, Spain\n19:25 Dubai, United Arab Emirates\n20:42 Edinburgh, United Kingdom\n22:08 Zurich, Switzerland\n23:26 Cuzco, Peru\n24:43 St. Petersburg, Russiaç\n25:59 Berlin, Germany\n27:15 Hanoi, Vietnam\n28:25 Queenstown, New Zeland\n28:37 Dubrovnik, Croatia\n30:58 Bangkok, Thailand\n32:24 Dublin, Ireland\n33:34 Bergen, Norway\n34:59 Beijing, China\n35:46 Athens, Greece\n37:08 Phuket, Thailand\n38:30 Edinburgh, Scotland\n40:08 Mexico City, Mexico\n41:18 Moscow, Russia\n42:29 Munich, Germany\n43:55 Cairo, Egypt\n44:48 Chicago, United States\n46:38 Zurich, Switzerland\n47:45 Copenhagen, Denmark\n48:56 Reykjavik, Iceland\n50:12 Kyoto, Japan\n51:18 Florence, Italy\n52:44 Porto, Portugal\n54:10 Jakarta, Indonesia\n55:09 Best Cities to live in the Planet\n55:14 Outro 8K ULTRA HD\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nAmazing & Beautiful Cities Around the Planet Earth 8K HDR 60FPS (FUHD) Demo TV 8K ULTRA HD\n\n#8K #CITIES #SKYLINE #BEAUTIFUL #RELAXING #WORLD #CITIESSKYLINES #TRAVEL #TOUR", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/RgCENw09Dpk/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "tags": [ + "most beautiful places in the world", + "most beautiful cities in the world", + "most beautiful cities in usa", + "most beautiful cities in europe", + "most beautiful city in india", + "most beautiful cities in italy", + "most beautiful cities in america", + "8k", + "8k video ultra hd", + "8k video songs", + "8k music", + "piano music", + "piano music relaxing", + "4k video", + "best cities to live in america", + "best cities in the world", + "best cities to visit in usa", + "8k tv samsung", + "8k tv review", + "8k tv ps5", + "qled", + "oled", + "cities skylines", + "tv" + ], + "categoryId": "1", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "TOP 50 • Most Beautiful CITIES in the World 8K ULTRA HD", + "description": "TOP 50 of the Most Beautiful CITIES in the World 8K for your best 8k device. Travel around the planet earth 8K to see the best cities in the world.\nAre you making some plans to visit beautiful places in the planet earth? The world is full of beautiful and amazing places to visit like cities skylines where you can enjoy mother nature and amazing cities skylines around the world. We have compiled this list to help you plan your trip to see the most beautiful places on the planet.\nBeautiful cities are popular for their beauty, architecture of the buildings, people that live there, and most importantly the most popular food in the world. People who love traveling are always searching for a new city to go to.\nFor this reason, you need to know the particular information about these cities to safely visit and explore all the possible places around the planet earth 8K with the best cities.\n50 Most Beautiful Cities in the World:\n\n00:00 Intro 8K ULTRA HD\n00:10 50 Most Beautiful Cities in the World\n00:15 Paris, France\n00:48 New York, United States\n01:29 London, United Kingdom\n02:01 Venice, Italy\n02:48 Barcelona, Spain\n03:48 Amsterdam, Netherlands\n04:33 Rome, Italy\n05:14 Singapore\n05:47 Lisbon, Portugal\n06:43 Prague, Czech Republic\n08:12 Istanbul, Turkey\n09:02 Tokyo, Japan\n09:51 Vienna, Austria\n11:21 Buenos Aires, Argentina\n12:36 San Diego, United States\n14:00 Hong Kong\n15:16 Chicago, United States\n16:54 Bruges, Belgium\n18:09 Madrid, Spain\n19:25 Dubai, United Arab Emirates\n20:42 Edinburgh, United Kingdom\n22:08 Zurich, Switzerland\n23:26 Cuzco, Peru\n24:43 St. Petersburg, Russiaç\n25:59 Berlin, Germany\n27:15 Hanoi, Vietnam\n28:25 Queenstown, New Zeland\n28:37 Dubrovnik, Croatia\n30:58 Bangkok, Thailand\n32:24 Dublin, Ireland\n33:34 Bergen, Norway\n34:59 Beijing, China\n35:46 Athens, Greece\n37:08 Phuket, Thailand\n38:30 Edinburgh, Scotland\n40:08 Mexico City, Mexico\n41:18 Moscow, Russia\n42:29 Munich, Germany\n43:55 Cairo, Egypt\n44:48 Chicago, United States\n46:38 Zurich, Switzerland\n47:45 Copenhagen, Denmark\n48:56 Reykjavik, Iceland\n50:12 Kyoto, Japan\n51:18 Florence, Italy\n52:44 Porto, Portugal\n54:10 Jakarta, Indonesia\n55:09 Best Cities to live in the Planet\n55:14 Outro 8K ULTRA HD\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nAmazing & Beautiful Cities Around the Planet Earth 8K HDR 60FPS (FUHD) Demo TV 8K ULTRA HD\n\n#8K #CITIES #SKYLINE #BEAUTIFUL #RELAXING #WORLD #CITIESSKYLINES #TRAVEL #TOUR" + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT55M25S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "1944298", + "likeCount": "10956", + "favoriteCount": "0", + "commentCount": "219" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "2491", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "RgCENw09Dpk", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "gGjpu2Sa_2BuYxhrTH9ienfnzLU", + "items": [ + { + "kind": "youtube#video", + "etag": "XSL6tHPmxD1QQBY7Ol7o5EwETbM", + "id": "vQoR7gJTirk", + "snippet": { + "publishedAt": "2021-06-25T13:00:34Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "The Colors of the Ocean 8K ULTRA HD - The Best 8K Sea Animals for Relaxation & Calming Music", + "description": "THE COLORS OF THE OCEAN is a beautiful and RELAXING 8K Film about Sea Life and Marine Animals. In this video, we can watch marine animals from all over the world, with beautiful colors and shapes for relaxing sleep, or relaxation time.\nIt is estimated that 70 and 80 percent of all life on earth is below the ocean's surface and the oceans contain 99 percent of the planet's living space. Less than 11% of that space has been explored by humans. About 85 percent of the area and 90 percent of the volume constitute the dark and cold environment that we call the deep sea. The average depth of the ocean is 3,761 meters. The average height of the terrain is 850 meters.\nSo there are at least 236,878 marine species, but most likely there are at least 750,000 marine species, and possibly up to 25 million marine species. That's amazing!\nThe lowest known point on our Earth, called Challenger Deep, is 11,034 meters deep, in the Mariana Trench in the western Pacific. To get an idea of ​​how deep that is, if I could take Mount Everest and place it at the bottom of that place, there would still be more than a mile of the ocean above. The Dead Sea is the lowest land point on Earth with an elevation of 396 meters below sea level.\n\nSome Facts about the ocean and Sea Life:\n\n- Ocean water looks blue and not transparent. Sunlight is made up of all colors. When it reaches the sea, this white light passes through the water, absorbing the red and orange tones and allowing the green and bluish tones to pass through.\n- The Pacific Ocean is the largest ocean in the world. It occupies a third of its surface and extends approximately 15,000 km from the Bering Sea bordering the Arctic in the north to the south with Antarctica.\n- The oceanic clam, a marine mollusk from the North Atlantic, is the oldest animal in history with an estimated age of 507 years. It is about 8 cm long.\n- The largest mountainous area in the world is under the sea and is known as the mid-ocean ridges that run through the middle of the Atlantic Ocean to the Indian and Pacific.\n\nfollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nThe Colors of the Ocean 8K ULTRA HD - The Best 8K Sea Animals for Relaxation & Calming Music (FUHD) Demo 8K ULTRA HD\n\n#8K #ANIMALS #AQUARIUM", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/vQoR7gJTirk/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "tags": [ + "relax music (relaxation music)", + "aquarium relax music", + "sleep music", + "musica clasica relax", + "sleeping", + "relaxing", + "relax music", + "aquarium relax", + "relaxing music", + "background music", + "aquarium", + "underwater", + "screensaver", + "aquarium video", + "4k resolution", + "fish tank (film)", + "4k video", + "coral reef", + "fish tank", + "stress relief", + "relaxing aquarium", + "8k ultra hd", + "8k video ultra hd", + "8k aquarium", + "8k tv samsung", + "8k tv review", + "4k tv test", + "8k ocean video", + "8k animals", + "wildlife 8k", + "4k aquarium video ultra hd" + ], + "categoryId": "1", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "The Colors of the Ocean 8K ULTRA HD - The Best 8K Sea Animals for Relaxation & Calming Music", + "description": "THE COLORS OF THE OCEAN is a beautiful and RELAXING 8K Film about Sea Life and Marine Animals. In this video, we can watch marine animals from all over the world, with beautiful colors and shapes for relaxing sleep, or relaxation time.\nIt is estimated that 70 and 80 percent of all life on earth is below the ocean's surface and the oceans contain 99 percent of the planet's living space. Less than 11% of that space has been explored by humans. About 85 percent of the area and 90 percent of the volume constitute the dark and cold environment that we call the deep sea. The average depth of the ocean is 3,761 meters. The average height of the terrain is 850 meters.\nSo there are at least 236,878 marine species, but most likely there are at least 750,000 marine species, and possibly up to 25 million marine species. That's amazing!\nThe lowest known point on our Earth, called Challenger Deep, is 11,034 meters deep, in the Mariana Trench in the western Pacific. To get an idea of ​​how deep that is, if I could take Mount Everest and place it at the bottom of that place, there would still be more than a mile of the ocean above. The Dead Sea is the lowest land point on Earth with an elevation of 396 meters below sea level.\n\nSome Facts about the ocean and Sea Life:\n\n- Ocean water looks blue and not transparent. Sunlight is made up of all colors. When it reaches the sea, this white light passes through the water, absorbing the red and orange tones and allowing the green and bluish tones to pass through.\n- The Pacific Ocean is the largest ocean in the world. It occupies a third of its surface and extends approximately 15,000 km from the Bering Sea bordering the Arctic in the north to the south with Antarctica.\n- The oceanic clam, a marine mollusk from the North Atlantic, is the oldest animal in history with an estimated age of 507 years. It is about 8 cm long.\n- The largest mountainous area in the world is under the sea and is known as the mid-ocean ridges that run through the middle of the Atlantic Ocean to the Indian and Pacific.\n\nfollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\nYoutube Business - Youtube Profit - Bank Credit - Loans - Educational - Education - Insurance\n\nThe Colors of the Ocean 8K ULTRA HD - The Best 8K Sea Animals for Relaxation & Calming Music (FUHD) Demo 8K ULTRA HD\n\n#8K #ANIMALS #AQUARIUM" + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT34M31S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "10796376", + "likeCount": "50521", + "favoriteCount": "0", + "commentCount": "981" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "2416", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "vQoR7gJTirk", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "BpeO8E_zqqUMwbPqafuluYwskrI", + "items": [ + { + "kind": "youtube#video", + "etag": "mW45uTdk5AfVazoC61Bi8K51l40", + "id": "YFhwEJosUsU", + "snippet": { + "publishedAt": "2022-09-02T13:00:15Z", + "channelId": "UC8D_NXFBh8A9KSwo7x-wFdQ", + "title": "TOP 50 • Most Beautiful Places in the World 8K ULTRA HD", + "description": "TOP 50 - In this video you will find a TOP 50 of the Most Beautiful Places in the World 8K. You will take a tour around the world to see the best places on the planet earth 8K.\nIn this video you will see the amazing Halong Bay in Vietnam that for many, the seascape of Ha Long Bay is one of the most beautiful beaches in the world. Cruises sail emerald green waters among thousands of rugged islands and islets with islands and most amazing landscapes.\nPamukkale Is The Most Visited Individual Site in All of Turkey! Not Istanbul's Hagia Sophia. Not the ancient ruins of Ephesus.\nKrabi is famous for its scenic view and breathtaking beaches and Islands. Its coral reef vistas are also one of the world’s most beautiful, which makes the City a great spot for coral and fish video.\nFiordland is one of the most dramatic and beautiful parts of New Zealand. Absorb the breathtaking treasures of this region by water, air or hiking.\nMu Cang Chai is home to some of Asia’s most magnificent cultivated lands. Rice terraces coil in parts around the hills to spectacular effect, luring photographers, hikers, and amazing motorbikers.\nThis citadel in the clouds was abandoned only 100 years later but Spanish invaders never found Machu Picchu. It was left to nature before explorer Hiram Bingham caught wind of it on an expedition in 1911 and decided to investigate. A hidden city protected by the mountains, and still wonderfully inaccessible other than by foot or train, Machu Picchu is now a New Seven Wonders of the World.\nThe Great Wall of China is one of the greatest sights in the world, the longest wall in the world, an awe-inspiring feat of ancient defensive architecture.\nLocated on the northern side of Greece, Meteora is included in the World Heritage List. Dotted with towering rocks, it boasts a breathtaking landscape, creating otherworldly beautiful scenery.\nBe sure to visit Keukenhof, where you will experience the gorgeous views of blooming Dutch tulips and other flowers for which Holland is famous. Keukenhof is the most famous and largest flower park in the world and lies not far from Amsterdam.\nThe island is actually a group of islands consisting of Thira, Thirassia, Aspronissi, Palea and Nea Kameni in the southernmost part of the Cyclades.\nOne highlight of the trails inside the Torres del Paine National Park The viewpoint over the Grey lake and glaciar in chile.\nNorway's Lofoten Islands are referred to as the Lofoten Wall because they are vertical rows of granite shooting out of the Arctic Sea.\nThe Amalfi Coast is a 34-mile-long region in Campania, Italy. \nCappadocia is a beautiful region in central Turkey famous for its fairytale scenery.\nAntarctica is the coldest, windiest and driest continent. It contains 90 percent of all of the ice on Earth 8K.\n\nList of the Most Beautiful Places in the Planet Earth 8K:\n00:00 Intro 8K ULTRA HD\n00:10 Halong Bay, Vietnam\n00:46 Pamukkale, Turkey\n01:25 Plitvice Lakes National Park, Croatia\n02:12 Krabi, Thailand\n03:12 Fiordland, New Zeland\n03:58 Mu Cang Chai, Vietnam\n04:57 Machu Picchu, Peru\n05:29 The Great Wall of China\n06:19 Meteora, Thessaly, Greece\n07:18 Keukenhof Gardens, Netherlands\n08:16 Santorini Island, Greece\n09:09 Torres del Paine, Chile\n09:56 Lofoten Islands, Norway\n11:38 Amalfi Coast, Italy\n12:48 Cappadocia, Turkey\n14:02 Fiji\n15:38 Fjords, Norway\n17:09 Antarctica\n19:10 Bagan, Myanmar\n20:29 Dubai, United Arab Emirates\n21:54 Maldives\n23:47 Monument Valley, USA\n25:18 Iguazu Falls, Brasil - Argentina\n26:26 Swiss Alps, Switzerland\n27:49 Angkor Wat, Cambodia\n29:03 Fernando de Noronha, Brazil\n30:22 Lisbon, Portugal\n31:58 Paris, France\n33:25 Cape Town, South Africa\n34:22 Himalayas, Nepal\n35:22 Venice, Italy\n36:55 Zhangye Danxia, China\n37:52 Sossusvlei, Namibia\n38:57 Forbiden City, China\n38:50 Petra, Jordan\n40:36 Zlatni Rat, Croatia\n42:00 Barcelona, Spain\n43:12 Giza, Egypt\n44:23 Atacama Desert, Chile\n45:30 Okavango Delta, Botswana\n46:45 Whitsunday, Australia\n47:28 Cinque Terre, Italy\n48:54 Neuschwanstein Castle, Germany\n50:01 Tuscany, Italy\n51:45 Sahara Desert, Africa\n53:25 Bamboo Forest, Japan\n54:32 Lake Bled, Slovenia\n55:54 Li River, China\n57:43 Zakynthos, Greece\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\n\nTOP 50 Most Beautiful Places in the World 8K ULTRA HD 8K HDR 60FPS (FUHD) Demo TV 8K ULTRA HD\n\n#8K #MOST #BEAUTIFUL #PLACES #PLANET #EARTH #WORLD #TOP50", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/YFhwEJosUsU/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "8K VIDEOS ULTRA HD", + "tags": [ + "most beautiful places in the world", + "most beautiful music", + "top 50 songs", + "top 100", + "top 10", + "top 20", + "top 50 most beautiful places in the world", + "top 50 most beautiful cities in the world", + "top 50 most beautiful countries in the world", + "8k ultra hd", + "4k video", + "8k", + "8k earth", + "8k planet earth", + "8k tv", + "8k hdr", + "8k hdr dolby vision", + "most beautiful places on earth", + "beautiful places in the world", + "nature sounds relaxing music", + "relaxing music", + "oled", + "qled", + "8k tv samsung", + "4k tv", + "tv test", + "dubai", + "4k" + ], + "categoryId": "1", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "TOP 50 • Most Beautiful Places in the World 8K ULTRA HD", + "description": "TOP 50 - In this video you will find a TOP 50 of the Most Beautiful Places in the World 8K. You will take a tour around the world to see the best places on the planet earth 8K.\nIn this video you will see the amazing Halong Bay in Vietnam that for many, the seascape of Ha Long Bay is one of the most beautiful beaches in the world. Cruises sail emerald green waters among thousands of rugged islands and islets with islands and most amazing landscapes.\nPamukkale Is The Most Visited Individual Site in All of Turkey! Not Istanbul's Hagia Sophia. Not the ancient ruins of Ephesus.\nKrabi is famous for its scenic view and breathtaking beaches and Islands. Its coral reef vistas are also one of the world’s most beautiful, which makes the City a great spot for coral and fish video.\nFiordland is one of the most dramatic and beautiful parts of New Zealand. Absorb the breathtaking treasures of this region by water, air or hiking.\nMu Cang Chai is home to some of Asia’s most magnificent cultivated lands. Rice terraces coil in parts around the hills to spectacular effect, luring photographers, hikers, and amazing motorbikers.\nThis citadel in the clouds was abandoned only 100 years later but Spanish invaders never found Machu Picchu. It was left to nature before explorer Hiram Bingham caught wind of it on an expedition in 1911 and decided to investigate. A hidden city protected by the mountains, and still wonderfully inaccessible other than by foot or train, Machu Picchu is now a New Seven Wonders of the World.\nThe Great Wall of China is one of the greatest sights in the world, the longest wall in the world, an awe-inspiring feat of ancient defensive architecture.\nLocated on the northern side of Greece, Meteora is included in the World Heritage List. Dotted with towering rocks, it boasts a breathtaking landscape, creating otherworldly beautiful scenery.\nBe sure to visit Keukenhof, where you will experience the gorgeous views of blooming Dutch tulips and other flowers for which Holland is famous. Keukenhof is the most famous and largest flower park in the world and lies not far from Amsterdam.\nThe island is actually a group of islands consisting of Thira, Thirassia, Aspronissi, Palea and Nea Kameni in the southernmost part of the Cyclades.\nOne highlight of the trails inside the Torres del Paine National Park The viewpoint over the Grey lake and glaciar in chile.\nNorway's Lofoten Islands are referred to as the Lofoten Wall because they are vertical rows of granite shooting out of the Arctic Sea.\nThe Amalfi Coast is a 34-mile-long region in Campania, Italy. \nCappadocia is a beautiful region in central Turkey famous for its fairytale scenery.\nAntarctica is the coldest, windiest and driest continent. It contains 90 percent of all of the ice on Earth 8K.\n\nList of the Most Beautiful Places in the Planet Earth 8K:\n00:00 Intro 8K ULTRA HD\n00:10 Halong Bay, Vietnam\n00:46 Pamukkale, Turkey\n01:25 Plitvice Lakes National Park, Croatia\n02:12 Krabi, Thailand\n03:12 Fiordland, New Zeland\n03:58 Mu Cang Chai, Vietnam\n04:57 Machu Picchu, Peru\n05:29 The Great Wall of China\n06:19 Meteora, Thessaly, Greece\n07:18 Keukenhof Gardens, Netherlands\n08:16 Santorini Island, Greece\n09:09 Torres del Paine, Chile\n09:56 Lofoten Islands, Norway\n11:38 Amalfi Coast, Italy\n12:48 Cappadocia, Turkey\n14:02 Fiji\n15:38 Fjords, Norway\n17:09 Antarctica\n19:10 Bagan, Myanmar\n20:29 Dubai, United Arab Emirates\n21:54 Maldives\n23:47 Monument Valley, USA\n25:18 Iguazu Falls, Brasil - Argentina\n26:26 Swiss Alps, Switzerland\n27:49 Angkor Wat, Cambodia\n29:03 Fernando de Noronha, Brazil\n30:22 Lisbon, Portugal\n31:58 Paris, France\n33:25 Cape Town, South Africa\n34:22 Himalayas, Nepal\n35:22 Venice, Italy\n36:55 Zhangye Danxia, China\n37:52 Sossusvlei, Namibia\n38:57 Forbiden City, China\n38:50 Petra, Jordan\n40:36 Zlatni Rat, Croatia\n42:00 Barcelona, Spain\n43:12 Giza, Egypt\n44:23 Atacama Desert, Chile\n45:30 Okavango Delta, Botswana\n46:45 Whitsunday, Australia\n47:28 Cinque Terre, Italy\n48:54 Neuschwanstein Castle, Germany\n50:01 Tuscany, Italy\n51:45 Sahara Desert, Africa\n53:25 Bamboo Forest, Japan\n54:32 Lake Bled, Slovenia\n55:54 Li River, China\n57:43 Zakynthos, Greece\n\nFollow me:\n►YouTube: https://www.youtube.com/channel/UC8D_NXFBh8A9KSwo7x-wFdQ/\n►Facebook: https://www.facebook.com/bruno.saraviavega\n►Instagram: https://www.instagram.com/brunosaraviaphotography\n\nCanon - Sony - Nikon - Adobe Premiere Pro CC - Photoshop - Lightroom CC\n\nTOP 50 Most Beautiful Places in the World 8K ULTRA HD 8K HDR 60FPS (FUHD) Demo TV 8K ULTRA HD\n\n#8K #MOST #BEAUTIFUL #PLACES #PLANET #EARTH #WORLD #TOP50" + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT59M28S", + "dimension": "2d", + "definition": "hd", + "caption": "true", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "5609300", + "likeCount": "20608", + "favoriteCount": "0", + "commentCount": "243" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "3480", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "YFhwEJosUsU", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "W19-kZWJv7bS3C_3MW1r29mB5xw", + "items": [ + { + "kind": "youtube#video", + "etag": "yi1Csd1tQjscI4nkwKwDZNoEIjQ", + "id": "nq4tT68UoCg", + "snippet": { + "publishedAt": "2022-01-05T17:54:39Z", + "channelId": "UCkFeoNSqYTa7trn75WM9tsg", + "title": "✨ Space Ambient Music • Deep Relaxation Space Journey [ 4K UHD ]", + "description": "Space Ambient Music [ Space Exploration ]. It is an excellent ambient Cosmic soundscape Background for Space exploring, stargazing, learning astronomy, Dreaming, Soul Healing, Stress Relief and complete relaxation. Also you can try to use it while creating arts, writing, studying etc. Use it for Universe Exploring, Astronomy, Astral Projection, for creating continues cosmic mood for dreaming and reading fantastic, exploring outer space, gaming and coding\n\n🎵 Music: Space Exploration \n Album: Starfield\n https://spoti.fi/39EL8F0\n https://apple.co/3mXohYu \n💎 Animation: by Blue Wave Studio\nⓒ Copyrights: Blue Wave Studio\n\n#spacemusic\n#spaceambient\n#ambient", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/nq4tT68UoCg/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Relaxation Ambient Music", + "categoryId": "10", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "✨ Space Ambient Music • Deep Relaxation Space Journey [ 4K UHD ]", + "description": "Space Ambient Music [ Space Exploration ]. It is an excellent ambient Cosmic soundscape Background for Space exploring, stargazing, learning astronomy, Dreaming, Soul Healing, Stress Relief and complete relaxation. Also you can try to use it while creating arts, writing, studying etc. Use it for Universe Exploring, Astronomy, Astral Projection, for creating continues cosmic mood for dreaming and reading fantastic, exploring outer space, gaming and coding\n\n🎵 Music: Space Exploration \n Album: Starfield\n https://spoti.fi/39EL8F0\n https://apple.co/3mXohYu \n💎 Animation: by Blue Wave Studio\nⓒ Copyrights: Blue Wave Studio\n\n#spacemusic\n#spaceambient\n#ambient" + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT3H34M22S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "1874936", + "likeCount": "23300", + "favoriteCount": "0", + "commentCount": "549" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "1271", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "nq4tT68UoCg", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "jXlxWI2x2DdAW5juzIftZizW4vU", + "items": [ + { + "kind": "youtube#video", + "etag": "saOa0VtlQYqDD-XJXvjKb6MFy6g", + "id": "hpfVMPCR3xA", + "snippet": { + "publishedAt": "2021-08-08T05:28:13Z", + "channelId": "UCS4jPUCax8d3f-uke--YXXQ", + "title": "FLYING OVER CANADA (4K UHD) - Relaxing Music With Stunning Beautiful Nature (4K Video Ultra HD)", + "description": "Welcome to Earth Relaxation !\nCanada is a country in North America. Its ten provinces and three territories extend from the Atlantic to the Pacific and northward into the Arctic Ocean, covering 9.98 million square kilometres (3.85 million square miles), making it the world's second-largest country by total area. Its southern and western border with the United States, stretching 8,891 kilometres (5,525 mi), is the world's longest bi-national land border. Canada's capital is Ottawa, and its three largest metropolitan areas are Toronto, Montreal, and Vancouver. A highly developed country, Canada has the seventeenth-highest nominal per-capita income globally and the sixteenth-highest ranking in the Human Development Index. Its advanced economy is the tenth-largest in the world, relying chiefly upon its abundant natural resources and well-developed international trade networks.\nMusic has so many benefits, and one of them is that it calms your nerves down. It's always a good idea to listen to some background music while you're doing something. So here are some relaxing piano pieces with 4k nature videos that will help you relax, feel relaxed, and get ready for bed.\nIn this video, I'm going to show you my favorite nature video that will help you relax and improve your mood. It's a 4k video with relaxing music and calming nature sounds. There are no talking in this video so you can enjoy the natural sound of the forest, the sound of a river, and some birds chirping.\nWatch the 4k ultra high definition video in this video in somewhere at nail salon, public transport or restaurant. Relaxing music is playing in the background. Try out this 4k ultra high definition video let me know what you think in the comments below!.\n▽ Follow Earth Relaxation\n➤ Youtube → https://www.youtube.com/channel/UCS4jPUCax8d3f-uke--YXXQ\n#earthrelaxation​ #relaxingmusic​ #4kcanada\n----------------------------------------------------------------------\nMusic provided by EMVN\nSubmit your music: http://emvn.co/submitDemo\n📌 Contacts: copyright.thstudio@gmail.com, network@emvn.co\nTrack list:\n0:0:0 | 1 . Relax\n0:4:54 | 2 . Calm\n0:9:46 | 3 . Beach\n0:14:30 | 4 . Water\n\nFollow Artists:\nhttps://emvn.fanlink.to/melosy\n----------------------------------------------------------------------\n►All rights belong to their respective owners.\n✔ This video was given a special license directly from the artists and the right holders.", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/hpfVMPCR3xA/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Earth Relaxation", + "tags": [ + "scenic relaxation", + "4k", + "4k video", + "4k video 60fps", + "video 4k", + "4k videos", + "relax 4k", + "zen", + "ultra hd", + "relaxing music", + "bgm", + "background music", + "soothing relaxation", + "piano relax", + "piano relaxing", + "nature sounds", + "relax music", + "spa music", + "meditation music", + "music for meditation", + "music for sleeping", + "healing music", + "relaxation music", + "stunning nature", + "relax", + "sleep music", + "dream music", + "stress relief", + "calm", + "drone film", + "aerial film", + "simple happiness", + "instrumental music", + "canada", + "canada 4k" + ], + "categoryId": "10", + "liveBroadcastContent": "none", + "localized": { + "title": "FLYING OVER CANADA (4K UHD) - Relaxing Music With Stunning Beautiful Nature (4K Video Ultra HD)", + "description": "Welcome to Earth Relaxation !\nCanada is a country in North America. Its ten provinces and three territories extend from the Atlantic to the Pacific and northward into the Arctic Ocean, covering 9.98 million square kilometres (3.85 million square miles), making it the world's second-largest country by total area. Its southern and western border with the United States, stretching 8,891 kilometres (5,525 mi), is the world's longest bi-national land border. Canada's capital is Ottawa, and its three largest metropolitan areas are Toronto, Montreal, and Vancouver. A highly developed country, Canada has the seventeenth-highest nominal per-capita income globally and the sixteenth-highest ranking in the Human Development Index. Its advanced economy is the tenth-largest in the world, relying chiefly upon its abundant natural resources and well-developed international trade networks.\nMusic has so many benefits, and one of them is that it calms your nerves down. It's always a good idea to listen to some background music while you're doing something. So here are some relaxing piano pieces with 4k nature videos that will help you relax, feel relaxed, and get ready for bed.\nIn this video, I'm going to show you my favorite nature video that will help you relax and improve your mood. It's a 4k video with relaxing music and calming nature sounds. There are no talking in this video so you can enjoy the natural sound of the forest, the sound of a river, and some birds chirping.\nWatch the 4k ultra high definition video in this video in somewhere at nail salon, public transport or restaurant. Relaxing music is playing in the background. Try out this 4k ultra high definition video let me know what you think in the comments below!.\n▽ Follow Earth Relaxation\n➤ Youtube → https://www.youtube.com/channel/UCS4jPUCax8d3f-uke--YXXQ\n#earthrelaxation​ #relaxingmusic​ #4kcanada\n----------------------------------------------------------------------\nMusic provided by EMVN\nSubmit your music: http://emvn.co/submitDemo\n📌 Contacts: copyright.thstudio@gmail.com, network@emvn.co\nTrack list:\n0:0:0 | 1 . Relax\n0:4:54 | 2 . Calm\n0:9:46 | 3 . Beach\n0:14:30 | 4 . Water\n\nFollow Artists:\nhttps://emvn.fanlink.to/melosy\n----------------------------------------------------------------------\n►All rights belong to their respective owners.\n✔ This video was given a special license directly from the artists and the right holders." + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT11H55M", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "2469341", + "likeCount": "9732", + "favoriteCount": "0", + "commentCount": "272" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "2340", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "hpfVMPCR3xA", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + }, + { + "data": { + "kind": "youtube#videoListResponse", + "etag": "328CcyeZl9Oo4tJ329OKRxgKHWI", + "items": [ + { + "kind": "youtube#video", + "etag": "oTYO1RgHPmQJcmrId6Bs_yysNkQ", + "id": "2OEL4P1Rz04", + "snippet": { + "publishedAt": "2019-09-04T13:08:32Z", + "channelId": "UCjzHeG1KWoonmf9d5KBvSiw", + "title": "Beautiful Relaxing Music for Stress Relief • Meditation Music, Sleep Music, Ambient Study Music", + "description": "Beautiful relaxing music for stress relief, composed by Peder B. Helland. This instrumental music (\"The Hidden Valley\") works well as sleep music, ambient study music, meditation music or relaxation music. Stream or download music from Soothing Relaxation: https://soothingrelaxation.lnk.to/listenYL\n\n💿 Track information:\nTitle: The Hidden Valley \nComposer: Peder B. Helland\nIndex: ★183\nAlbum: Flying\nBuy or stream this album: https://soothingrelaxation.com/products/flying-album\nBuy this track: https://soothingrelaxation.com/products/the-hidden-valley\nLicense this track: https://soothingrelaxation.com/products/the-hidden-valley-license\n\nFollow Soothing Relaxation on...\nSoothing Relaxation: https://soothingrelaxation.lnk.to/websiteYL\nFacebook: https://soothingrelaxation.lnk.to/FacebookYL\nInstagram: https://soothingrelaxation.lnk.to/InstagramYL\nSpotify: https://soothingrelaxation.lnk.to/listenYL/spotify\nApple Music: https://soothingrelaxation.lnk.to/listenYL/applemusic\nYouTube Music: https://soothingrelaxation.lnk.to/listenYL/youtubemusic\nAmazon Music: https://soothingrelaxation.lnk.to/listenYL/amazonmusic\nDeezer: https://soothingrelaxation.lnk.to/listenYL/deezer\n\nFollow Peder B. Helland on...\nWebsite: https://pederbhelland.lnk.to/websiteYL\nFacebook: https://pederbhelland.lnk.to/facebookYL\nInstagram: https://pederbhelland.lnk.to/instagramYL\n\nListen to our playlists on other music services: https://www.soothingplaylists.com/\nListen to more relaxing music: https://www.youtube.com/playlist?list=PLQ_PIlf6OzqL3BE0rB6clb9IzLLkkSKUF\nGet a free music download and stay updated with our newsletter: https://soothingrelaxation.lnk.to/newsletterYL\n\n📜 Message from the composer and creator of Soothing Relaxation:\n\"I am a composer from Norway and I started this channel with a simple vision: to create a place that you can visit whenever you want to sit down and relax. I compose music that often can be described as sleep music, calm music, yoga music, study music, peaceful music, beautiful music and relaxing music. I love to compose music and I put a lot of work into it. \n\nThank you very much for listening and for leaving feedback. Every single day I am completely astonished by all your warm support and it really inspires me to work even harder on my music. If you enjoy my work, I would be very happy if you decided to subscribe and join our community. Have a wonderful day or evening!\"\n\n- Peder B. Helland, composer for Soothing Relaxation\n\n© Copyright:\nMusic composed/arranged by Peder B. Helland. \nFootage/photos licensed from:\n• iStockPhoto: Treedeo, Yiming Li, Filmovar, MediaProduction, luza studios, ZoneCreative, SimonSkafar, captamotion, lavoview, f9photos, bo1982, sergeysxp, SimonSkafar, nattanan726, rmnunes, Forrestbro, crbellette, Mumemories, phaitoons, Yiming Li, komisar, ibigfish, gorodenkoff, FatCamera, SimonSkafar, JohnFScott, phaitoons, captamotion, Schroptschop, luza studios, Onfokus, DeoTree, Mumemories, superoke, NanoStockk\n• Pond5: azgek1, pavlas24, aflomotion \n• Videoblocks: jakerbreaker, cookelma, VladyslavStarozhylov, taden, guillaumelynn, Vadim_Key\n\n☀️ Relevant hashtags:\n#relaxingmusic, #relax, #soothingrelaxation, #music, #sleep", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/2OEL4P1Rz04/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "Soothing Relaxation", + "tags": [ + "calm", + "calm music", + "calming", + "calming music", + "cello", + "dormir", + "détendre", + "guitar", + "insomnia", + "meditar", + "meditation", + "meditation music", + "peaceful", + "peaceful music", + "peder b. helland", + "peter b. helland", + "piano", + "piano music", + "relajarse", + "relax", + "relaxante", + "relaxation", + "relaxing", + "relaxing music", + "sleep", + "sleep music", + "sleeping", + "sleeping music", + "smoothing relaxation", + "soothing", + "soothing music", + "soothing relaxation", + "study music" + ], + "categoryId": "10", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "Beautiful Relaxing Music for Stress Relief • Meditation Music, Sleep Music, Ambient Study Music", + "description": "Beautiful relaxing music for stress relief, composed by Peder B. Helland. This instrumental music (\"The Hidden Valley\") works well as sleep music, ambient study music, meditation music or relaxation music. Stream or download music from Soothing Relaxation: https://soothingrelaxation.lnk.to/listenYL\n\n💿 Track information:\nTitle: The Hidden Valley \nComposer: Peder B. Helland\nIndex: ★183\nAlbum: Flying\nBuy or stream this album: https://soothingrelaxation.com/products/flying-album\nBuy this track: https://soothingrelaxation.com/products/the-hidden-valley\nLicense this track: https://soothingrelaxation.com/products/the-hidden-valley-license\n\nFollow Soothing Relaxation on...\nSoothing Relaxation: https://soothingrelaxation.lnk.to/websiteYL\nFacebook: https://soothingrelaxation.lnk.to/FacebookYL\nInstagram: https://soothingrelaxation.lnk.to/InstagramYL\nSpotify: https://soothingrelaxation.lnk.to/listenYL/spotify\nApple Music: https://soothingrelaxation.lnk.to/listenYL/applemusic\nYouTube Music: https://soothingrelaxation.lnk.to/listenYL/youtubemusic\nAmazon Music: https://soothingrelaxation.lnk.to/listenYL/amazonmusic\nDeezer: https://soothingrelaxation.lnk.to/listenYL/deezer\n\nFollow Peder B. Helland on...\nWebsite: https://pederbhelland.lnk.to/websiteYL\nFacebook: https://pederbhelland.lnk.to/facebookYL\nInstagram: https://pederbhelland.lnk.to/instagramYL\n\nListen to our playlists on other music services: https://www.soothingplaylists.com/\nListen to more relaxing music: https://www.youtube.com/playlist?list=PLQ_PIlf6OzqL3BE0rB6clb9IzLLkkSKUF\nGet a free music download and stay updated with our newsletter: https://soothingrelaxation.lnk.to/newsletterYL\n\n📜 Message from the composer and creator of Soothing Relaxation:\n\"I am a composer from Norway and I started this channel with a simple vision: to create a place that you can visit whenever you want to sit down and relax. I compose music that often can be described as sleep music, calm music, yoga music, study music, peaceful music, beautiful music and relaxing music. I love to compose music and I put a lot of work into it. \n\nThank you very much for listening and for leaving feedback. Every single day I am completely astonished by all your warm support and it really inspires me to work even harder on my music. If you enjoy my work, I would be very happy if you decided to subscribe and join our community. Have a wonderful day or evening!\"\n\n- Peder B. Helland, composer for Soothing Relaxation\n\n© Copyright:\nMusic composed/arranged by Peder B. Helland. \nFootage/photos licensed from:\n• iStockPhoto: Treedeo, Yiming Li, Filmovar, MediaProduction, luza studios, ZoneCreative, SimonSkafar, captamotion, lavoview, f9photos, bo1982, sergeysxp, SimonSkafar, nattanan726, rmnunes, Forrestbro, crbellette, Mumemories, phaitoons, Yiming Li, komisar, ibigfish, gorodenkoff, FatCamera, SimonSkafar, JohnFScott, phaitoons, captamotion, Schroptschop, luza studios, Onfokus, DeoTree, Mumemories, superoke, NanoStockk\n• Pond5: azgek1, pavlas24, aflomotion \n• Videoblocks: jakerbreaker, cookelma, VladyslavStarozhylov, taden, guillaumelynn, Vadim_Key\n\n☀️ Relevant hashtags:\n#relaxingmusic, #relax, #soothingrelaxation, #music, #sleep" + }, + "defaultAudioLanguage": "en-US" + }, + "contentDetails": { + "duration": "PT3H1M8S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "43034058", + "likeCount": "291322", + "favoriteCount": "0", + "commentCount": "13032" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } + }, + "status": 200, + "statusText": "", + "headers": { + "cache-control": "private", + "content-encoding": "gzip", + "content-length": "2457", + "content-type": "application/json; charset=UTF-8", + "date": "Wed, 18 Jan 2023 05:11:21 GMT", + "server": "scaffolding on HTTPServer2", + "vary": "Origin, X-Origin, Referer" + }, + "config": { + "transitional": { + "silentJSONParsing": true, + "forcedJSONParsing": true, + "clarifyTimeoutError": false + }, + "adapter": ["xhr", "http"], + "transformRequest": [null], + "transformResponse": [null], + "timeout": 0, + "xsrfCookieName": "XSRF-TOKEN", + "xsrfHeaderName": "X-XSRF-TOKEN", + "maxContentLength": -1, + "maxBodyLength": -1, + "env": {}, + "headers": { + "Accept": "application/json, text/plain, */*" + }, + "params": { + "part": ["snippet", "contentDetails", "player", "statistics"], + "id": "2OEL4P1Rz04", + "key": "AIzaSyD08Wd5NaXlc9Gs6pP_83Hdxiuj5RM_lKA" + }, + "paramsSerializer": { + "indexes": null + }, + "method": "get", + "url": "https://www.googleapis.com/youtube/v3/videos" + }, + "request": {} + } +] diff --git a/src/data/search.json b/src/data/search.json new file mode 100644 index 0000000..3bbd4c1 --- /dev/null +++ b/src/data/search.json @@ -0,0 +1,352 @@ +{ + "kind": "youtube#searchListResponse", + "etag": "YcuuFfIIltG8dM7s7HBWM0IN21U", + "nextPageToken": "CAoQAA", + "regionCode": "KR", + "pageInfo": { + "totalResults": 1000000, + "resultsPerPage": 10 + }, + "items": [ + { + "kind": "youtube#searchResult", + "etag": "xtFzYgGE-wyFr170fT7OYdgcX3g", + "id": { + "kind": "youtube#video", + "videoId": "ftx0TASezHM" + }, + "snippet": { + "publishedAt": "2021-05-12T06:00:12Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv] 어피치의 만능 병따개", + "description": "PeachFiv #Tiktok #shorts #피치파이브 어피치가 자랑하는 만능 병따개는 바로 바로, 러피치의 만능 피치파이브 매주 월/수/금 ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/ftx0TASezHM/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/ftx0TASezHM/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/ftx0TASezHM/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2021-05-12T06:00:12Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "wXHdR8jx5xmxxfDFwse4hCQVzBY", + "id": { + "kind": "youtube#video", + "videoId": "-zAh60zzoEM" + }, + "snippet": { + "publishedAt": "2022-11-17T03:00:00Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv Season 3] EP6. 폭신폭신", + "description": "나는 고민이 있다.. 팬케이크 침대에 메이플시럽 이불 덮고 누웠는데.. 일어날 수가 없다.. 어떡하지? 피치파이브 시즌3는 매주 ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/-zAh60zzoEM/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/-zAh60zzoEM/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/-zAh60zzoEM/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2022-11-17T03:00:00Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "J56tZqV-7FGwPY2iAL8sGPmYcNA", + "id": { + "kind": "youtube#video", + "videoId": "g4-ecNSENb0" + }, + "snippet": { + "publishedAt": "2015-10-08T10:26:46Z", + "channelId": "UCBjvBJgIp3NGkrTBEfWBUVw", + "title": "[카카오프렌즈] 어피치 스페셜 에디션", + "description": "", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/g4-ecNSENb0/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/g4-ecNSENb0/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/g4-ecNSENb0/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오", + "liveBroadcastContent": "none", + "publishTime": "2015-10-08T10:26:46Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "_CnyciXBcI07i8CPdvdee5bCVQA", + "id": { + "kind": "youtube#video", + "videoId": "4dMcgbLPE_o" + }, + "snippet": { + "publishedAt": "2023-01-12T03:00:02Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv Season 3] EP14. This is why I’m fat", + "description": "디저트는 살 안 쪄요~ 살은 내가 찌니까..✨ 이쯤 되면 디저트는 다이어트 푸드라는 게 학계의 정설 어피치의 다양한 활동을 인스타 ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/4dMcgbLPE_o/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/4dMcgbLPE_o/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/4dMcgbLPE_o/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2023-01-12T03:00:02Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "um1eCnFV00hG-v2By0EfFyWZGWw", + "id": { + "kind": "youtube#video", + "videoId": "ey8YMpwgSMw" + }, + "snippet": { + "publishedAt": "2021-11-12T03:30:08Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv Season 2] Ep.19 피치파이브 먹방의 세계", + "description": "PeachFiv #피치파이브 #kakaofriends #shorts 맛있으면 0칼로리 피치파이브 매주 월/수/목/금 틱톡에서도 연재!", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/ey8YMpwgSMw/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/ey8YMpwgSMw/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/ey8YMpwgSMw/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2021-11-12T03:30:08Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "mah8GOybcGW5WD-zIALd81-3g7Q", + "id": { + "kind": "youtube#video", + "videoId": "9GswWdzcYbI" + }, + "snippet": { + "publishedAt": "2018-03-07T04:25:38Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[official] 🍑어피치 뷰티팁 공개! (Apeach's Beauty Tips)", + "description": "'어피치 블라썸'으로 사랑스러움 뿜뿜 http://bit.ly/2HbkrE8 - Apeach is busy getting ready for spring Check out 'Apeach ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/9GswWdzcYbI/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/9GswWdzcYbI/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/9GswWdzcYbI/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2018-03-07T04:25:38Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "1M1TlmPqXrdHXep5rHQjvTW60sU", + "id": { + "kind": "youtube#video", + "videoId": "289x49tWkVQ" + }, + "snippet": { + "publishedAt": "2021-04-30T06:00:00Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv] 피치파이브의 교양있는 식사", + "description": "피치파이브 #PeachFiv #틱톡 #shorts 피치파이브는 언제나 먹는 것엔 진심인 편 구독과 좋아요 꾹 눌러주세요! 피치파이브 ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/289x49tWkVQ/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/289x49tWkVQ/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/289x49tWkVQ/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2021-04-30T06:00:00Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "Q9g2lMiw2DI-O6ltk1IeIzUVNxs", + "id": { + "kind": "youtube#video", + "videoId": "osn1yi87y9o" + }, + "snippet": { + "publishedAt": "2018-04-10T02:30:04Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[official] 어피치 이 장난 꾸러기 (Portrait of Ryan)", + "description": "딱 걸렸어 프렌즈다이어리_07 #Portrait - Apeach, you punk! FriendsDiary_07 #Portrait.", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/osn1yi87y9o/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/osn1yi87y9o/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/osn1yi87y9o/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2018-04-10T02:30:04Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "Qe1VePqdOF288hncAy_ALDQUqaM", + "id": { + "kind": "youtube#video", + "videoId": "eiCwjTiUw4k" + }, + "snippet": { + "publishedAt": "2020-08-10T09:32:55Z", + "channelId": "UCGqN5CkyBXTHOXJAx3athnQ", + "title": "살쪄서 속상한 어피치를 위한 라이언의 매직! 카카오프렌즈 홈 세계관 영상", + "description": "부쩍 살이 쪄 속상해하는 어피치를 위해 라이언이 구름을 모아 만들었어요! 짜잔✨ ☁️'카카오프렌즈 홈' 스마트 체중계.", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/eiCwjTiUw4k/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/eiCwjTiUw4k/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/eiCwjTiUw4k/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 홈 KAKAOFRIENDS HOME", + "liveBroadcastContent": "none", + "publishTime": "2020-08-10T09:32:55Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "UQwHADZAoGgI66GV19_uBz1HaD8", + "id": { + "kind": "youtube#video", + "videoId": "XivaCu8js_o" + }, + "snippet": { + "publishedAt": "2022-09-27T04:00:11Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv Season 3] teaser 2. 벼락스타 어피치", + "description": "눈 떠보니 1억뷰! 글로벌 벼락 스타가 된 어피치가 시즌3로 돌아온다! 믿고보는 뷰맛집 피치파이브 시즌1,2 복습하기⬇️⬇️ ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/XivaCu8js_o/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/XivaCu8js_o/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/XivaCu8js_o/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2022-09-27T04:00:11Z" + } + } + ] +} diff --git a/src/data/video.json b/src/data/video.json new file mode 100644 index 0000000..2afa848 --- /dev/null +++ b/src/data/video.json @@ -0,0 +1,81 @@ +{ + "kind": "youtube#videoListResponse", + "etag": "j3_sWA3i4-pynd4Gfa1pwaSNYkc", + "items": [ + { + "kind": "youtube#video", + "etag": "X_QzO1iO9C9mTZLq-MGyFdypI20", + "id": "G1hKzCkywM8", + "snippet": { + "publishedAt": "2021-05-22T06:00:05Z", + "channelId": "UCb57aRZr3KsykS_wNsD5Ptw", + "title": "6 Hour 4K Beautiful places Aerial Views", + "description": "Please enjoy 6Hour aerial journey of beautiful places on the Earth.\nThis tour will take you around the world's great nature. \nFrom Islands,Forests, Mountains, Rivers and Waterfalls please enjoy no loop movie of scenic views.\n\nIf you like our video, please subscribe to our channel\nhttp://www.youtube.com/channel/UCb57aRZr3KsykS_wNsD5Ptw?sub_confirmation=1\n\nBeautiful Nature of the Earth\nhttps://www.youtube.com/playlist?list=PL91Hm3FcmpU-CK1lZrfJR_6F8LukIPpxQ\n\nPrimal Earth Sounds\nhttps://www.youtube.com/playlist?list=PL91Hm3FcmpU_vKfeTgE4Rf8zj4mxSme-y", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/G1hKzCkywM8/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "PRIMAL EARTH ", + "tags": [ + "Primal Earth Sounds", + "4k", + "4k nature", + "relaxation music" + ], + "categoryId": "19", + "liveBroadcastContent": "none", + "defaultLanguage": "en", + "localized": { + "title": "6 Hour 4K Beautiful places Aerial Views", + "description": "Please enjoy 6Hour aerial journey of beautiful places on the Earth.\nThis tour will take you around the world's great nature. \nFrom Islands,Forests, Mountains, Rivers and Waterfalls please enjoy no loop movie of scenic views.\n\nIf you like our video, please subscribe to our channel\nhttp://www.youtube.com/channel/UCb57aRZr3KsykS_wNsD5Ptw?sub_confirmation=1\n\nBeautiful Nature of the Earth\nhttps://www.youtube.com/playlist?list=PL91Hm3FcmpU-CK1lZrfJR_6F8LukIPpxQ\n\nPrimal Earth Sounds\nhttps://www.youtube.com/playlist?list=PL91Hm3FcmpU_vKfeTgE4Rf8zj4mxSme-y" + }, + "defaultAudioLanguage": "en" + }, + "contentDetails": { + "duration": "PT6H10M13S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": true, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "2040184", + "likeCount": "11869", + "favoriteCount": "0", + "commentCount": "298" + }, + "player": { + "embedHtml": "" + } + } + ], + "pageInfo": { + "totalResults": 1, + "resultsPerPage": 1 + } +} diff --git a/src/data/videos.json b/src/data/videos.json new file mode 100644 index 0000000..3bbd4c1 --- /dev/null +++ b/src/data/videos.json @@ -0,0 +1,352 @@ +{ + "kind": "youtube#searchListResponse", + "etag": "YcuuFfIIltG8dM7s7HBWM0IN21U", + "nextPageToken": "CAoQAA", + "regionCode": "KR", + "pageInfo": { + "totalResults": 1000000, + "resultsPerPage": 10 + }, + "items": [ + { + "kind": "youtube#searchResult", + "etag": "xtFzYgGE-wyFr170fT7OYdgcX3g", + "id": { + "kind": "youtube#video", + "videoId": "ftx0TASezHM" + }, + "snippet": { + "publishedAt": "2021-05-12T06:00:12Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv] 어피치의 만능 병따개", + "description": "PeachFiv #Tiktok #shorts #피치파이브 어피치가 자랑하는 만능 병따개는 바로 바로, 러피치의 만능 피치파이브 매주 월/수/금 ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/ftx0TASezHM/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/ftx0TASezHM/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/ftx0TASezHM/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2021-05-12T06:00:12Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "wXHdR8jx5xmxxfDFwse4hCQVzBY", + "id": { + "kind": "youtube#video", + "videoId": "-zAh60zzoEM" + }, + "snippet": { + "publishedAt": "2022-11-17T03:00:00Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv Season 3] EP6. 폭신폭신", + "description": "나는 고민이 있다.. 팬케이크 침대에 메이플시럽 이불 덮고 누웠는데.. 일어날 수가 없다.. 어떡하지? 피치파이브 시즌3는 매주 ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/-zAh60zzoEM/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/-zAh60zzoEM/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/-zAh60zzoEM/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2022-11-17T03:00:00Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "J56tZqV-7FGwPY2iAL8sGPmYcNA", + "id": { + "kind": "youtube#video", + "videoId": "g4-ecNSENb0" + }, + "snippet": { + "publishedAt": "2015-10-08T10:26:46Z", + "channelId": "UCBjvBJgIp3NGkrTBEfWBUVw", + "title": "[카카오프렌즈] 어피치 스페셜 에디션", + "description": "", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/g4-ecNSENb0/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/g4-ecNSENb0/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/g4-ecNSENb0/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오", + "liveBroadcastContent": "none", + "publishTime": "2015-10-08T10:26:46Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "_CnyciXBcI07i8CPdvdee5bCVQA", + "id": { + "kind": "youtube#video", + "videoId": "4dMcgbLPE_o" + }, + "snippet": { + "publishedAt": "2023-01-12T03:00:02Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv Season 3] EP14. This is why I’m fat", + "description": "디저트는 살 안 쪄요~ 살은 내가 찌니까..✨ 이쯤 되면 디저트는 다이어트 푸드라는 게 학계의 정설 어피치의 다양한 활동을 인스타 ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/4dMcgbLPE_o/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/4dMcgbLPE_o/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/4dMcgbLPE_o/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2023-01-12T03:00:02Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "um1eCnFV00hG-v2By0EfFyWZGWw", + "id": { + "kind": "youtube#video", + "videoId": "ey8YMpwgSMw" + }, + "snippet": { + "publishedAt": "2021-11-12T03:30:08Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv Season 2] Ep.19 피치파이브 먹방의 세계", + "description": "PeachFiv #피치파이브 #kakaofriends #shorts 맛있으면 0칼로리 피치파이브 매주 월/수/목/금 틱톡에서도 연재!", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/ey8YMpwgSMw/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/ey8YMpwgSMw/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/ey8YMpwgSMw/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2021-11-12T03:30:08Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "mah8GOybcGW5WD-zIALd81-3g7Q", + "id": { + "kind": "youtube#video", + "videoId": "9GswWdzcYbI" + }, + "snippet": { + "publishedAt": "2018-03-07T04:25:38Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[official] 🍑어피치 뷰티팁 공개! (Apeach's Beauty Tips)", + "description": "'어피치 블라썸'으로 사랑스러움 뿜뿜 http://bit.ly/2HbkrE8 - Apeach is busy getting ready for spring Check out 'Apeach ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/9GswWdzcYbI/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/9GswWdzcYbI/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/9GswWdzcYbI/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2018-03-07T04:25:38Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "1M1TlmPqXrdHXep5rHQjvTW60sU", + "id": { + "kind": "youtube#video", + "videoId": "289x49tWkVQ" + }, + "snippet": { + "publishedAt": "2021-04-30T06:00:00Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv] 피치파이브의 교양있는 식사", + "description": "피치파이브 #PeachFiv #틱톡 #shorts 피치파이브는 언제나 먹는 것엔 진심인 편 구독과 좋아요 꾹 눌러주세요! 피치파이브 ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/289x49tWkVQ/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/289x49tWkVQ/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/289x49tWkVQ/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2021-04-30T06:00:00Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "Q9g2lMiw2DI-O6ltk1IeIzUVNxs", + "id": { + "kind": "youtube#video", + "videoId": "osn1yi87y9o" + }, + "snippet": { + "publishedAt": "2018-04-10T02:30:04Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[official] 어피치 이 장난 꾸러기 (Portrait of Ryan)", + "description": "딱 걸렸어 프렌즈다이어리_07 #Portrait - Apeach, you punk! FriendsDiary_07 #Portrait.", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/osn1yi87y9o/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/osn1yi87y9o/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/osn1yi87y9o/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2018-04-10T02:30:04Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "Qe1VePqdOF288hncAy_ALDQUqaM", + "id": { + "kind": "youtube#video", + "videoId": "eiCwjTiUw4k" + }, + "snippet": { + "publishedAt": "2020-08-10T09:32:55Z", + "channelId": "UCGqN5CkyBXTHOXJAx3athnQ", + "title": "살쪄서 속상한 어피치를 위한 라이언의 매직! 카카오프렌즈 홈 세계관 영상", + "description": "부쩍 살이 쪄 속상해하는 어피치를 위해 라이언이 구름을 모아 만들었어요! 짜잔✨ ☁️'카카오프렌즈 홈' 스마트 체중계.", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/eiCwjTiUw4k/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/eiCwjTiUw4k/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/eiCwjTiUw4k/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 홈 KAKAOFRIENDS HOME", + "liveBroadcastContent": "none", + "publishTime": "2020-08-10T09:32:55Z" + } + }, + { + "kind": "youtube#searchResult", + "etag": "UQwHADZAoGgI66GV19_uBz1HaD8", + "id": { + "kind": "youtube#video", + "videoId": "XivaCu8js_o" + }, + "snippet": { + "publishedAt": "2022-09-27T04:00:11Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv Season 3] teaser 2. 벼락스타 어피치", + "description": "눈 떠보니 1억뷰! 글로벌 벼락 스타가 된 어피치가 시즌3로 돌아온다! 믿고보는 뷰맛집 피치파이브 시즌1,2 복습하기⬇️⬇️ ...", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/XivaCu8js_o/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/XivaCu8js_o/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/XivaCu8js_o/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "liveBroadcastContent": "none", + "publishTime": "2022-09-27T04:00:11Z" + } + } + ] +} diff --git a/src/data/videosDetail.json b/src/data/videosDetail.json new file mode 100644 index 0000000..716d1d2 --- /dev/null +++ b/src/data/videosDetail.json @@ -0,0 +1,660 @@ +{ + "kind": "youtube#videoListResponse", + "etag": "l1_Od_uric1OSRHwb2FZ1xuK25Y", + "items": [ + { + "kind": "youtube#video", + "etag": "I7jKdQEuwsEok2vO9xvcCVjq-c8", + "id": "ftx0TASezHM", + "snippet": { + "publishedAt": "2021-05-12T06:00:12Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv] 어피치의 만능 병따개", + "description": "#PeachFiv #Tiktok #shorts #피치파이브\n\n어피치가 자랑하는 만능 병따개는 바로 바로, \n러피치의 만능 🦷 😉\n\n📍피치파이브 매주 월/수/금 틱톡에서도 연재\nTiktok : @apeach_official \n👉 틱톡앱 바로가기 https://vm.tiktok.com/ZMemxtjkq/", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/ftx0TASezHM/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/ftx0TASezHM/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/ftx0TASezHM/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/ftx0TASezHM/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/ftx0TASezHM/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "categoryId": "22", + "liveBroadcastContent": "none", + "localized": { + "title": "[PeachFiv] 어피치의 만능 병따개", + "description": "#PeachFiv #Tiktok #shorts #피치파이브\n\n어피치가 자랑하는 만능 병따개는 바로 바로, \n러피치의 만능 🦷 😉\n\n📍피치파이브 매주 월/수/금 틱톡에서도 연재\nTiktok : @apeach_official \n👉 틱톡앱 바로가기 https://vm.tiktok.com/ZMemxtjkq/" + } + }, + "contentDetails": { + "duration": "PT1M3S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": false, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "625118", + "likeCount": "7307", + "favoriteCount": "0", + "commentCount": "454" + } + }, + { + "kind": "youtube#video", + "etag": "SnXa6Hga4EHNZzfGpC899tTt-G8", + "id": "-zAh60zzoEM", + "snippet": { + "publishedAt": "2022-11-17T03:00:00Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv Season 3] EP6. 폭신폭신", + "description": "나는 고민이 있다..\n팬케이크 침대에 메이플시럽 이불 덮고 누웠는데..🥞\n일어날 수가 없다.. 어떡하지?🥺\n\n📍 피치파이브 시즌3는 매주 목요일 낮 12시 어피치 틱톡에서도 연재중!⬇️\nhttps://www.tiktok.com/@apeach_official\n\n📍어피치의 다양한 활동을 인스타그램에서도 만나보세요!\nhttps://www.instagram.com/kakaofriends_jp/\n\n#폭신폭신 #팬케이크 #피치파이브 #피치파이브시즌3 #어피치 #뷰맛집\n#PeachFiv #kakaofriends #apeach #3d #animation #shorts", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/-zAh60zzoEM/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/-zAh60zzoEM/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/-zAh60zzoEM/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/-zAh60zzoEM/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/-zAh60zzoEM/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "categoryId": "1", + "liveBroadcastContent": "none", + "localized": { + "title": "[PeachFiv Season 3] EP6. 폭신폭신", + "description": "나는 고민이 있다..\n팬케이크 침대에 메이플시럽 이불 덮고 누웠는데..🥞\n일어날 수가 없다.. 어떡하지?🥺\n\n📍 피치파이브 시즌3는 매주 목요일 낮 12시 어피치 틱톡에서도 연재중!⬇️\nhttps://www.tiktok.com/@apeach_official\n\n📍어피치의 다양한 활동을 인스타그램에서도 만나보세요!\nhttps://www.instagram.com/kakaofriends_jp/\n\n#폭신폭신 #팬케이크 #피치파이브 #피치파이브시즌3 #어피치 #뷰맛집\n#PeachFiv #kakaofriends #apeach #3d #animation #shorts" + } + }, + "contentDetails": { + "duration": "PT13S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": false, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "3724042", + "likeCount": "84656", + "favoriteCount": "0", + "commentCount": "2259" + } + }, + { + "kind": "youtube#video", + "etag": "Y021LuiRRjSSJnlku5ZZniQAYJQ", + "id": "g4-ecNSENb0", + "snippet": { + "publishedAt": "2015-10-08T10:26:46Z", + "channelId": "UCBjvBJgIp3NGkrTBEfWBUVw", + "title": "[카카오프렌즈] 어피치 스페셜 에디션", + "description": "", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/g4-ecNSENb0/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/g4-ecNSENb0/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/g4-ecNSENb0/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/g4-ecNSENb0/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/g4-ecNSENb0/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "카카오", + "tags": [ + "카카오프렌즈", + "카카오톡", + "카카오톡 이모티콘", + "카카오 캐릭터", + "카카오프렌즈 이모티콘" + ], + "categoryId": "24", + "liveBroadcastContent": "none", + "localized": { + "title": "[카카오프렌즈] 어피치 스페셜 에디션", + "description": "" + } + }, + "contentDetails": { + "duration": "PT1M11S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": false, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "1391390", + "likeCount": "8300", + "favoriteCount": "0", + "commentCount": "1026" + } + }, + { + "kind": "youtube#video", + "etag": "PVmdMSpqqXQJ0ikZer74Gnm-ie4", + "id": "4dMcgbLPE_o", + "snippet": { + "publishedAt": "2023-01-12T03:00:02Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv Season 3] EP14. This is why I’m fat", + "description": "디저트는 살 안 쪄요~🤤 살은 내가 찌니까..✨\n이쯤 되면 디저트는 다이어트 푸드라는 게 학계의 정설\n\n📍어피치의 다양한 활동을 인스타그램에서도 만나보세요!\nhttps://www.instagram.com/kakaofriends_jp/\n\n📍 피치파이브 시즌3는 매주 목요일 낮 12시 어피치 틱톡에서도 연재중!⬇️\nhttps://www.tiktok.com/@apeach_official\n\n#whyimfat #food #mukbang #dessert #피치파이브시즌3 #어피치챌린지\n#PeachFiv #kakaofriends #apeach #3d #animation #shorts", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/4dMcgbLPE_o/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/4dMcgbLPE_o/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/4dMcgbLPE_o/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/4dMcgbLPE_o/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/4dMcgbLPE_o/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "categoryId": "1", + "liveBroadcastContent": "none", + "localized": { + "title": "[PeachFiv Season 3] EP14. This is why I’m fat", + "description": "디저트는 살 안 쪄요~🤤 살은 내가 찌니까..✨\n이쯤 되면 디저트는 다이어트 푸드라는 게 학계의 정설\n\n📍어피치의 다양한 활동을 인스타그램에서도 만나보세요!\nhttps://www.instagram.com/kakaofriends_jp/\n\n📍 피치파이브 시즌3는 매주 목요일 낮 12시 어피치 틱톡에서도 연재중!⬇️\nhttps://www.tiktok.com/@apeach_official\n\n#whyimfat #food #mukbang #dessert #피치파이브시즌3 #어피치챌린지\n#PeachFiv #kakaofriends #apeach #3d #animation #shorts" + } + }, + "contentDetails": { + "duration": "PT8S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": false, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "300273", + "likeCount": "5526", + "favoriteCount": "0", + "commentCount": "76" + } + }, + { + "kind": "youtube#video", + "etag": "dHpBXqx8HfcHOX7qyN06mlmG_VA", + "id": "ey8YMpwgSMw", + "snippet": { + "publishedAt": "2021-11-12T03:30:08Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv Season 2] Ep.19 피치파이브 먹방의 세계", + "description": "#PeachFiv #피치파이브 #kakaofriends #shorts \n\n맛있으면 0칼로리🙄\n\n📍피치파이브 매주 월/수/목/금 틱톡에서도 연재! \n https://www.tiktok.com/@apeach_official \n\n#animation #mukbang", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/ey8YMpwgSMw/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/ey8YMpwgSMw/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/ey8YMpwgSMw/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/ey8YMpwgSMw/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/ey8YMpwgSMw/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "categoryId": "1", + "liveBroadcastContent": "none", + "localized": { + "title": "[PeachFiv Season 2] Ep.19 피치파이브 먹방의 세계", + "description": "#PeachFiv #피치파이브 #kakaofriends #shorts \n\n맛있으면 0칼로리🙄\n\n📍피치파이브 매주 월/수/목/금 틱톡에서도 연재! \n https://www.tiktok.com/@apeach_official \n\n#animation #mukbang" + } + }, + "contentDetails": { + "duration": "PT21S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": false, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "37613512", + "likeCount": "641100", + "favoriteCount": "0", + "commentCount": "2918" + } + }, + { + "kind": "youtube#video", + "etag": "-iU6jj-cw5z6Ot5KEOwW38SbLPU", + "id": "9GswWdzcYbI", + "snippet": { + "publishedAt": "2018-03-07T04:25:38Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[official] 🍑어피치 뷰티팁 공개! (Apeach's Beauty Tips)", + "description": "‘어피치 블라썸’으로 사랑스러움 뿜뿜 💕\n👉🏻 http://bit.ly/2HbkrE8\n-\nApeach is busy getting ready for spring 🍑\nCheck out ‘Apeach Blossom’ beauty items in March for spring beauty tips!", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/9GswWdzcYbI/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/9GswWdzcYbI/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/9GswWdzcYbI/hqdefault.jpg", + "width": 480, + "height": 360 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "tags": [ + "카카오프렌즈", + "카카오톡", + "카카오", + "어피치", + "어피치블라썸", + "카카오프렌즈샵", + "복숭아", + "카카오캐릭터", + "카카오톡캐릭터", + "apeach", + "peach", + "kakaotalk", + "kakaofriends", + "beautytip", + "뷰티팁", + "카카오프렌즈 어피치", + "어피치송", + "카카오프렌즈 만화", + "어피치 노래", + "beauty" + ], + "categoryId": "22", + "liveBroadcastContent": "none", + "localized": { + "title": "[official] 🍑어피치 뷰티팁 공개! (Apeach's Beauty Tips)", + "description": "‘어피치 블라썸’으로 사랑스러움 뿜뿜 💕\n👉🏻 http://bit.ly/2HbkrE8\n-\nApeach is busy getting ready for spring 🍑\nCheck out ‘Apeach Blossom’ beauty items in March for spring beauty tips!" + } + }, + "contentDetails": { + "duration": "PT22S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": false, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "500208", + "likeCount": "11013", + "favoriteCount": "0", + "commentCount": "628" + } + }, + { + "kind": "youtube#video", + "etag": "EXrb_zxPZQ4tSCqqgKFuYhp9u6w", + "id": "289x49tWkVQ", + "snippet": { + "publishedAt": "2021-04-30T06:00:00Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv] 피치파이브의 교양있는 식사", + "description": "#피치파이브 #PeachFiv #틱톡 #shorts\n\n피치파이브는 언제나 🍫 먹는 것엔 진심인 편💡 \n\n구독과 좋아요 꾹 눌러주세요! \n📍피치파이브 매주 월/수/금 틱톡에서도 연재\nTiktok : @apeach_official \n👉 틱톡앱 바로가기 https://vm.tiktok.com/ZMemxtjkq/", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/289x49tWkVQ/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/289x49tWkVQ/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/289x49tWkVQ/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/289x49tWkVQ/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/289x49tWkVQ/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "categoryId": "22", + "liveBroadcastContent": "none", + "localized": { + "title": "[PeachFiv] 피치파이브의 교양있는 식사", + "description": "#피치파이브 #PeachFiv #틱톡 #shorts\n\n피치파이브는 언제나 🍫 먹는 것엔 진심인 편💡 \n\n구독과 좋아요 꾹 눌러주세요! \n📍피치파이브 매주 월/수/금 틱톡에서도 연재\nTiktok : @apeach_official \n👉 틱톡앱 바로가기 https://vm.tiktok.com/ZMemxtjkq/" + } + }, + "contentDetails": { + "duration": "PT43S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": false, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "253497", + "likeCount": "6945", + "favoriteCount": "0", + "commentCount": "147" + } + }, + { + "kind": "youtube#video", + "etag": "r52I4hKa3VPnWVpNVa25A5LnUTQ", + "id": "osn1yi87y9o", + "snippet": { + "publishedAt": "2018-04-10T02:30:04Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[official] 어피치 이 장난 꾸러기 (Portrait of Ryan)", + "description": "🍑! 딱 걸렸어 👀\n프렌즈다이어리_07 #Portrait\n-\nApeach, you punk! 👀\nFriendsDiary_07 #Portrait", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/osn1yi87y9o/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/osn1yi87y9o/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/osn1yi87y9o/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/osn1yi87y9o/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/osn1yi87y9o/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "tags": [ + "카카오프렌즈", + "카카오톡", + "카카오", + "카카오톡캐릭터", + "라이언", + "어피치", + "장난", + "놀리기", + "kakaofriends", + "kakao", + "kakaotalk", + "ryan", + "apeach", + "teasing", + "프렌즈다이어리", + "카카오프렌즈 라이언", + "카카오프렌즈 어피치", + "라이언어피치", + "카카오프렌즈 만화" + ], + "categoryId": "22", + "liveBroadcastContent": "none", + "localized": { + "title": "[official] 어피치 이 장난 꾸러기 (Portrait of Ryan)", + "description": "🍑! 딱 걸렸어 👀\n프렌즈다이어리_07 #Portrait\n-\nApeach, you punk! 👀\nFriendsDiary_07 #Portrait" + } + }, + "contentDetails": { + "duration": "PT14S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": false, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "227753", + "likeCount": "4076", + "favoriteCount": "0", + "commentCount": "122" + } + }, + { + "kind": "youtube#video", + "etag": "45l9Ae9K9MrT-h20f1GrqDfLNFU", + "id": "eiCwjTiUw4k", + "snippet": { + "publishedAt": "2020-08-10T09:32:55Z", + "channelId": "UCGqN5CkyBXTHOXJAx3athnQ", + "title": "살쪄서 속상한 어피치를 위한 라이언의 매직! 카카오프렌즈 홈 세계관 영상", + "description": "부쩍 살이 쪄 속상해하는 어피치를 위해\n라이언이 구름을 모아 만들었어요! 짜잔✨\n\n☁️’카카오프렌즈 홈’ 스마트 체중계☁️", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/eiCwjTiUw4k/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/eiCwjTiUw4k/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/eiCwjTiUw4k/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/eiCwjTiUw4k/sddefault.jpg", + "width": 640, + "height": 480 + } + }, + "channelTitle": "카카오프렌즈 홈 KAKAOFRIENDS HOME", + "tags": [ + "카카오프렌즈홈", + "카카오프렌즈체중계", + "카카오프렌즈홈체중계", + "카카오프렌즈", + "카카오프렌즈스토리", + "카카오브랜드스토리", + "카카오체중계", + "다이어트", + "스마트체중계", + "집들이", + "집들이선물", + "인테리어", + "인테리어소품" + ], + "categoryId": "22", + "liveBroadcastContent": "none", + "localized": { + "title": "살쪄서 속상한 어피치를 위한 라이언의 매직! 카카오프렌즈 홈 세계관 영상", + "description": "부쩍 살이 쪄 속상해하는 어피치를 위해\n라이언이 구름을 모아 만들었어요! 짜잔✨\n\n☁️’카카오프렌즈 홈’ 스마트 체중계☁️" + } + }, + "contentDetails": { + "duration": "PT46S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": false, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "88298", + "likeCount": "564", + "favoriteCount": "0", + "commentCount": "47" + } + }, + { + "kind": "youtube#video", + "etag": "QHwg2mPzGoqpKk_rzthEZMeCBm8", + "id": "XivaCu8js_o", + "snippet": { + "publishedAt": "2022-09-27T04:00:11Z", + "channelId": "UCFnuC4E0kzpJF6vv1OJ7B3Q", + "title": "[PeachFiv Season 3] teaser 2. 벼락스타 어피치", + "description": "눈 떠보니 1억뷰!🤭\n글로벌 벼락 스타가 된 어피치가 시즌3로 돌아온다!\n\n📍믿고보는 뷰맛집 피치파이브 시즌1,2 복습하기⬇️⬇️\nhttps://www.tiktok.com/@apeach_official\n\n#1억뷰 #뷰맛집 #어피치 #피치파이브 #피치파이브시즌3 #PeachFiv\n#kakaofriends #apeach #mukbang #3d #animation #shorts", + "thumbnails": { + "default": { + "url": "https://i.ytimg.com/vi/XivaCu8js_o/default.jpg", + "width": 120, + "height": 90 + }, + "medium": { + "url": "https://i.ytimg.com/vi/XivaCu8js_o/mqdefault.jpg", + "width": 320, + "height": 180 + }, + "high": { + "url": "https://i.ytimg.com/vi/XivaCu8js_o/hqdefault.jpg", + "width": 480, + "height": 360 + }, + "standard": { + "url": "https://i.ytimg.com/vi/XivaCu8js_o/sddefault.jpg", + "width": 640, + "height": 480 + }, + "maxres": { + "url": "https://i.ytimg.com/vi/XivaCu8js_o/maxresdefault.jpg", + "width": 1280, + "height": 720 + } + }, + "channelTitle": "카카오프렌즈 KAKAO FRIENDS", + "categoryId": "1", + "liveBroadcastContent": "none", + "localized": { + "title": "[PeachFiv Season 3] teaser 2. 벼락스타 어피치", + "description": "눈 떠보니 1억뷰!🤭\n글로벌 벼락 스타가 된 어피치가 시즌3로 돌아온다!\n\n📍믿고보는 뷰맛집 피치파이브 시즌1,2 복습하기⬇️⬇️\nhttps://www.tiktok.com/@apeach_official\n\n#1억뷰 #뷰맛집 #어피치 #피치파이브 #피치파이브시즌3 #PeachFiv\n#kakaofriends #apeach #mukbang #3d #animation #shorts" + } + }, + "contentDetails": { + "duration": "PT12S", + "dimension": "2d", + "definition": "hd", + "caption": "false", + "licensedContent": false, + "contentRating": {}, + "projection": "rectangular" + }, + "statistics": { + "viewCount": "508619", + "likeCount": "8729", + "favoriteCount": "0", + "commentCount": "31" + } + } + ], + "pageInfo": { + "totalResults": 10, + "resultsPerPage": 10 + } +} diff --git a/src/index.css b/src/index.css new file mode 100644 index 0000000..09583db --- /dev/null +++ b/src/index.css @@ -0,0 +1,3 @@ +/* reset.css */ +@import url("https://cdn.jsdelivr.net/npm/reset-css@5.0.1/reset.min.css"); + diff --git a/src/main.jsx b/src/main.jsx new file mode 100644 index 0000000..6214445 --- /dev/null +++ b/src/main.jsx @@ -0,0 +1,33 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import { createBrowserRouter, RouterProvider } from "react-router-dom"; +import App from "./App"; +import "./index.css"; +import MainPage from "./pages/MainPage/MainPage"; +import PlayPage from "./pages/PlayPage/PlayPage"; +import SearchPage from "./pages/SearchPage/SearchPage"; + +const router = createBrowserRouter([ + { + path: "/", + element: , + children: [ + { + path: "/", + element: + }, + { + path: "/search/:value", + element: , + }, + { + path: "/detail/:id", + element: , + }, + ], + }, +]); + +ReactDOM.createRoot(document.getElementById("root")).render( + +); diff --git a/src/pages/MainPage/MainPage.jsx b/src/pages/MainPage/MainPage.jsx new file mode 100644 index 0000000..159c65b --- /dev/null +++ b/src/pages/MainPage/MainPage.jsx @@ -0,0 +1,28 @@ +import React, { useEffect, useState } from "react"; +import styles from "./MainPage.module.scss"; +import data from "../../data/videos.json"; +import MainList from "../../components/MainList/MainList"; + +export default function MainPage() { + const [video, setVideo] = useState([]); + + useEffect(() => { + document.title = "YouTube"; + async function getData() { + setVideo(data.items); + } + getData(); + }, []); + + return ( +
+ {video ? ( + video.map((item, i) => { + return ; + }) + ) : ( +

영상이 존재하지 않습니다.

+ )} +
+ ); +} diff --git a/src/pages/MainPage/MainPage.module.scss b/src/pages/MainPage/MainPage.module.scss new file mode 100644 index 0000000..cbf404b --- /dev/null +++ b/src/pages/MainPage/MainPage.module.scss @@ -0,0 +1,5 @@ +.MainVideos { + width: 100%; + display: grid; + grid-template-columns: repeat(auto-fill,minmax(274px,1fr)); +} \ No newline at end of file diff --git a/src/pages/PlayPage/Comment/Comment.module.scss b/src/pages/PlayPage/Comment/Comment.module.scss new file mode 100644 index 0000000..4ad85bc --- /dev/null +++ b/src/pages/PlayPage/Comment/Comment.module.scss @@ -0,0 +1,12 @@ +.comments { + grid-area: comment; + margin: 20px; + display: flex; + flex-direction: column; + // max-width: 800px; + p { + font-size: 16px; + margin-bottom: 32px; + color: #0f0f0f; + } +} diff --git a/src/pages/PlayPage/Comment/index.jsx b/src/pages/PlayPage/Comment/index.jsx new file mode 100644 index 0000000..5ff791d --- /dev/null +++ b/src/pages/PlayPage/Comment/index.jsx @@ -0,0 +1,62 @@ +import React, { useEffect, useState } from "react"; +import Comments from "../../../components/Comments/Comments"; +import styles from "./Comment.module.scss"; +import axios from "axios"; + +const Comment = ({ id }) => { + const [comments, setComments] = useState(""); + + // 실제 api + + const params = { + part: "snippet", + videoId: id, + key: import.meta.env.VITE_API_KEY3, + }; + + useEffect(() => { + async function getComments() { + try { + const data = await axios.get( + "https://www.googleapis.com/youtube/v3/commentThreads", + { params } + ); + if (data.status !== 200) { + throw new Error(); + } + setComments(data.data); + } catch (error) { + console.log("통신오류: ", error.response); + } + } + getComments(); + }, []); + + //테스트용 + + // useEffect(() => { + // async function getComments() { + // try { + // const data = await axios.get("http://localhost:3000/comments"); + // if (data.status !== 200) { + // throw new Error(); + // } + // setComments(data.data); + // } catch (error) { + // console.log("통신오류: ", error.response); + // } + // } + // getComments(); + // }, []); + + return ( +
+

{`댓글 ${comments?.pageInfo?.totalResults.toLocaleString()}개`}

+ {comments?.items?.map((comment) => ( + + ))} +
+ ); +}; + +export default Comment; diff --git a/src/pages/PlayPage/PlayPage.jsx b/src/pages/PlayPage/PlayPage.jsx new file mode 100644 index 0000000..d038677 --- /dev/null +++ b/src/pages/PlayPage/PlayPage.jsx @@ -0,0 +1,71 @@ +import React, { useState, useEffect } from "react"; +import axios from "axios"; +import RelatedVideos from "./RelatedVideo"; +import Comment from "./Comment"; +import styles from "./PlayPage.module.scss"; +import PlayVideo from "./PlayVideo" +import { useOutletContext, useParams } from "react-router"; +import videoInfo from "../../data/video.json" + +export default function PlayPage() { + // props 내려쓰시면됩니다 + let { id } = useParams(); + const [video, setVideo] = useState([]); + // Playpage진입시 좌측 Nav small로 + const { navDisplay } = useOutletContext(); + // dummy data 사용 + // useEffect(() => { + // async function getVideo() { + // setVideo(videoInfo.items) + // } + // getVideo(); + // navDisplay(false); + // return () => { + // navDisplay(true) + // } + // }, []) + + // 실제 api 사용 props 내려서 쓰시면 됩니다! + const params = { + part: ['snippet', 'contentDetails', 'player', 'statistics'], + id: id, + key: import.meta.env.VITE_API_KEY3 + } + useEffect(() => { + async function getVideo() { + try { + const data = await axios.get("https://www.googleapis.com/youtube/v3/videos", { + params, + paramsSerializer: { + indexes: null + } + }) + if (data.status !== 200) { + throw new Error() + } + setVideo(data.data.items) + } catch (error) { + console.log(`통신 오류: ${error.response}`) + } + } + getVideo() + navDisplay(false) + return () => { + navDisplay(true) + } + }, []) + + const channelId = video[0]?.snippet?.channelId + + return ( +
+
+ + +
+
+ +
+
+ ); +} diff --git a/src/pages/PlayPage/PlayPage.module.scss b/src/pages/PlayPage/PlayPage.module.scss new file mode 100644 index 0000000..3e598f6 --- /dev/null +++ b/src/pages/PlayPage/PlayPage.module.scss @@ -0,0 +1,36 @@ +.playPage { + // display: grid; + // grid-template-rows: auto auto; + // grid-template-columns: auto auto auto; + // grid-template-areas: + // "video relatedVideo" + // "videoInfo relatedVideo" + // "comment relatedVideo"; + // position: relative; + // .videoInfo { + // grid-area: videoInfo; + // } + display: flex; + width: 100%; + margin: 0; + .videoInfo { + display: flex; + margin-left: 15px; + padding-top: 15px; + margin-right: 20px; + flex-direction: column; + flex-grow: 1; + max-width: 1000px; + min-width: 500px; + box-sizing: border-box; + } +} + +@media screen and (max-width: 1024px) { + section.playPage { + display: block; + .videoInfo { + margin-right: 50px; + } + } +} diff --git a/src/pages/PlayPage/PlayVideo/index.jsx b/src/pages/PlayPage/PlayVideo/index.jsx new file mode 100644 index 0000000..dd81b02 --- /dev/null +++ b/src/pages/PlayPage/PlayVideo/index.jsx @@ -0,0 +1,16 @@ +import React from 'react' +import Playing from '../../../components/PlayVideoInfo/Playing' +import VideoInfo from '../../../components/PlayVideoInfo/VideoInfo' +import VideoInfoDetail from '../../../components/PlayVideoInfo/VideoInfoDetail' + +const PlayVideo = ({ id, video, channelId }) => { + return ( +
+ + + +
+ ) +} + +export default PlayVideo \ No newline at end of file diff --git a/src/pages/PlayPage/RelatedVideo/RelatedVideos.module.scss b/src/pages/PlayPage/RelatedVideo/RelatedVideos.module.scss new file mode 100644 index 0000000..889699a --- /dev/null +++ b/src/pages/PlayPage/RelatedVideo/RelatedVideos.module.scss @@ -0,0 +1,8 @@ +.relatedVideos { + grid-area: relatedVideo; + margin-left: 20px; + display: flex; + flex-direction: column; + align-items: flex-start; + padding: 24px 24px 0 0; +} diff --git a/src/pages/PlayPage/RelatedVideo/index.jsx b/src/pages/PlayPage/RelatedVideo/index.jsx new file mode 100644 index 0000000..9cc6bcb --- /dev/null +++ b/src/pages/PlayPage/RelatedVideo/index.jsx @@ -0,0 +1,65 @@ +import React, { useEffect, useState } from "react"; +import styles from "./RelatedVideos.module.scss"; +import EachRelatedVideo from "../../../components/RelatedVideos/EachRelatedVideo"; +import axios from "axios"; + +const RelatedVideos = ({ id }) => { + // 원래는 url params로 video id 가져와서 datas에 넣기. 그러면 아래는 똑같이 동작. + // 테스트때는 index를 props로 넘겨주어 relatedVideoSearch.json 목업에서 순서대로 불러오겠음. 추후 지우기@@@@ + const [relatedVideos, setRelatedVideos] = useState(""); + + // 실제 api + + const params = { + part: "snippet", + maxResults: 10, + relatedToVideoId: id, + type: "video", + key: import.meta.env.VITE_API_KEY2, + }; + + useEffect(() => { + async function getVideo() { + try { + const data = await axios.get( + "https://www.googleapis.com/youtube/v3/search", + { params } + ); + if (data.status !== 200) { + throw new Error(); + } + setRelatedVideos(data.data); + } catch (error) { + console.log("통신오류: ", error.response); + } + } + getVideo(); + }, []); + + //테스트용 + + // useEffect(() => { + // async function getVideo() { + // try { + // const data = await axios.get("http://localhost:3000/relatedVideo"); + // if (data.status !== 200) { + // throw new Error(); + // } + // setRelatedVideos(data.data); + // } catch (error) { + // console.log("통신오류: ", error.response); + // } + // } + // getVideo(); + // }, []); + + return ( +
+ {relatedVideos?.items?.map((video, i) => ( + + ))} +
+ ); +}; + +export default RelatedVideos; diff --git a/src/pages/SearchPage/SearchPage.jsx b/src/pages/SearchPage/SearchPage.jsx new file mode 100644 index 0000000..60514a9 --- /dev/null +++ b/src/pages/SearchPage/SearchPage.jsx @@ -0,0 +1,45 @@ +import React, { useEffect, useState } from "react"; +import axios from "axios"; +import SearchList from "../../components/SearchList/SearchList"; +import styles from "./SearchPage.module.scss"; +import { useParams } from "react-router-dom"; +// import data from "../../data/search.json"; + +export default function SearchPage() { + const [search, setSearch] = useState([]); + + let { value } = useParams(); + const params = { + part: "snippet", + q: value, + maxResults: 10, + key: import.meta.env.VITE_API_KEY1, + }; + + useEffect(() => { + document.title = `${value} - YouTube`; + async function getData() { + try { + const data = await axios.get('https://www.googleapis.com/youtube/v3/search', { params }); + setSearch(data.data.items); + } catch (error) { + console.log("통신오류: ", error.response); + } + } + getData(); + }, [value]); + + return ( +
+ {search ? ( + search.map((item, i) => { + if (item.id.kind === "youtube#video") { + return ; + } + }) + ) : ( +

검색결과가 존재하지 않습니다.

+ )} +
+ ); +} diff --git a/src/pages/SearchPage/SearchPage.module.scss b/src/pages/SearchPage/SearchPage.module.scss new file mode 100644 index 0000000..f56d39f --- /dev/null +++ b/src/pages/SearchPage/SearchPage.module.scss @@ -0,0 +1,7 @@ +.searchVideos { + padding: 16px 24px; + overflow-y: hidden; + flex-direction: row; + justify-content: center; + position: relative; +} \ No newline at end of file diff --git a/src/utils/CalDate.js b/src/utils/CalDate.js new file mode 100644 index 0000000..8d7c07c --- /dev/null +++ b/src/utils/CalDate.js @@ -0,0 +1,27 @@ +const calcDate = (date) => { + let answer = ""; + const targetDate = new Date(date).getTime(); + const nowDate = new Date().getTime(); + //우선 밀리세컨드로 통일해준후 + // 조건문에 따라 배치 + // 1000ms = 1초 + const dateOffset = (nowDate - targetDate) / 1000; + if (dateOffset < 60) { + answer = `${dateOffset} 초`; + } else if (dateOffset < 3600) { + answer = `${Math.floor(dateOffset / 60)}분`; + } else if (dateOffset < 3600 * 24) { + answer = `${Math.floor(dateOffset / 60 / 60)}시간`; + } else if (dateOffset < 86400 * 7 * 2) { + answer = `${Math.floor(dateOffset / 60 / 60 / 24)}일`; + } else if (dateOffset < 2592000) { + answer = `${Math.floor(dateOffset / 60 / 60 / 24 / 7)}주`; + } else if (dateOffset < 31536000) { + answer = `${Math.floor(dateOffset / 60 / 60 / 24 / 7 / 4)}개월`; + } else { + answer = `${Math.floor(dateOffset / 60 / 60 / 24 / 7 / 4 / 12)}년`; + } + return answer; +}; + +export default calcDate; diff --git a/src/utils/CalDuration.js b/src/utils/CalDuration.js new file mode 100644 index 0000000..8811d28 --- /dev/null +++ b/src/utils/CalDuration.js @@ -0,0 +1,9 @@ +import moment from "moment"; +import momentDurationFormatSetup from "moment-duration-format"; +momentDurationFormatSetup(moment); +const calcDuration = (num) => { + const duration = moment.duration(num).format("h:mm:ss").padStart(4, "0:0"); + return duration; +}; + +export default calcDuration; diff --git a/src/utils/CalNum.js b/src/utils/CalNum.js new file mode 100644 index 0000000..bdfaf99 --- /dev/null +++ b/src/utils/CalNum.js @@ -0,0 +1,17 @@ +const calcNum = (num) => { + if (num >= 0 && num < 1000) { + return num; + } else if (num >= 1000 && num < 10000) { + return `${(num / 1000).toFixed(1)}천`; + } else if (num < 100000) { + return `${(num / 10000).toFixed(1)}만`; + } else if (num < 100000000) { + return `${Math.floor(num / 10000)}만`; + } else if (num < 1000000000) { + return `${(num / 100000000).toFixed(1)}억`; + } else { + return `${Math.floor(num / 100000000)}억`; + } +}; + +export default calcNum; diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..5a33944 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], +}) From e93be5b4a63ee8cde2c0f158541c59a87c2f9e1c Mon Sep 17 00:00:00 2001 From: quokka-eating-carrots Date: Sun, 22 Jan 2023 13:51:18 +0900 Subject: [PATCH 2/2] Fix: playpage, title, tag --- README.md | 5 +++-- src/pages/PlayPage/PlayPage.jsx | 7 ++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 9049d88..9665a6a 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ -
+
FE.
@@ -44,4 +44,5 @@ ## 이슈 + NavBar가 반대로 열리게 되는 현상이 있습니다. -+ API 할당량으로 인한 이슈가 있을 수 있습니다. (특히 Search Page...) \ No newline at end of file ++ API 할당량으로 인한 이슈가 있을 수 있습니다. (특히 Search Page...) ++ 실수로 ENV를 레포에 올리게 되었습니다... \ No newline at end of file diff --git a/src/pages/PlayPage/PlayPage.jsx b/src/pages/PlayPage/PlayPage.jsx index d038677..9addef3 100644 --- a/src/pages/PlayPage/PlayPage.jsx +++ b/src/pages/PlayPage/PlayPage.jsx @@ -53,7 +53,12 @@ export default function PlayPage() { return () => { navDisplay(true) } - }, []) + }, [id]) + + useEffect(() => { + if (video.length !== 0) + document.title = `${video[0]?.snippet.title} - YouTube`; + }, [video]); const channelId = video[0]?.snippet?.channelId