如果您对参加的演出中播放过的歌曲感兴趣,或者某个乐队可能在即将到来的演出中播放过,Setlist.fm是一个很好的资源。 Setlist.fm是一个免费的,类似于Wiki的源,用于查看和共享音乐会集列表。
我正在编写一个终端应用程序,以接收有关艺术家,地点和日期的用户信息,并从给定的表演中返回设置列表。 在以下示例中,我正在寻找《国民报》在2017年10月30日对范之家的访问中的清单。提出的请求是:
https://api.setlist.fm/rest/0.1/search/setlists.json?date=30-10-2017&artistName=the-national&venue=house-of-vans
我使用unirest宝石在Ruby中编写的脚本将响应分解为一个主体,并以某种格式打印了我认为的列表。 以下是终端中显示的内容:
1.没有其他人会在那里
2.系统只在完全黑暗中做梦
3.往回走
4.有罪党
5.不要吞下瓶盖
6.俄亥俄州的Bloodbuzz
7.我需要我的女孩
8.高领衫
9.我死的日子
10.十一月先生
加密
1.黄蜂巢
2. Carin在白酒商店
3. KKK带走了我的宝贝
这看起来不错,但是我意识到我想念的是每首歌都没有添加任何其他信息。 在这个例子中,我错过了一个事实:来自Arcade Fire的Reed Parry和他们一起登上了“俄亥俄的Bloodbuzz”舞台,而他们的最后一首歌是Ramones的翻唱。 Setlist.fm中的完整列表如下所示:
找到每首歌曲的工作量很大。 我在响应正文中使用的路径是response.body["setlists"]["setlist"]["sets”]["set"][set_index]["song"][song_index]["@name"]
。 (Set_index用于main / encore / encore2 / etc。song_index用于循环播放每首歌曲。
问题在于,并非每首歌曲都有其他信息(实际上大多数信息不是)。 但是,如果像本例中那样,封面信息在...["cover"]["@name"]
并且如果乐队被任何人加入,那么它就是...["with"]["@name"]
。 那么,如何判断每首歌曲是否存在?
.include?
使用Ruby,您可以使用.include?
在["song"]
数组中搜索特定键的方法,例如“ cover”或“ with”。 在Encore中,要查找封面信息,您可以循环播放歌曲以检查“ cover”键。
...["song"]["song_index].include? "cover"
如果返回false
则循环将转到下一首歌曲,但如果为true
,则可以获取所覆盖歌手的信息。
.include?
方法是一种非常快速简便的方法来判断数组中是否存在项。 添加方法后,我的终端输出如下所示:
1.没有其他人会在那里
2.系统只在完全黑暗中做梦
3.往回走
4.有罪党
5.不要吞下瓶盖
6.俄亥俄州的Bloodbuzz(与:Richard Reed Parry一起)
7.我需要我的女孩
8.高领衫
9.我死的日子
10.十一月先生
加密
1.黄蜂巢
2. Carin在白酒商店
3. KKK把我的宝贝带走了(Ramones封面)
欢呼!