혹시 구글의 유튜브 동영상 크롤러 제작해 보신 분 계신지요?

gumagula의 이미지

안녕하세요, 요즘 크롤러를 취미삼아 개발하고 있습니다.

다름이 아니라 뉴스 기사 수집이나 댓글 수집같은 것은 python의 soup등의 방법을 사용하여 재미있게 추출하고 있는데요,

문듯 어느날 드는 엉뚱한 생각이 "유튜브 영상을 다운로드 할 수 있는 크롤러도 있지 않을까?" 라는 생각이였습니다.

그래서 직접 따봤는데요, 예를 들어 http://www.youtube.com/watch?v=X5pj5ezs4O8 와 같은 동영상 링크가 있을시,

실제 mp4로 저장되어 있는 동영상 주소는

http://r13---sn-i3b7sner.googlevideo.com/videoplayback?expire=1384985136&id=5f9a63e5ecece0ef&sver=3&fexp=900356,942402,936912,936910,923308,923305,936913,907231,907240,3300096,3300103,3300134,3300137,3300161,3310366,3310554,3310870&ms=au&ipbits=0&mv=m&sparams=id,ip,ipbits,itag,ratebypass,source,upn,expire&source=youtube&itag=22&ratebypass=yes&upn=3HJ0lX_rDHY&key=yt5&ip=아이피주소&mt=1384960339

위와같은 패턴이였습니다.

http://www.youtube.com/watch?v=X5pj5ezs4O8 위와 같은 주소에서 어떻게 위와 같은 동영상 주소를 추출할 수 있을까요?

하도 신기해서 오픈소스로 열려있는 youtube-dl등의 프로그램등을 한번 살펴봤는데,

대충 동작하는 원리가

1. 동영상 ID를 받음

2. 어딘가에 저장되어 있는 비디오 정보에서 시그니쳐 정보와 관련된 정보를 가져온다

3. 이를 토대로 서버에 요청을 하면 위와 같은 주소값을 리턴한다.

의 방식으로 대충 동작하는듯한 느낌을 받았습니다. (코드 리딩이 잘 안되니 어떠한 원리로 돌아가는지 잘 모르겠습니다... ㅠㅠ)

원리를 모르니 크롤러 코드를 제작하기도 힘들구요.... 동영상 주소에서 다운로드 가능한 주소로 바뀌는 알고리즘이나 방법만

안다면 어찌저찌 프로그램을 설계하고 직접 만들수는 있을꺼 같습니다만...

stackloverflow같은 사이트에서 구글링을 해보니 10년도 자료로 누군가 원리를 올려놓은 것이 있긴한데,

현재 동작하지 않는 것으로 봐선 알고리즘이 잘못 되었거나 방식이 바뀐것 같습니다.

혹시...

http://www.youtube.com/watch?v=X5pj5ezs4O8 이러한 주소에서,

실제 다운로드 가능한 mp4같은 주소 형식으로 바꾸는 방법이 어떠한 원리를 통해 이루어 지는지, 알고계신

고수님이 있으신가요? 있으시다면 아낌없는 조언 부탁드리겠습니다.

날씨가 많이 춥습니다. 감기 조심하시길 바라며 답변 기다려 봅니다... ㅠㅠ

익명 사용자의 이미지

RTMP GO GO

gumagula의 이미지

RTMP(Real Time Messaging Protocol) 캡쳐로 떠오는 방법도 있었군요...

이 방법은 차선책으로 알아둬야 겠습니다... 찾아보니 자료가 꽤 있네요 ;-)

답변 감사드립니다! 많은 도움이 됬어요...

하지만... 속시원하게 RTMP(Real Time Messaging Protocol)를 사용하지 않고 Youtube-dl 같은 프로그램에서 사용하는 방식이

어떤 원리로 돌아가는지 아시는 분은 안계신가요 ㅠㅠ

마잇의 이미지

youtube-dl 보신 김에 더 보셔서 알아내시는 것도 좋을 겁니다.


--
마잇

gumagula의 이미지

타고 들어가도 "어딘가"의 동영상 정보에서 시그니쳐 정보와 동영상 정보를 기반으로 주소를 반환하는 방식을 사용하는것 같더라구요,

물론 제 나름데로 까서 보긴 했습니다만, 위에서 말씀드린 것이 한계였습니다........ 저도 더 봐서 알아볼 수 있었으면...

아마 여기에 이렇게 여쭤보지 않았겠죠 ^^;;

아무쪼록 답변 감사드립니다.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.