2016-03-25 2 views
0

Есть ли способ получить .mp3 ссылки для видео youtube? Я попробовал несколько онлайн-сайтов YouTube для конвертирования mp3, но все это просто загружает файл в систему и не дает никакой ссылки для скачивания.скачать youtube видео в формате mp3 в iOS Swift

Или

Есть ли способ, я могу загрузить файлы с помощью ссылки, так что позволяет сказать, что есть какая-то связь, как www.somesongdownloader.com, при загрузке этой ссылки в браузере mp3 файла становится загружен. но если я попытаюсь загрузить то же самое с моего ios-кода, это просто загрузка файла php, а не mp3-файла. Ниже мой код -

Ниже код работает отлично mp3 ссылки, которые я не могу получить для YouTube видео, но этот код не работает для любого URL, который дает mp3 файл для загрузки в браузере -

class func loadFileAsync(url: NSURL, completion:(path:String, error:NSError!) -> Void) { 
    print("Inside loadFileAsync") 
    let documentsUrl = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first! 
    let destinationUrl = documentsUrl.URLByAppendingPathComponent(url.lastPathComponent!) 
    if NSFileManager().fileExistsAtPath(destinationUrl.path!) { 
     print("file already exists [\(destinationUrl.path!)]") 
     completion(path: destinationUrl.path!, error:nil) 
    } else { 
     let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration() 
     let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil) 
     let request = NSMutableURLRequest(URL: url) 
     request.HTTPMethod = "GET" 

     let task = session.dataTaskWithRequest(request, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in 
      if (error == nil) { 
       if let response = response as? NSHTTPURLResponse { 
        print("response=\(response)") 
        if response.statusCode == 200 { 
         if data!.writeToURL(destinationUrl, atomically: true) { 
          print("file saved [\(destinationUrl.path!)]") 
          completion(path: destinationUrl.path!, error:error) 
         } else { 
          print("error saving file") 
          let error = NSError(domain:"Error saving file", code:1001, userInfo:nil) 
          completion(path: destinationUrl.path!, error:error) 
         } 
        } 
       } 
      } 
      else { 
       print("Failure: \(error!.localizedDescription)"); 
       completion(path: destinationUrl.path!, error:error) 
      } 
     }) 
     task.resume() 
    } 
} 
+0

Вам необходимо получить прямой URL-адрес конвертируемого mp3. Для этого вам нужно играть с HTML на веб-странице используемого URL (для преобразования видео в mp3). Проверьте это http://www.codeproject.com/Tips/587931/YouTube-to-mp .. Это не в iOS, но вам, возможно, придется работать аналогичным образом. – san

+0

Есть ли другой способ получить прямую ссылку на скачивание конвертированного mp3? –

+0

Не уверен, проверьте это один раз http://www.youtubeinmp3.com/api/. – san

ответ

0

Как было предложено в моих комментариях, используя http://www.youtubeinmp3.com/api/, вы можете это сделать.

let videoURL = "http://www.youtube.com/watch?v=KMU0tzLwhbE" 
    let url = NSURL(string: "http://www.youtubeinmp3.com/fetch/?format=JSON&video=\(videoURL)") 
    let sessionConfig = NSURLSessionConfiguration.defaultSessionConfiguration() 
    let session = NSURLSession(configuration: sessionConfig, delegate: nil, delegateQueue: nil) 
    let request = NSMutableURLRequest(URL: url!) 
    request.HTTPMethod = "GET" 

    let task = session.dataTaskWithRequest(request, completionHandler: { (data: NSData?, response: NSURLResponse?, error: NSError?) -> Void in 
     if (error == nil) { 
      if let response = response as? NSHTTPURLResponse { 
       print("response=\(response)") 
       if response.statusCode == 200 { 
        if data != nil { 
         do { 
          let responseJSON = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as! NSDictionary; 
          let urlString = responseJSON["link"] as! String 
          let directDownloadURL = NSURL(string: urlString) 

          // Call your method loadFileAsync 
          YourClass.loadFileAsync(directDownloadURL!, completion: { (path, error) -> Void in 
           print(path) 
          }) 

         } 
         catch let JSONError as NSError { 
          print("\(JSONError)") 
         } 
         catch { 
          print("unknown error in JSON Parsing"); 
         } 

        } 
       } 
      } 
     } 
     else { 
      print("Failure: \(error!.localizedDescription)"); 
     } 
    }) 
    task.resume() 

} 

Я не выполнял обработку ошибок, поэтому вам необходимо уточнить этот код. Но это, безусловно, сработает. Я протестировал его.

+0

Сообщите мне, если это сработало для вас. – san

+0

Я уже пробовал это и нет, это не сработало :(, его загрузка файла не mp3-файла. Также URL-адрес, который мы получаем из http://www.youtubeinmp3.com/api/, не является файлом mp3. –

+0

Сохраните файл с расширением как .mp3, он будет работать. Вы можете протестировать его, переименовав файл с именем get with extension как .mp3. – san

Смежные вопросы