●YouTubeダウンロード

情報

作者名: Craving Explorer研究家
引用元: なでしこプログラム掲示板「YouTubeダウンロード」
転載: 許可
バージョン: 3.24

ダウンロード

概要

YouTubeの動画をダウンロードできます

解説

 YouTubeは一つの動画でもさまざまな形式や画質に変換し、どんなデバイスでも再生できるように設計されています。そして、その形式や画質の組み合わせをiTagという番号で管理しています。
 しかし、使い道によってどの形式が最適なのかが異なるので、このプログラムはすべてのiTagの動画のURLを取得し、どれをダウンロードするのか選択できるようになっています。
なので、簡単に利用したい場合は「YouTubeで動画ダウンロード」命令を利用し、形式や画質を指定したい場合は下記のiTag一覧を参照し、次のように利用します。
// iTag18をダウンロードしたい場合
情報とはYouTube情報
動画情報とはYouTube動画情報
情報=「http://www.youtube.com/watch?v=6tr2__Tv2I4」からYouTubeで情報取得
動画情報=情報の動画情報@18
動画情報のURLを「video.mp4」にHTTPダウンロード

注意

 違法にアップロードされた音楽、または動画を違法と知りながらダウンロードする行為は法律違法です。
 また、YouTubeのコンテンツをダウンロードする行為はYouTube利用規約違反です。
 あくまで、違法ではないコンテンツを研究目的でダウンロードし、直ちに破棄するか、
キャッシュとしてダウンロードした後、直ちに削除するなどの利用方法に限ってください。
 また、このプログラムの利用によって被ったあらゆる種類の損失又は損害について作者は責任を負いません

サンプル

# 衛星ハヤブサの動画をデスクトップにダウンロードします。
「http://www.youtube.com/watch?v=6tr2__Tv2I4」をデスクトップにYouTubeで動画ダウンロード

本体

!変数宣言は必要
■YouTube情報
 ・{ハッシュ}動画情報
 ・{文字列}タイトル
■YouTube動画情報
 ・{文字列}URL
 ・{文字列}拡張子
 ・{整数}iTag
 ・{文字列}基本URL
 ・{文字列}代替ホスト
 ・{文字列}タイプ
 ・{文字列}品質
 ・{文字列}署名
