SoundCloudのAPIをつかったiOSアプリ開発の手順/ノウハウをまとめていくシリーズ。
SoundCloudのプレイリストからトラックの一覧を取得したいと思います。
はじめに
英語がスラスラ読める人は以下のSoundCloudのクイックスタートマニュアルも合わせて参照した方が理解が深まります。
参考:SoundCloud iOS SDK
http://developers.soundcloud.com/docs/api/ios-quickstart
プレイリスト取得/表示
事前準備
事前にアカウント認証を済ませておく必要があります。
アカウント認証方法は、
SoundCloud iOSアプリ開発 : アカウント認証、
もしくは、
SoundCloudクイックスタートマニュアル
をご参考ください。
プレイリスト取得
getTracksButton
を押したらgetTracks
メソッドを実行し
任意のプレイリストを取得する機能を実装します。
ボタンのプロパティを宣言します。
@property (weak, nonatomic) IBOutlet UIButton *getTracksButton;
- (IBAction)getTracks:(id)sender;
getTracksButtonボタンを押したら、実行されるgetTracksメソッドを記述します。
- (IBAction)getTracks:(id)sender {
SCAccount *account = [SCSoundCloud account];
if (account == nil) {
UIAlertView *alert = [[UIAlertView alloc]
initWithTitle:@"Not Logged In"
message:@"You must login first"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
return;
}
SCRequestResponseHandler handler;
handler = ^(NSURLResponse *response, NSData *data, NSError *error) {
NSError *jsonError = nil;
NSDictionary *jsonResponse = [NSJSONSerialization
JSONObjectWithData:data
options:1
error:&jsonError];
NSArray *array = nil;
array = [jsonResponse objectForKey:@"tracks"];
if (!jsonError && array) {
// xibの場合の記述はこちら
SCTTrackListViewController *trackListVC = [[self storyboard] instantiateViewControllerWithIdentifier:@"SCTTrackListViewController"];
trackListVC.tracks = (NSArray *)array;
[self presentViewController:trackListVC animated:YES completion:nil];
}
};
// playlist取得のリクエストを送る
[SCRequest performMethod:SCRequestMethodGET
onResource:[NSURL URLWithString:@"https://api.soundcloud.com/playlists/xxxxxxxx.json"]
usingParameters:nil
withAccount:account
sendingProgressHandler:nil
responseHandler:handler];
}
SCRequestのperformMethodメソッドのURLWithStringの引数に指定するURLですが、
"xxxxxxxx"となっているところはプレイリストのIDを記載してください。
プレイリストのIDは、ブラウザからSoundCloudのプレイリストを開いて、
Shareボタン -> Embed -> でinframeタグの中に記載されているurlの..../playlist/xxxxxxxx&...と記載されている"xxxxxxxx"のところです。
例えば、僕のプレイリストならば
https://soundcloud.com/ryotaro-ohkawa/sets/mybesttracks-2013
Embed用のinframeタグに記載されているIDは18368246となりますので、そのIDを上述の"xxxxxxxx"に記載します。
<iframe width="100%" height="450" scrolling="no" frameborder="no" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/playlists/18368246&auto_play=false&hide_related=false&visual=true"></iframe>
プレイリストをリスト表示
プレイリストを取得できたら、書くまでもないかもしれませんが、UITableViewクラスを使ってリスト表示をします。
テーブル全体のセクションの数を返す
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
指定されたセクションの項目数を返す
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return [self.tracks count];
}
指定された箇所のセルを作成する。
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView
dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc]
initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellIdentifier];
}
NSDictionary *track = [self.tracks objectAtIndex:indexPath.row];
cell.textLabel.text = [track objectForKey:@"title"];
return cell;
}
プレイリストのトラックの一覧を格納するtracks
はプロパティ変数として定義しておいてください。
これで、getTracksButton
を押したらgetTracks
メソッドを実行し僕のプレイリストからトラックの一覧を取得できました。
参考
Soundcloud iOS SDK ガイドライン
http://developers.soundcloud.com/docs/api/ios-quickstart#installation
Soundcloud HTTP API Reference
https://developers.soundcloud.com/docs/api/reference#playlists