2012-11-24 135 views
0

我使用Youtube API,我想要一個搜索自動完成功能,就像int網站一樣,當您鍵入iPhone App的搜索輸入框時,它會給您條款建議。我已閱讀文檔,但仍然缺少,這可能使用API​​嗎?Youtube API自動完成搜索

回答

0

不是YouTube的API - 但你可以使用Google Suggest API。打電話到這個URL:

http://suggestqueries.google.com/complete/search?client=youtube&ds=yt&q=QUERY 

這將返回一個json響應的建議條款,您的應用程序可以解析和顯示。如果你喜歡XML到JSON,改變

client=youtube 

output=toolbar 

(離開參數相同的其餘部分)。

+0

其中q = QUERY是要搜索的詞嗎?++ – hariszaman

4

嗯,我知道現在回答太遲了,但我會發布這個答案,因爲這是一個讓我瘋狂幾天的東西!並希望這將節省別人......

所以...我使用這個API http://suggestqueries.google.com/complete/search?client=youtube&ds=yt&alt=json&q=%@ (Q是自動完成的搜索查詢)。

現在,如果您嘗試打開瀏覽器,請粘貼此API並將q =%@更改爲(可以說):q = br,您會注意到某些帶有後綴.js的文件會下載到您的計算機中。 出於某種原因,我無法分析JSON喜歡,所以我做了那招:

@property(strong, nonatomic) NSMutableArray *ParsingArray // Put that in .h file or after @interface in your .m file 

    -(void)autocompleteSegesstions : (NSString *)searchWish{ 
//searchWish is the text from your search bar (self.searchBar.text) 


NSString *jsonString = [NSString stringWithFormat:@"http://suggestqueries.google.com/complete/search?client=youtube&ds=yt&alt=json&q=%@", searchWish]; 
    NSString *URLString = [jsonString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; // Encoding to identify where, for example, there are spaces in your query. 


NSLog(@"%@", URLString); 

    NSData *allVideosData = [[NSData alloc]initWithContentsOfURL:[[NSURL alloc]initWithString:URLString]]; 

NSString *str = [[NSString alloc]initWithData:allVideosData encoding:NSUTF8StringEncoding]; 
NSLog(@"%@", str); //Now you have NSString contain JSON. 
NSString *json = nil; 
NSScanner *scanner = [NSScanner scannerWithString:str]; 
[scanner scanUpToString:@"[[" intoString:NULL]; // Scan to where the JSON begins 
[scanner scanUpToString:@"]]" intoString:&json]; 
//The idea is to identify where the "real" JSON begins and ends. 
json = [NSString stringWithFormat:@"%@%@", json, @"]]"]; 
NSLog(@"json = %@", json); 


NSArray *jsonObject = [NSJSONSerialization JSONObjectWithData:[json dataUsingEncoding:NSUTF8StringEncoding] //Push all the JSON autocomplete detail in to jsonObject array. 
                       options:0 error:NULL]; 
self.ParsingArray = [[NSMutableArray alloc]init]; //array that contains the objects. 
for (int i=0; i != [jsonObject count]; i++) { 
    for (int j=0; j != 1; j++) { 
     NSLog(@"%@", [[jsonObject objectAtIndex:i] objectAtIndex:j]); 
     [self.ParsingArray addObject:[[jsonObject objectAtIndex:i] objectAtIndex:j]]; 
     //Parse the JSON here... 

    } 

}} 

就是這樣。現在ParsingArray是包含來自youTube的所有自動完成信息的數組!能夠在每次用戶點擊搜索欄另一個字符的時間去改變它,使用此功能:

  - (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{ 
    [self autocompleteSegesstions:self.searchBar.text];} 

現在,這是你應具備的主要代碼。爲使代碼更快(因爲您現在可以看到您的鍵盤上有寫入延遲),請使用另一個線程來下載ParsingArray或使用異步塊。 (只需將第一種方法的內容插入Async塊...)

記住 - 也許還有另一種方法來實現自動完成youTube搜索好得多,但我只是沒有找到它,而我搜索很多!如果有人知道更好的辦法,如果他在這裏發佈,我會更高興。

玩得開心!

+0

它很棒! – user523234

+0

就像我的魅力!感謝好友 – Anoop

+0

將於2015年8月10日貶低。請參閱http://googlewebmastercentral.blogspot.com.au/2015/07/update-on-autocomplete-api.html – AllBlackt