0

Youtube APIを使用していますが、サイトのintと同じように、検索のオートコンプリート機能が必要です。iPhoneアプリの検索入力ボックスに入力すると、用語の候補が表示されます。ドキュメントを読みましたが、まだ見つかりません。これはAPIを使用して可能ですか?

4

2 に答える 2

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 からのすべてのオートコンプリート情報を含む配列です! ユーザーが searchBar の別の文字をクリックするたびに変更できるようにするには、次の関数を使用します。

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

さて、これがあなたが持つべきメインコードです。このコードを高速化するには (キーボードでの書き込み遅延があることがわかるようになったため)、別のスレッドを使用してParsingArrayをダウンロードするか、Asynchronous blockを使用します。(最初のメソッドのコンテンツを Async ブロックに挿入するだけです...)

覚えておいてください - おそらくこれよりもはるかに優れたオートコンプリートのyouTube検索を実装する別の方法があるかもしれませんが、私はそれを見つけられなかったので、たくさん検索しました! 誰かがより良い方法を知っているなら、彼がここに投稿してくれたらもっとうれしいです.

楽しむ!!!

于 2014-08-05T19:04:01.800 に答える
0

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

(残りのパラメータは同じままにしておきます)。

于 2012-11-26T05:41:57.603 に答える