해결된 질문
작성
·
15
답변 2
0
안녕하세요, 충환님.
저는 뭐 별 탈 없이 잘 지냈고 잘 쉬기도 했습니다. 충환님도 잘 지내셨는지요?
말씀하신 코드는 강의 재생중 하단에 보면 위와 같이 자료 다운로드 버튼을 볼 수 있는데 해당 강의의 수업자료를 다운로드 하시면 JSON 파일이 하나 다운로드 됩니다.
다운로드 한 파일을 n8n 우측 메뉴의 Import from File을 통해서 불러오실 수 있습니다. 그러면 강의에 사용한 워크플로우 전체를 확인 하실 수 있고 해당 노드의 코드 또한 확인하실 수 있습니다. 강의에 사용된 모든 워크플로우를 이런식으로 제공하고 있으니 참고하시길 바랍니다. 일단 코드는 아래 따로 올려드리긴 하겠습니다.
import urllib.request
import urllib.error
import re
import json
def get_channel_videos(html):
# HTML에서 ytInitialData JSON 객체 추출
m = re.search(r"var ytInitialData = ({.*?});", html)
if not m:
m = re.search(r"window\['ytInitialData'\] = ({.*?});", html)
if not m:
print("ytInitialData를 찾을 수 없습니다.")
return []
try:
initial_data = json.loads(m.group(1))
except Exception as e:
print("JSON 파싱 에러:", e)
return []
videos = []
try:
tabs = initial_data["contents"]["twoColumnBrowseResultsRenderer"]["tabs"]
for tab in tabs:
tab_renderer = tab.get("tabRenderer")
if not tab_renderer:
continue
# 'Videos' 혹은 '동영상' 탭을 찾음
title = tab_renderer.get("title", "").lower()
if title not in ("videos", "동영상"):
continue
content = tab_renderer.get("content", {})
# 두 가지 렌더러를 지원: sectionListRenderer와 richGridRenderer
section_list = []
if "sectionListRenderer" in content:
section_list = content["sectionListRenderer"].get("contents", [])
elif "richGridRenderer" in content:
section_list = content["richGridRenderer"].get("contents", [])
else:
print("동영상 섹션 정보를 찾을 수 없습니다.")
return []
for section in section_list:
# sectionListRenderer의 경우
if "itemSectionRenderer" in section:
items = section["itemSectionRenderer"].get("contents", [])
# richGridRenderer의 경우
elif "richItemRenderer" in section:
# richItemRenderer 안에 content에 videoRenderer가 포함됨
items = [section["richItemRenderer"].get("content", {})]
else:
continue
for item in items:
video_renderer = None
if "gridVideoRenderer" in item:
video_renderer = item["gridVideoRenderer"]
elif "videoRenderer" in item:
video_renderer = item["videoRenderer"]
if video_renderer:
video_id = video_renderer.get("videoId")
title_runs = video_renderer.get("title", {}).get("runs", [])
video_title = title_runs[0]["text"] if title_runs else ""
video_url = f"https://www.youtube.com/watch?v={video_id}" if video_id else None
videos.append({
"id": video_id,
"title": video_title,
"url": video_url
})
break # 동영상 탭을 찾았으면 더 이상 반복하지 않음
except Exception as e:
print("동영상 데이터 파싱 중 에러 발생:", e)
return []
return videos
html = _input.item.json.data
videos = get_channel_videos(html)
youtube_url = _('Edit Fields').item.json.youtube_url
return {
"url": youtube_url,
"videos": videos
}
0
안녕하세요, 인프런 AI 인턴입니다. 김충환님.
n8n 강의에서 Python 코드를 처음 접하셨군요. Python 코드 작성이 익숙하지 않으셔서 오류가 발생하고 있는 것 같습니다. 이 문제를 해결하기 위해 지식공유자가 제공하는 강의에서의 Python 코드를 직접 참조하시거나, 기존에 유사한 질문이 있었을 수 있으니 커뮤니티에서 해당 질문들을 찾아보시는 것이 좋을 것 같습니다.
우선 아래와 같은 자료를 참고해보실 것을 권장합니다:
강의 자료에서 해당 Python 코드 관련 내용을 다시 한번 검토해 보세요. 강의 영상에서 코드 입력 부분을 반복해서 보시며 이해를 돕기 위해 댓글이나 질문 게시판을 통해 오류 메시지를 질문해 보실 수 있습니다.
인프런의 질문 게시판을 통해, 코드 오류 관련 유사 질문이 있는지 확인하시면 도움이 될 수 있습니다.
관련된 유사 질문이나 자료를 찾을 수 있는 커뮤니티 링크:
- 코딩 관련 질문 및 답변 섹션
안타깝게도 구체적인 코드 제공은 저작권과 지식공유자의 강의 가치를 위해 직접적으로 제공하기 어려운 점 양해 부탁드립니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점도 이해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.