Youtubeの動画URLを取得するSwiftコードを書いた

Objective-Cだと以下のプロジェクトで、YoutubeからiOSで再生可能な形式の動画を取得して再生している。その中身の必要そうな部分をSwiftで書き直して使う話。

hellozimi/HCYoutubeParser

http://www.youtube.com/get_video_info?video_id=<video_id>

で取得できるデータから再生可能な動画のURLを引っ張り出すことができるので、video_idさえわかればYoutubeから動画を引っ張ってきてiOSアプリ内で再生できるようだ。

データがURLのQuery形式になっていて、そのパーサが必要なので作る。

動画データは、url_encoded_fmt_stream_mapに入っている。

データの取得(GET)

非同期でGETする。

let url = "http://www.youtube.com/get_video_info?video_id=<ID>"
var req = NSMutableURLRequest(URL: NSURL(string: url)!)
req.HTTPMethod = "GET"
var task = NSURLSession.sharedSession().dataTaskWithRequest(req, completionHandler: {data, response, error in
    if (error == nil) {
        var result = NSString(data: data, encoding: NSUTF8StringEncoding)!
        println(result)
    } else {
        println(error)
    }
})
task.resume()

GETしたレスポンスをパース

URLクエリ文字列をパースしてDictionaryに入れる。パースしたあとのデータはstringByRemovingPercentEncodingでデコードする必要があるので注意。

var parameters: Dictionary = [String: String]()
for key_val in split(result, { $0 == "&" }) {
    let key_val_array = split(key_val, { $0 == "=" })
    let key = key_val_array[0]
    let val = key_val_array[1].stringByRemovingPercentEncoding
    parameters[key] = val;
}
return parameters

GETのコールバック内にこのコードを仕込めば完成。

得られるデータ内の必要そうなパラメータ

thumbnail_url, length_seconds, iurl, title, iurlmq, url_encoded_fmt_stream_map, iurlmaxres, iv_module(swfのリンクになってる、iOSで再生できるかは確認してない), vid, iurlsd

あとは、url_encoded_fmt_stream_mapのURLをAVPlayerなりに入れれば再生できます。

Show comments

Adsense

Share

  • このエントリーをはてなブックマークに追加

About

趣味でプログラミングをしています。仕事では致し方なくC言語のようなC++を書いています。

Tags

Pages