[firebase] send하고 fetch하고 ?
프로젝트 이름은 나와도 상관없겠지?
프로젝트를 만들고 해당 프로젝트에 앱을 등록해야 한다고...
첫 화면에서 추가하라고 한데서 누르면 되는 것 같음
등록하니까
yarn add firebase
그리고 Firebase를 초기화하여 SDK를 사용하라는데,
SDK가 뭔가. A software development kit 라고 한다.
firebase/app에서 initializeApp, firebase/anlytics에서 getAnalytics 이런 걸 말하는 건가봄
난 항상 이런 걸 보면 당황스럽다. 어디서 초기화를 해야될지 모르기 때문이다...
그냥 내 기억상 app.tsx에 했던 것 같아서 거기에 복붙했다.
환경 변수 배웠으니까 이걸로 바꿔줬다 ㅋㅋㅋ
이러면서 무한재로딩 되길래 그냥 저거 주석처리 해버렸다.
어차피 아직은 쓸 일 없으니까...ㅎㅎ~
여기부턴 진짜 모르겠어서 옛날에 수업 들은 걸 참고했다.
일단 새로운 페이지, 정보를 입력받을 페이지를 만든다.
그리고 가져왔는데 이런 오류가.
위는 ..같고 밑은 . . 같은데... 뭘까?...했는데 그냥 내가 firebaseApp을 내보내기한 적이 없는데 갖고오려고 해서 난 오류였다.
app.tsx에서
이 부분 app을 firebaseApp으로 바꾸고(가져올 때 app을 가져와도 되지만 특정하는 게 좋다고 생각했다.) export를 붙여주면 된다.
모니터 하나니까 불편해서 모니터 잠시 연결했는데 모니터가 안 좋은건지 설정이 안된건지 자글거리고 눈이 아프다~~~!!..
배경은 왜 자꾸 까매지는지? 다크모드도 아닌데...
그냥 한 번 눌러봤다.
빌드의 firestore에 들어간다.
시작하기를 눌러서 진행했는데, 데이터베이스 어디로 할지 정하라고 한다.
난 서울로 했는데... 뭔가 이걸 누르니까 진짜 내가 데이터 쓰레기를 만들고 있고 또 그게 환경오염시키고 있는 거 아닌가 그런 생각이 들었다...
이게 맞는지 모르겠는데 일단 이렇게 해봤다.
import { useState } from "react";
import { collection, getFirestore, addDoc } from "firebase/firestore/lite";
import { firebaseApp } from "../../../../../pages/_app";
import { useRouter } from "next/router";
import { MyInput, Wrapper } from "./What.styles";
export default function WhatMusic() {
const router = useRouter();
const [inputs, setInputs] = useState({
name: "",
url: "",
});
const onChangeInputs = (event) => {
setInputs({
...inputs,
[event.target.id]: event.target.value,
});
};
async function onClickSubmit() {
console.log(inputs);
const music = collection(getFirestore(firebaseApp), "music");
await addDoc(music, {
...inputs,
});
alert("게시물 등록에 성공하였습니다!");
router.push("/music/what");
}
return (
<div>
<Wrapper>
<div>
노래 제목: <MyInput id="name" type="text" onChange={onChangeInputs} />
</div>
<div>
주소: <MyInput id="url" type="text" onChange={onChangeInputs} />
</div>
<div>
<button onClick={onClickSubmit}>등록하기</button>
</div>
</Wrapper>
</div>
);
}
FirebaseError: Request failed with error: Missing or insufficient permissions.
보안 규칙을 위반해서 그렇다고 한다.
write: if false;라서 그런건데, 뭐 자세히 설정하려면 엄청 복잡하다.. .근데 난 대충 쓸거니까 일단 true로 바꿨다.
오 들어왔다~~!!!
이제 이 목록을 fetch해오려는데
왜 이게 안되지?
음 그냥 진짜 추가가 안돼있었다. package.json에 안 써있나? 왜 안 깔렸지ㅎㅎ머쓱
console.log로 가져온 거 찍어봤는데 음... 여기서 내가 직접 줍는 건 아닌 것 같다.
import { useEffect, useState } from "react";
import YouTube, { YouTubePlayer, YouTubeProps } from "react-youtube";
import {
collection,
getFirestore,
getDocs,
DocumentData,
} from "firebase/firestore/lite";
import { firebaseApp } from "../../../../pages/_app";
const musicList = [
{ title: "비밀의 화원", id: "eGXJs7zOHC4" },
{ title: "cups", id: "cmSbXsFE3l8" },
];
let randomMusic = musicList[Math.floor(Math.random() * musicList.length)];
export default function Music() {
const [musicTitle, setMusicTitle] = useState("");
const [dataMusics, setDataMusics] = useState<DocumentData[]>([]);
useEffect(() => {
async function fetchMusics() {
const music = collection(getFirestore(firebaseApp), "music");
const result = await getDocs(music);
const musics = result.docs.map((el) => el.data());
setDataMusics(musics);
}
fetchMusics();
console.log(dataMusics);
}, []);
const options: YouTubeProps["opts"] = {
width: "1280",
height: "720",
playerVars: {
autoplay: 1,
modestbranding: 1, // Youtube 로고 컨트롤바에서 표시 X
rel: 0, // 재생 종료 시 플레이어에서 관련 동영상 표시 X
loop: 1, // 동영상 반복 재생 O(목록은 목록을 순회함)
// list: "PLC77007E23FF423C6",
playlist: "eGXJs7zOHC4,cmSbXsFE3l8,ubqXO_ghb2k", // musicList에서 id만 뽑아서? 안되나
shuffle: 1,
},
};
// 링크들을 받아와서, 아이디를 추출해서
// 재생목록에 추가한 뒤, 목록에서 랜덤 추천
// 제목은 그냥 내가 제목 목록을 만들어둘까,, 아이디랑 매칭해서
// 노래 재생목록 재생은 되는데 셔플이 안되고 randomMusic도 바뀌지 않으니까...
useEffect(() => {
console.log(YouTube.name);
// const embedCode = YouTubePlayer.getVideoEmbedCode();
// console.log(embedCode);
}, []);
const getPlayerCode = (event: any) => {
console.log(
event.target.getVideoEmbedCode().split("title")[1].split('"')[1]
);
setMusicTitle(
event.target.getVideoEmbedCode().split("title")[1].split('"')[1]
);
event.target.setShuffle(true);
};
return (
<div>
<YouTube
videoId={randomMusic.id}
opts={options}
onReady={getPlayerCode}
/>
지금, {musicTitle} 어때?
</div>
);
}
귀찮아서 한 번에 긁어왔는데 firebase 저렇게 써도 빈배열로 나온다! 왜지
파이어베이스 페이지엔 데이터 잘 들어왔는데.
console.log(result)하면 뜬다.
근데 /music만 들어가면 이게 계속 떠서 뭘 할 수가 없어
11Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('<URL>') does not match the recipient window's origin ('<URL>').
ㅍ ㅏ이어베이스 데이터는 안 뜨고 youtube 오류뜨고 ... 검색해보니까 youtube를 아이프레임으로 가져와서 사용하는 사람은 뭔가 추가하거나 없애서 해결하는 듯 했다... 하지만 난 이미 react-youtube를 써버렸고 돌이킬 순 없다고(싫다고)
파이어베이스 80% 유튜브 50%
도합 130%의 문제에 빠진 나...
잘 들어온다. 하하'ㅁ'~
열심히 재생목록을 짜봤는데
연말에 이걸로 노래 틀고 싶었는데 🥹
https://koreasushi.tistory.com/1014
Youtube 외부 영상 플레이어 특정 사이트 제한 재생 불가 해결 방법 (https)
src"http(s)://www.youtube.com/embed/영상코드" // http 환경에서만 정상 재생. https 환경에서는 간혹 재생 불가 영상 발생 https 환경의 도메인에서 Youtube 외부 플레이어 포함 시 재생이 안되는 문제가 발생하
koreasushi.tistory.com
react-youtube를 쓰는 거라 내가 직접적으로 바꿀 순 없는 것 같다.
그냥 바꿀까... 일단 여기까지ㅠㅠ