2012-01-08 67 views
1

我正在開發一個應用程序,其中一個頁面顯示網站博客....我已將所有內容解析爲數組以加載到UITableView中。我最好喜歡在TableView單元格中顯示來自YouTube視頻的縮略圖...但是,解析後的代碼只包含視頻的嵌入代碼....在NSArray中編輯已解析的URL

Soo ....問題是如何我把這樣的:

http://www.youtube.com/v/videoID?version=3&feature=player_detailpage 

並將其更改爲:

http://img.youtube.com/vi/videoID/1.jpg 

或者可能是一個辦法只能解析VideoID的加載與正確的周圍URL字符串?例如:

search:@"//embed/[onlytakethevideoID]" 

在此先感謝!

回答

1

從URL獲取子字符串是一種脆弱的方法,因爲Google可以隨時更改其URL方案。

請考慮創建一個NSURL對象並從中獲取pathComponents數組。該路徑包含視頻ID,並可以用來建立一個新的URL:

NSURL *myURL = [NSURL URLWithString:@"http://www.youtube.com/v/videoID?version=3&feature=player_detailpage"]; 
NSArray *myURLPathComps = [myURL pathComponents]; 
NSString *myVideoID = [myURLPathComps objectAtIndex:[myURLPathComps count]-1]; 
NSURL *myNewURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://img.youtube.com/vi/%@/1.jpg", myVideoID]]; 

我想你會發現,這是不太可能打破。谷歌可以改變他們的URL主機,方案等,但只要視頻ID在路徑的相同部分,你應該沒問題。

+0

這是我最終使用的方法。在我的網址中改變了視頻ID長度,好一點了......謝謝! – 2012-01-09 02:57:55

0

看來你問的是如何提取videoID。我不知道YouTube的URL方案,但如果它像你上面貼的東西,你可以通過(26 + lengthOfVideoID)從字符串中提取字符26,構建一個新的字符串,像這樣:

NSRange videoIDRange = { 26, 26 + kVideoIDLength }; 
NSString* videoID = [youTubeLink substringWithRange:videoIDRange]; 
NSString* newURL = [NSString stringWithFormat:@"http://img.youtube.com/vi/%@/1.jpg", videoID]; 

這是你在找什麼?

+0

絕對是!謝謝! – 2012-01-08 01:36:37

+0

只是頭向上....使用{26,26 + kVideoIDLength}返回26到37(kVideoIDLength = 11)。將範圍更改爲{26,11}返回了正確的範圍。再次感謝! – 2012-01-08 01:43:02

+0

糟糕!對於那個很抱歉。接得好。 – user1118321 2012-01-08 01:53:40

0

的VideoID的字符串可以作爲evaluationg一個XPath表達式的結果來獲得:

substring-before(substring-after($theUrl, 'http://www.youtube.com/v/'), 
       '?' 
       ) 

$theUrl應與實際地址取代。