■YouTube
 ・{配列}品質一覧
 ・{配列}拡張子一覧
 ・{配列}除去iTag一覧
 ・情報取得({文字列}URLの|URLで|URLから)~
  情報とはYouTube情報
  URLホストとは文字列
  URLファイル名とは文字列
  URLパラメータとはハッシュ
  ページURLとは文字列
  Vid値とは文字列
  ページデータとは文字列
  ストリームマップとは配列
  マップデータとはハッシュ
  #-----------------------------------------------------------------------
  // URLがYouTubeの動画ページのURLかチェックし、整形する
  #-----------------------------------------------------------------------
  URLホスト=URLからURLドメイン名抽出
  URLファイル名=URLからURLファイル名抽出
  URLパラメータ=URLからURLパラメータ取得
  URLホストで条件分岐
   『www.youtube.com』ならば
    もし、URLファイル名!=『watch』ならば
     『YouTubeの動画ページのURLではありません』とエラー発生
    Vid値=URLパラメータ@「v」
   『youtube.com』ならば
    もし、URLファイル名!=『watch』ならば
     『YouTubeの動画ページのURLではありません』とエラー発生
    Vid値=URLパラメータ@「v」
   『youtu.be』ならば
    Vid値=URLファイル名
   違えば
    『YouTubeの動画ページのURLではありません』とエラー発生
  もし、Vid値=空ならば
   『YouTubeの動画ページのURLではありません』とエラー発生
  #-----------------------------------------------------------------------
  // 動画ページのデータをダウンロードする
  #-----------------------------------------------------------------------
  ページURL=『http://www.youtube.com/watch?v=』&Vid値
  エラー監視
   ページデータ=ページURLのHTTPデータ取得
  エラーならば
   『YouTubeの動画ページをダウンロード中にエラー』とエラー発生
  ページデータ=ページデータをUTF8N_SJIS変換
  #-----------------------------------------------------------------------
  // 動画のタイトルを取得する
  #-----------------------------------------------------------------------
  ページデータを『<meta name="title" content="([^"]+)"』で正規表現マッチ
  情報のタイトル=抽出文字列[0]
  #-----------------------------------------------------------------------
  // 動画ページのストリームマップを取得する
  #-----------------------------------------------------------------------
  ページデータの「url_encoded_fmt_stream_map=」から「\u0026amp;」まで範囲抜き出す
  ストリームマップ=それをURLデコードを「,」で区切る
  ストリームマップで反復
   マップデータとはハッシュ
   動画情報とはYouTube動画情報
   マップデータ=対象を「&」で区切るをハッシュ変換
   マップデータのハッシュキー列挙で反復
    マップデータ@対象=マップデータ@対象をURLデコード
   動画情報のiTag=マップデータ@「itag」
   動画情報の基本URL=マップデータ@「url」
   動画情報の代替ホスト=マップデータ@「fallback_host」
   動画情報のタイプ=マップデータ@「type」
   動画情報の品質=マップデータ@「quality」
   動画情報の署名=マップデータ@「sig」
   動画情報のURL=動画情報の基本URL&「&signature=」&動画情報の署名
   動画情報のタイプの「video/」から「;」まで範囲抜き出すで条件分岐
    「webm」ならば、動画情報の拡張子=「.webm」
		「mp4」ならば、動画情報の拡張子=「.mp4」
   	「x-flv」ならば、動画情報の拡張子=「.flv」
   	「3gpp」ならば、動画情報の拡張子=「.3gp」
   	違えば、動画情報の拡張子=「.flv」
   情報の動画情報@(動画情報のiTag)=動画情報
  情報で戻る
 ・動画ダウンロード({文字列}URLを{文字列=?}フォルダへ|URLから)~
  もし、フォルダ=空ならば、フォルダ=デスクトップ
  フォルダ=フォルダの終端パス追加
  情報とはハッシュ
  ファイル名とは文字列
  情報=URLの動画情報取得
  ファイル名=フォルダ&(情報@「タイトル」を文字列ファイル名変換)&情報@「拡張子」
  情報@「URL」をファイル名へHTTPダウンロード
  ファイル名で戻る
 ・動画情報取得({文字列}URLの|URLで|URLから)~
  URLの拡張子優先動画情報取得で戻る
 ・拡張子優先動画情報取得({文字列}URLの|URLで|URLから)~
  結果とはハッシュ
  情報とはYouTube情報
  ソート用配列とは配列
  情報=URLから情報取得
  情報の動画情報のハッシュキー列挙で反復
   情報の動画情報@対象をソート用配列に配列追加
  ソート用配列を「AとBで拡張子優先比較」で配列カスタムソート
  結果@「URL」=ソート用配列[0]→URL
  結果@「拡張子」=ソート用配列[0]→拡張子
  結果@「タイトル」=情報のタイトル
  結果で戻る
 ・品質優先動画情報取得({文字列}URLの|URLで|URLから)~
  結果とはハッシュ
  情報とはYouTube情報
  ソート用配列とは配列
  情報=URLから情報取得
  情報の動画情報のハッシュキー列挙で反復
   情報の動画情報@対象をソート用配列に配列追加
  ソート用配列を「AとBで品質優先比較」で配列カスタムソート
  結果@「URL」=ソート用配列[0]→URL
  結果@「拡張子」=ソート用配列[0]→拡張子
  結果@「タイトル」=情報のタイトル
  結果で戻る
 ・拡張子優先比較(AとBで)~
  aとは整数
  bとは整数
  a=A→iTagを除去iTag一覧で配列検索
  b=B→iTagを除去iTag一覧で配列検索
  もし、a!=bならば、a-bで戻る
  a=A→拡張子を拡張子一覧で配列検索
  b=B→拡張子を拡張子一覧で配列検索
  もし、a!=bならば、b-aで戻る
  a=A→品質を品質一覧で配列検索
  b=B→品質を品質一覧で配列検索
  b-aで戻る
 ・品質優先比較(AとBで)~
  aとは整数
  bとは整数
  a=A→iTagを除去iTag一覧で配列検索
  b=B→iTagを除去iTag一覧で配列検索
  もし、a!=bならば、b-aで戻る
  a=A→品質を品質一覧で配列検索
  b=B→品質を品質一覧で配列検索
  もし、a!=bならば、a-bで戻る
  a=A→拡張子を拡張子一覧で配列検索
  b=B→拡張子を拡張子一覧で配列検索
  b-aで戻る
