5

OK、ここで同様の質問を見ましたが、実際に問題に答えている人はいません。

ストリーミング オーディオ アプリを使用していますが、ストリーム ソースから曲のタイトルとアーティスト名が返されます。アプリに iTunes ボタンがあり、iTunes STORE (検索) でその曲を正確に開くか、少なくとも閉じる必要があります。私は次のことを試しました:


NSString *baseString = @"itms://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?songTerm=";

NSString *str1 = [self.songTitle2 stringByReplacingOccurrencesOfString:@" " withString:@"+"];

NSString *str2 = [self.artist2 stringByReplacingOccurrencesOfString:@" " withString:@"+"];

NSString *str = [NSString stringWithFormat:@"%@%@&artistTerm=%@", baseString, str1, str2];

[[UIApplication sharedApplication] openURL: [NSURL URLWithString:str]];

この呼び出しにより、実際に期待どおりに iTunes STORE に切り替わりますが、「iTunes Store に接続できません」というエラーが表示されます。曲は積極的にストリーミングされているので、私は明らかにオンラインであり、店にいます. iTunes アプリの検索ボックスには、曲名だけが表示され、他には何も表示されません。

生成された文字列の例を次に示します: itms://phobos.apple.com/WebObjects/MZSearch.woa/wa/advancedSearchResults?artistTerm=Veruca+Salt&artistTerm=Volcano+Girls

生成された文字列を取得して Safari に貼り付けるのにうんざりしましたが、Mac で問題なく動作し、ストア内のアーティストのアルバムを開きます。なぜ電話ではないのですか?

また、そのアーティストの曲に移動しないため、両方の項目を無視しているようです。これには、アルバム名も知っている必要がありますか (現時点では持っていません)。

助けていただければ幸いです。ありがとう。

4

3 に答える 3

8

はい、私は自分の質問に答えています。

多くの掘り下げと私が知っている最高のプログラマーの一人との話し合いの後で、私たちは解決策を持っているので、私はそれをここで共有しようと思いました。このソリューションは、曲の名前とアーティストを取得し、実際にLink Maker APIを呼び出し、XMLドキュメントを取得し、必要な情報を抽出してiTunes Storeへのリンクを作成し、アルバム内の曲へのストアを開きます。曲を含むそのアーティスト。

ビューコントローラのインターフェイスで、次を追加します。

@property (strong, readonly, nonatomic) NSOperationQueue* operationQueue;
@property (nonatomic) BOOL searching;

実装では:

@synthesize operationQueue = _operationQueue;
@synthesize searching = _searching;

これを行うメソッドとコードは次のとおりです。

// start an operation Queue if not started
-(NSOperationQueue*)operationQueue
{
    if(_operationQueue == nil) {
        _operationQueue = [NSOperationQueue new];
    }
    return _operationQueue;
}
// change searching state, and modify button and wait indicator (if you wish)
- (void)setSearching:(BOOL)searching
{
// this changes the view of the search button to a wait indicator while the search is     perfomed
// In this case
    _searching = searching;
    dispatch_async(dispatch_get_main_queue(), ^{
        if(searching) {
            self.searchButton.enabled = NO;
            [self.searchButton setTitle:@"" forState:UIControlStateNormal];
            [self.activityIndicator startAnimating];
        } else {
            self.searchButton.enabled = YES;
            [self.searchButton setTitle:@"Search" forState:UIControlStateNormal];
            [self.activityIndicator stopAnimating];
        }
    });
}
// based on info from the iTunes affiliates docs
// http://www.apple.com/itunes/affiliates/resources/documentation/itunes-store-web-service-search-api.html
// this assume a search button to start the search. 
- (IBAction)searchButtonTapped:(id)sender {
    NSString* artistTerm = self.artistField.text;  //the artist text.
    NSString* songTerm = self.songField.text;      //the song text 
    // they both need to be non-zero for this to work right.
    if(artistTerm.length > 0 && songTerm.length > 0) {

        // this creates the base of the Link Maker url call.

        NSString* baseURLString = @"https://itunes.apple.com/search";
        NSString* searchTerm = [NSString stringWithFormat:@"%@ %@", artistTerm, songTerm];
        NSString* searchUrlString = [NSString stringWithFormat:@"%@?media=music&entity=song&term=%@&artistTerm=%@&songTerm=%@", baseURLString, searchTerm, artistTerm, songTerm];

        // must change spaces to +
        searchUrlString = [searchUrlString stringByReplacingOccurrencesOfString:@" " withString:@"+"];

        //make it a URL
        searchUrlString = [searchUrlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
        NSURL* searchUrl = [NSURL URLWithString:searchUrlString];
        NSLog(@"searchUrl: %@", searchUrl);

        // start the Link Maker search
        NSURLRequest* request = [NSURLRequest requestWithURL:searchUrl];
        self.searching = YES;
        [NSURLConnection sendAsynchronousRequest:request queue:self.operationQueue completionHandler:^(NSURLResponse* response, NSData* data, NSError* error) {

            // we got an answer, now find the data.
            self.searching = NO;
            if(error != nil) {
                NSLog(@"Error: %@", error);
            } else {
                NSError* jsonError = nil;
                NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
                if(jsonError != nil) {
                    // do something with the error here
                    NSLog(@"JSON Error: %@", jsonError);
                } else {
                    NSArray* resultsArray = dict[@"results"];

                    // it is possible to get no results. Handle that here
                    if(resultsArray.count == 0) {
                        NSLog(@"No results returned.");
                    } else {

                        // extract the needed info to pass to the iTunes store search
                        NSDictionary* trackDict = resultsArray[0];
                        NSString* trackViewUrlString = trackDict[@"trackViewUrl"];
                        if(trackViewUrlString.length == 0) {
                            NSLog(@"No trackViewUrl");
                        } else {
                            NSURL* trackViewUrl = [NSURL URLWithString:trackViewUrlString];
                            NSLog(@"trackViewURL:%@", trackViewUrl);

                           // dispatch the call to switch to the iTunes store with the proper search url
                            dispatch_async(dispatch_get_main_queue(), ^{
                                [[UIApplication sharedApplication] openURL:trackViewUrl];
                            });
                        }
                    }
                }
            }
        }];
    }
}

返されるXMLファイルには、3つのサイズのアルバムアート、アルバム名、コストなど、ここでも抽出できる他の多くの優れた情報が含まれています。

これが他の誰かの助けになることを願っています。これはかなり長い間私を困惑させました、そして私はこの仕事をしてくれた私の親友に感謝します。

于 2013-01-31T05:43:13.750 に答える
0

iTunes の HTML URL を開こうとすると、iOS はすでに iTunes アプリを直接開いているようです。

たとえば、 https: //itunes.apple.com/br/album/falando-de-amor/id985523754 で openURL を実行しようとする と、Web サイトではなく iTunes アプリが既に開かれています。

于 2015-09-02T18:23:24.230 に答える
0

実際、検索には URL を使用しています。そのため、検索時に iTunes が開きます。Mac OS X の My iTunes も検索で開きます。

iTunes の検索 API を使用して、必要なコンテンツを検索し、アーティスト、アルバム、または曲の ID を取得して、そのコンテンツの直接 URL を生成できるようにします。

アーティストまたは特定のアルバムの URL を作成し、アプリでその URL を作成する方法については、iTunes Link Makerを参照してください。

于 2013-01-30T07:59:19.213 に答える