python读取mp3数据_大数据分析Python使用Last.fm API获取音乐数据

大数据分析Python使用Last.fm API获取音乐数据,API使我们能够从服务器发出检索数据的请求。API在许多方面都很有用,但其中之一是能够为数据科学项目创建唯一的数据集。在本教程中,我们将学习一些用于Last.fm API的高级技术。

在我们的初学者大数据分析Python API教程中,我们使用了一个简单的API,非常适合教授基础知识:

a.它具有一些易于理解的终点。

b.因为它不需要身份验证,所以我们不必担心如何告诉API我们有权使用它。

c.每个端点响应的数据都很小,并且结构易于理解。

实际上,大多数API都比这更复杂,因此要使用它们,您需要了解一些更高级的概念。具体来说,我们将学习:

a.如何使用API​​密钥进行身份验证。

b.如何使用速率限制和其他技术在API准则内工作。

c.如何使用分页处理较大的响应。

本教程假定您了解使用大数据分析Python使用API​​的基础知识。如果您不这样做,我们建议您开始我们的初学者API教程。我们还假设您具有大数据分析Python和pandas的中级知识。如果您不这样做,则可以通过我们的大数据分析Python基础课程免费开始学习。

使用Last.fm API

我们将使用Last.fm API。Last.fm是一项音乐服务,可通过连接到iTunes,Spotify等类似的音乐流应用程序并跟踪您听的音乐来建立个人资料。

他们提供对API的免费访问权,以便音乐服务可以向其发送数据,还可以提供终结点,以汇总Last.fm在各种艺术家,歌曲和流派上拥有的所有数据。我们将使用他们的API建立热门艺术家的数据集。

遵循API准则

使用API​​时,请务必遵循其准则。如果您不这样做,则可能会被禁止使用该API。除此之外,特别是当一家公司免费提供API时,请尊重他们的限制和准则,因为他们没有提供任何东西。

查看API文档中的Introduction页面,我们会注意到一些重要的准则:

请在所有请求上使用可识别的User-Agent标头。这有助于我们进行日志记录,并减少被禁止的风险。

向last.fm API发出请求时,可以使用headers标识自己。Last.fm希望我们在标头中指定一个用户代理,以便他们知道我们是谁。我们将在稍后提出第一个请求时学习如何执行此操作。

在确定要拨打多少次电话时,请使用常识。例如,如果要制作Web应用程序,请尝试不要在页面加载时点击API。如果您的应用程序每秒持续拨打多个电话,则您的帐户可能会被暂停。

为了构建我们的数据集,我们将需要向Last.fm API发出数千个请求。尽管他们没有在文档中提供具体的限制,但他们确实建议我们不要持续每秒进行多次呼叫。在本教程中,我们将学习一些限制速率的策略,或者确保我们不会过多使用它们的API,以便避免被禁止。

在发出第一个请求之前,我们需要学习如何使用Last.fm API进行身份验证

使用API​​密钥进行身份验证

大多数API都要求您进行身份验证,以便他们知道您有权使用它们。身份验证的最常见形式之一是使用API密钥,就像使用其API的密码一样。如果在发出请求时未提供API密钥,则会出现错误。

使用API​​密钥的过程如下:

a.您使用API​​的提供者创建一个帐户。

b.您需要一个API密钥,该密钥通常是一个长字符串,例如54686973206973206d7920415049204b6579。

c.您可以将API密钥记录在安全的地方,例如密码保存器。如果有人获得了您的API密钥,那么他们可以使用伪装成您的API。

d.每次发出请求时,您都提供API密钥以进行身份​​验证。

要获取Last.fm的API密钥,请先创建一个帐户。创建帐户后,应转到以下表格:

在每个字段中填写有关您计划如何使用API​​的信息。您可以将“回调URL”字段保留为空白,因为仅当您正在构建要验证为特定Last.fm用户的Web应用程序时才使用此字段。

提交表单后,您将获得API密钥和共享密钥的详细信息:

请在安全的地方记下这些内容-本教程无需使用共享密钥,但最好记下它,以防万一您想做一些需要您作为特定用户进行身份验证的事情。

发出我们的第一个API请求

为了创建热门艺术家的数据集,我们将使用chart.getTopArtists端点。

查看Last.fm API文档,我们可以观察到以下几点:

a.看起来只有一个真实的端点,并且实际上每个“端点”都是使用method参数指定的。

b.文档说此服务不需要身份验证。尽管起初看起来似乎有些混乱,但它告诉我们的是,我们不需要身份验证为特定的Last.fm用户。如果您在此之上看,您会发现我们确实需要提供我们的API密钥。

c.API可以返回多种格式的结果-我们将指定JSON,以便我们可以利用我们在大数据分析Python中使用API​​的已知知识

在开始之前,请记住,当我们发出请求时,我们需要提供一个用户代理标头来标识自己。使用大数据分析Python请求库,我们使用headers参数和标头字典来指定标头,如下所示:

我们将从定义API密钥和用户代理开始(本教程中显示的API密钥不是真正的API密钥!)

接下来,我们将导入请求库,为标头和参数创建字典,然后发出第一个请求!

我们的请求返回的状态码为“ 200”,因此我们知道成功了。

在查看请求返回的数据之前,请考虑一下在本教程中我们将发出许多请求的事实。在这些请求中,许多功能将是相同的:

a.我们将使用相同的URL

b.我们将使用相同的API密钥

c.我们将指定JSON作为我们的格式。

d.我们将使用相同的标题。

为了节省时间,我们将创建一个函数来为我们完成很多工作。我们将为该函数提供一个有效负载字典,然后将额外的键添加到该字典,并将其与其他选项一起传递以发出请求。

让我们看一下该函数的外观:

正如我们在初学者大数据分析Python API教程中所了解的那样,大多数API都以JSON格式返回数据,并且我们可以使用大数据分析Python json模块以更易于理解的格式打印JSON数据。

让我们重新使用jprint()在该教程中创建的函数,并打印来自API的响应:

{

"artists": {

"@attr": {

"page": "1",

"perPage": "50",

"total": "2901036",

"totalPages": "58021"

},

"artist": [

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "1957174",

"mbid": "b7539c32-53e7-4908-bda3-81449c367da6",

"name": "Lana Del Rey",

"playcount": "232808939",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "588883",

"mbid": "",

"name": "Billie Eilish",

"playcount": "35520548",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "655052",

"mbid": "",

"name": "Post Malone",

"playcount": "34942708",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "2290993",

"mbid": "20244d07-534f-4eff-b4d4-930878889970",

"name": "Taylor Swift",

"playcount": "196907702",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "1166180",

"mbid": "f4fdbb4c-e4b7-47a0-b83b-d91bbfcfa387",

"name": "Ariana Grande",

"playcount": "124251766",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "1716587",

"mbid": "b8a7c51f-362c-4dcb-a259-bc6e0095f0a6",

"name": "Ed Sheeran",

"playcount": "92646726",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "4084524",

"mbid": "420ca290-76c5-41af-999e-564d7c71f1a7",

"name": "Queen",

"playcount": "197850122",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "4449534",

"mbid": "164f0d73-1234-4e2c-8743-d77bf2191051",

"name": "Kanye West",

"playcount": "250533444",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "3732023",

"mbid": "b10bbbfc-cf9e-42e0-be17-e2c3e1d2600d",

"name": "The Beatles",

"playcount": "526866107",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "3441963",

"mbid": "b49b81cc-d5b7-4bdd-aadb-385df8de69a6",

"name": "Drake",

"playcount": "147881092",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "4778856",

"mbid": "a74b1b7f-71a5-4011-9441-d0b5e4122711",

"name": "Radiohead",

"playcount": "507682999",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "1528378",

"mbid": "381086ea-f511-4aba-bdf9-71c753dc5077",

"name": "Kendrick Lamar",

"playcount": "109541321",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "4618838",

"mbid": "db36a76f-4cdf-43ac-8cd0-5e48092d2bae",

"name": "Rihanna",

"playcount": "204114198",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "3550620",

"mbid": "ada7a83c-e3e1-40f1-93f9-3e73dbc9298a",

"name": "Arctic Monkeys",

"playcount": "339370140",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

"size": "medium"

},

{

"size": "large"

},

{

"size": "extralarge"

},

{

"size": "mega"

}

],

"listeners": "3401872",

"mbid": "5441c29d-3602-4898-b1a1-b77fa23b8e50",

"name": "David Bowie",

"playcount": "197606611",

"streamable": "0",

},

{

"image": [

{

"size": "small"

},

{

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值