YouTubeの品質一覧=「small,medium,large,hd720,hd1080,highres」を「,」で区切る
YouTubeの拡張子一覧=「.flv,.webm,.mp4」を「,」で区切る
YouTubeの除去iTag一覧=「102,104,84,82」を「,」で区切る

●範囲抜き出す({文字列}SのAからBまで|SでAからBを|Bまでを)
 SのAからBまで範囲切り取るで戻る
●URLパラメータ取得({文字列}URLの|URLで|URLから)
 パラメータとはハッシュ
 位置とは整数
 位置=URLで1から「?」をバイト検索
 もし、位置=0ならば、空で戻る
 位置=位置+1
 URLの位置から(URLのバイト数-位置+1)バイト抜き出す
 パラメータ=それを「&」で区切るをハッシュ変換
 パラメータのハッシュキー列挙で反復
  パラメータ@対象=パラメータ@対象をURLデコードをUTF8N_SJIS変換
 パラメータで戻る

iTag一覧

参考までに。少し間違っているかもしれません。
 画質        コンテナ  映像コーデック      音声コーデック  最大解像度
 5   標準画質    FLV       H.263               MP3              320 x 240
 6   高画質      FLV       H.263               MP3              480 x 360
 13  携帯        3GP       H.263/AMR           AMR              176 x 144
 17  携帯        3GP       MPEG-4 Part 2       AAC              176 x 144
 18  360p        MP4       MPEG-4 AVC(H.264) AAC              640 x 360
 22  HD720       MP4       MPEG-4 AVC(H.264) AAC             1280 x 720
 34  360p        FLV       MPEG-4 AVC(H.264) AAC              640 x 360
 35  480p        FLV       MPEG-4 AVC(H.264) AAC              854 x 480
 37  HD1080      MP4       MPEG-4 AVC(H.264) AAC             1920 x 1080
 36  標準画質    3GPP                                           320 x 240
 38  4k          MP4       MPEG-4 AVC(H.264) AAC             4096 x 2304
 43  360p        WEBM      VP8                 Vorbis           640 x 360
 44  480p        WEBM      VP8                 Vorbis           854 x 480
 45  HD720       WEBM      VP8                 Vorbis          1280 x 720
 46  HD1080      WEBM      VP8                 Vorbis          1920 x 1080
 59  480p        MP4                                            854 x 480    未検証
 78  360p        MP4                                            640 x 360    未検証
 82  360p3D      MP4       MPEG-4 AVC(H.264) AAC             640  x 360
 84  720p3D      MP4       MPEG-4 AVC(H.264) AAC             1280 x 720

更新情報

  • 3.24 (2012/11/26)
  1. 3.23の一部の間違いを訂正
  2. ソートを引数付に
  • 3.23 (2012/11/26)
  1. YouTubeの仕様変更に対応
仕様変更の内容
署名がURLとは別に分離され、マップに記述
FlashPlayerの埋め込みがJavaScriptによる記述に完全移行
  1. YouTubeのiTagを追加
  2. YouTubeのすべての形式の動画URLを取得可能に
  3. 命令をグループ化
  4. グローバル変数によるタイトルの取得を廃止
  5. 一行で簡潔に利用できるように変更(「YouTubeの動画ダウンロード」命令)
  • 3.10 (2012/02/01)
優先度ソートを拡張子優先と品質優先に分ける
  • 3.02 (2012/02/01)
バグ修正。Unicodeエンティティ復号命令追加によるUnicode復号の正確化
  • 3.01 (2012/01/31)
JavaScriptで書かれたstream_mapの取得に対応
  • 3.00(2012/01/14)
バグ修正
  • 3.00(2011/08/05)
YouTubeの仕様変更に対応

総合: -
今日: -
昨日: -
  • 参考にしていたCravingExplorerからダウンロード機能がなくなるそうです...残念。このプログラムの使い方も慎重にならなくてはいけないのかもしれません。 -- 作者 (2012-11-26 20:15:40)
名前:
コメント:
+ タグ編集
  • タグ:
  • YouTube
  • ダウンロード

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2012年11月26日 22:38
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。