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