質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.61%

  • Swift

    7030questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Web上から動画をダウンロード

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,066
退会済みユーザー

退会済みユーザー

前提・実現したいこと

Webページ上にある動画をURLSessionでダウンロードし、
オフラインで動画を閲覧できるようにしたいです。

しかし取得できたデータがhtmlでした。(想定ではXXX.movファイル)

ここからどうやってオフライン再生に持っていくのかがわからず、
ご相談させていただきました。

現状

試しにyoutubeの動画をダウンロードを試みたところ、
ダウンロードとデータの保存がされたところまでは確認できました。

コード
//非同期でURL先のデータをダウンロード
func startDownloadTask() {

        let sessionConfig = URLSessionConfiguration.background(withIdentifier: "myapp-background")
        let session = URLSession(configuration: sessionConfig, delegate: self, delegateQueue: nil)

        let url = URL(string: self.video!.embedded_url!)!

        let downloadTask = session.downloadTask(with: url)
        downloadTask.resume()

}

//ドキュメントディレクトリのパスを取得して保存用ファルダを用意
func getSaveDirectory() -> String {

        let fileManager = Foundation.FileManager.default

        let path = NSSearchPathForDirectoriesInDomains(Foundation.FileManager.SearchPathDirectory.documentDirectory, Foundation.FileManager.SearchPathDomainMask.userDomainMask, true)[0] + "/DownloadFiles/"

        if !fileManager.fileExists(atPath: path) {
            createDir(path: path)
        }

        return path
    }

//ダウンロード完了後の処理
func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {

        print("finish download")

        var data: NSData!

        do {
            if let data = NSData(contentsOf: location) {

                let fileExtension = location.pathExtension
                let filePath = getSaveDirectory() + getIdFromDateTime() + "." + fileExtension

                print(filePath)

                try data.write(toFile: filePath, options: .atomic)

            }
        } catch let error as NSError {
            print("download error: \(error)")
        }

    }
データ保存先

/Users/yuri/Library/Developer/CoreSimulator/Devices/7B592E3E-52FC-4013-90CA-5FC379C028A6/data/Containers/Data/Application/2669F6B6-10E0-41E6-B594-BF85CA04C702/Documents/DownloadFiles/2017-01-09-05-37-15.tmp

取得データ

イメージ説明
一部のみお見せしていますが、このようにhtmlファイルです。

質問

Youtubeから動画をダウンロードするアプリがあることは確認しております。
それらのアプリはどうやって動画をダウンロードしているのでしょうか?
1)そもそも取得先のURLが不適切である
2)htmlから動画を抽出、.movに変換する方法がある
3)その他

具体的な実施方法でなくともかまいません
方法論だけでもいいのでもしご存知の方がいましたらご共有いただけると幸いです。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

利用規約 - YouTube

本コンテンツは、「現状有姿」でお客様に提供されています。お客様は、本コンテンツに、本サービスの機能により意図されており本サービス条件により認められている限度で、参考目的での個人的な利用のためにのみアクセスすることができます。お客様は、「ダウンロード」または同様のリンクが本コンテンツについて本サービス上でYouTubeにより表示されている場合を除き、いかなる本コンテンツもダウンロードしてはなりません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/09 06:57

    http://youtube-lect.jp/download-arrest
    こちらの記事を読んで
    有料コンテンツについて、それが本来有料である(=違法)とわかってダウンロードするのがいけないのであり、
    ダウンロードするコンテンツの制限をかければいいと思っていたのですが、
    そもそもダウンロードは利用規約に違反する。。ということなのですね。。

    自分で調べたつもりだったのですが、肝心の規約を読まなくてはダメでしたね。

    ご親切に教えてくださりありがとうございます^^

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Swift

    7030questions

    Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています