Youtube APIを使用していますが、サイトのintと同じように、検索のオートコンプリート機能が必要です。iPhoneアプリの検索入力ボックスに入力すると、用語の候補が表示されます。ドキュメントを読みましたが、まだ見つかりません。これはAPIを使用して可能ですか?
2 に答える
ここで答えるには遅すぎることはわかっていますが、この回答を投稿します。これは、数日間私を夢中にさせたからです!!! そしてそれが他の人を救うことを願っています...
だから...私はこの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 からのすべてのオートコンプリート情報を含む配列です! ユーザーが searchBar の別の文字をクリックするたびに変更できるようにするには、次の関数を使用します。
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText{
[self autocompleteSegesstions:self.searchBar.text];}
さて、これがあなたが持つべきメインコードです。このコードを高速化するには (キーボードでの書き込み遅延があることがわかるようになったため)、別のスレッドを使用してParsingArrayをダウンロードするか、Asynchronous blockを使用します。(最初のメソッドのコンテンツを Async ブロックに挿入するだけです...)
覚えておいてください - おそらくこれよりもはるかに優れたオートコンプリートのyouTube検索を実装する別の方法があるかもしれませんが、私はそれを見つけられなかったので、たくさん検索しました! 誰かがより良い方法を知っているなら、彼がここに投稿してくれたらもっとうれしいです.
楽しむ!!!
Youtube API ではありませんが、Google Suggest API を使用できます。次の URL を呼び出します。
http://suggestqueries.google.com/complete/search?client=youtube&ds=yt&q=QUERY
これは、アプリが解析して表示できる提案用語の json 応答を返します。json よりも XML を好む場合は、変更してください。
client=youtube
に
output=toolbar
(残りのパラメータは同じままにしておきます)。