youtube-dl의 extrator 쓰기 강좌 3/4

10797 단어 Pythonyoutube-dl

새해 복 많이 받으세요.


새해 복 많이 받으세요.
여러가지 바빠서 정신을 차린 지 벌써 연말이 지났다.
올해도 잘 부탁드립니다.

저번에 계속.


아직 안 보신 분들은 보세요.
지난번에 오류 처리를 썼습니다.
이번에 우리는 최소한 이상의 정보를 얻을 것이다.

최종 목표


저번에 여기서부터.

사이트에서 뭘 볼 수 있어요.


그리고이거 할게요..열어봐.
제가 적당한 배송 서비스를 가져왔어요.
1권과 마찬가지로 개발자 도구를 열고 비슷한 통신을 찾아보세요.
크롬도 Ctrl+Shift+I로 열었다.

먼저 투고자의 이름으로 검색하다


조금만 구르면 기고인의 이름과 설명문 등이 나온다.
DevoTools로 이걸 검색하면 이런 느낌이에요.

기고인의 이름 등이 나왔다.
이 API 끝점의 URL은 https://api.whowatch.tv/lives/19199115입니다.

이 정보 추출


먼저 다운로드'https://api.whowatch.tv/lives/' + video_id를 JSON으로 처리합니다.
metadata = self._download_json('https://api.whowatch.tv/lives/' + video_id, video_id)
그럼 _real_extract의 반환값이 dict로 되돌아온 거 기억나세요?
dict의 키는 일정한 규정이 있는데, 이것은
예를 들어 이번에 처리된 투고인의 이름과 투고인의 닉네임은 각각 README.mdOUTPUT TEMPLATE이다.
이 규칙에 따라 설정합니다uploader.
# その他の情報を取り出す
uploader = metadata['live']['user']['name']
uploader_id = metadata['live']['user']['user_path']

return {
    # (略)
    # 投稿者情報
    'uploader': uploader,
    'uploader_id': uploader_id,
}
마찬가지로 uploader_id키는 미리 보기 그림dict 옵션을 설정할 수 있습니다.
thumbnail = metadata['live']['latest_thumbnail_url']

return {
    # (略)
    # サムネイル
    'thumbnail': thumbnail,
}

끝말


이번에는 최소한 이상의 정보를 써서 얻었다.
이렇게 되면 최종 목표와 같은extractor가 완성됩니다. 다음은 유튜브-dl의 인코딩 규칙을 간단하게 만들고 싶습니다.thumbnail 등 오류 처리는 유튜브-dl에서 쉽게 할 수 있는 방법이 있기 때문에 여러분에게 과제가 되고 싶습니다.
여기까지 봐주셔서 감사합니다.
다음: -- write-thumbnail의 KeyError 섹션에 게재됩니다.

부록: 이번 코드

# coding: utf-8
from __future__ import unicode_literals

from .common import InfoExtractor
from ..utils import ExtractorError


class WhoWatchIE(InfoExtractor):
    _VALID_URL = r'https?://whowatch\.tv/viewer/(?P<id>\d+)/?'

    def _real_extract(self, url):
        video_id = self._match_id(url)

        # URL、IDの順で指定する
        live_data = self._download_json('https://api.whowatch.tv/lives/' + video_id + '/play', video_id)
        metadata = self._download_json('https://api.whowatch.tv/lives/' + video_id, video_id)

        # デバッグ用: live_dataを表示する
        # self.to_screen(live_data)

        # HLSのURL
        hls_url = live_data.get('hls_url')

        # hls_urlが無ければエラーを投げる
        if not hls_url:
            raise ExtractorError(live_data.get('error_message'), expected=True)

        # とりあえずHLSのフォーマットを検索する
        formats = self._extract_m3u8_formats(
            hls_url, video_id, ext='mp4', entry_protocol='m3u8_native',
            m3u8_id='hls')
        # 並び替える。これによって何も設定しない状態で最高画質をダウンロードするようにする
        self._sort_formats(formats)

        # その他の情報を取り出す
        uploader = metadata['live']['user']['name']
        uploader_id = metadata['live']['user']['user_path']
        thumbnail = metadata['live']['latest_thumbnail_url']

        return {
            'id': video_id,
            # 鉤括弧があったので同時に外してしまう
            'title': live_data['share_info']['live_title'][1:-1],
            # フォーマット一覧
            'formats': formats,
            # これは生放送です
            'is_live': True,
            # 投稿者情報
            'uploader': uploader,
            'uploader_id': uploader_id,
            # サムネイル
            'thumbnail': thumbnail,
        }
이번 코드는 제4권

좋은 웹페이지 즐겨찾기