2012-07-18 9 views
7

में प्रोग्रामिक रूप से यूट्यूब वीडियो लिंक का पता लगाने के लिए मुझे यूट्यूब जैसी वीडियो साइटों से वीडियो डाउनलोड और सहेजने की आवश्यकता है। मैं उन्हें आईफोन की वीडियो लाइब्रेरी में सहेजना चाहता हूं। मैं वीडियो का पता कैसे लगा सकता हूं और उन्हें पुस्तकालय में कैसे सहेज सकता हूं? मैंने पहले ही कुछ स्रोत कोड उपलब्ध कराए हैं। यह मैंने डाउनलोड एक्शन में किया है, लेकिन काम नहीं कर रहा है।उद्देश्य सी

- (IBAction)download { 
    [downloadButton setEnabled:NO]; 

    [webView setUserInteractionEnabled:NO]; 

    UIUserInterfaceIdiom userInterfaceIdiom = [UIDevice currentDevice].userInterfaceIdiom; 

    NSString *getURL = @""; 

    if (userInterfaceIdiom == UIUserInterfaceIdiomPhone) { 
     getURL = [webView stringByEvaluatingJavaScriptFromString:@"function getURL() {var player = document.getElementById('player'); var video = player.getElementsByTagName('video')[0]; return video.getAttribute('src');} getURL();"]; 
    } else { 
     getURL = [webView stringByEvaluatingJavaScriptFromString:@"function getURL() {var bh = document.getElementsByClassName('bh'); if (bh.length) {return bh[0].getAttribute('src');} else {var zq = document.getElementsByClassName('zq')[0]; return zq.getAttribute('src');}} getURL();"]; 
    } 

    NSString *getTitle = [webView stringByEvaluatingJavaScriptFromString:@"function getTitle() {var jm = document.getElementsByClassName('jm'); if (jm.length) {return jm[0].innerHTML;} else {var lp = document.getElementsByClassName('lp')[0]; return lp.childNodes[0].innerHTML;}} getTitle();"]; 

    NSString *getTitleFromChannel = [webView stringByEvaluatingJavaScriptFromString:@"function getTitleFromChannel() {var video_title = document.getElementById('video_title'); return video_title.childNodes[0].innerHTML;} getTitleFromChannel();"]; 

    NSLog(@"%@, %@, %@", getURL, getTitle, getTitleFromChannel); 

    [webView setUserInteractionEnabled:YES]; 

    NSArray *components = [getTitle componentsSeparatedByCharactersInSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet]]; 
    getTitle = [components componentsJoinedByString:@" "]; 

    if ([getURL length] > 0) { 
     if ([getTitle length] > 0) { 
      videoTitle = [getTitle retain]; 

      bar = [[UIDownloadBar alloc] initWithURL:[NSURL URLWithString:getURL] 
            progressBarFrame:CGRectMake(85.0, 17.0, 150.0, 11.0) 
              timeout:15 
              delegate:self]; 

      [bar setProgressViewStyle:UIProgressViewStyleBar]; 

      [toolbar addSubview:bar]; 
     } else { 
      NSArray *components = [getTitleFromChannel componentsSeparatedByCharactersInSet:[[NSCharacterSet alphanumericCharacterSet] invertedSet]]; 
      getTitleFromChannel = [components componentsJoinedByString:@" "]; 

      if ([getTitleFromChannel length] > 0) { 
       videoTitle = [getTitleFromChannel retain]; 

       bar = [[UIDownloadBar alloc] initWithURL:[NSURL URLWithString:getURL] 
             progressBarFrame:CGRectMake(85.0, 17.0, 150.0, 11.0) 
               timeout:15 
               delegate:self]; 

       [bar setProgressViewStyle:UIProgressViewStyleBar]; 

       [toolbar addSubview:bar]; 
      } else { 
       //NSLog(@"%@", [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].innerHTML;"]); 

       UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"MyTube" message:@"Couldn't get video title." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

       [alertView show]; 
       [alertView release]; 

       [downloadButton setEnabled:YES]; 
      } 
     } 
    } else { 
     //NSLog(@"%@", [webView stringByEvaluatingJavaScriptFromString:@"document.getElementsByTagName('html')[0].innerHTML;"]); 

     UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"MyTube" message:@"Couldn't get MP4 URL." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 

     [alertView show]; 
     [alertView release]; 

     [downloadButton setEnabled:YES]; 
    } 
} 
+0

मैं भी एक ही बात की जरूरत है क्योंकि यूट्यूब बजाय http या https – dark

+1

reqeust की जावास्क्रिप्ट शामिल जब आप कहते हैं कि "यह काम नहीं कर रहा", आप अधिक विशिष्ट हो सकता है? – Abizern

+0

@alpz कोई अपडेट? –

उत्तर

2

आप वीडियो या तो फ़ोटो एल्बम के लिए या डाउनलोड करने वीडियो यू साइट यूट्यूब से वीडियो डाउनलोड करने के मामले video.In इसी की एक downloadble लिंक उत्पन्न करने के लिए है itself.For ऐप्लिकेशन निर्देशिका से डाउनलोड किया सहेज सकते हैं, का उल्लेख यह स्रोत कोड https://github.com/comonitos/youtube_video। कुछ साइटें प्रतिबंधित हो सकती हैं जो संभव नहीं हो सकती हैं। डाउनलोड करने योग्य यूआरएल उत्पन्न करके अन्य सभी साइटों के मामले में, आप इसे

3

पर वीडियो आईडी प्राप्त कर सकते हैं यदि आप लगातार उम्मीद कर रहे हैं कि वे लगातार हों < ऑब्जेक्ट> प्रारूप। अगर यह आईफ्रेम में है तो रेगेक्स को स्पष्ट रूप से बदला जाना चाहिए।

NSError *error = nil; 
NSRegularExpression *regex = 
[NSRegularExpression regularExpressionWithPattern:@"<object .*name=\"movie\" value=\"[a-zA-z:\\/]*.com\\/\\w*\\/([A-Za-z0-9\\_-]*).*<\\/object>" 
              options:NSRegularExpressionCaseInsensitive 
              error:&error]; 

[regex enumerateMatchesInString:pageSource options:0 range:NSMakeRange(0, [string length]) usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop){ 
    NSString *videoID = [pageSource substringWithRange:[match rangeAtIndex:1]];   
}]; 
+1

डाउनवोट क्यों? – endy