使用Soundcloud API在Django中创建Set

2024-05-23 23:11:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用soundcloud播放器,但是当我使用API教程中的代码时,我得到以下错误:“Resource”对象没有属性'__getitem__'

我不明白为什么embed\u info['html']不能工作,因为它正是https://developers.soundcloud.com/docs/api/guide#playing上所说的。我正在尝试做一个网页,将创建一个集从轨道对象,我已经在我的网站上盘存。在

def sc(request):
    client = soundcloud.Client(client_id='my_id')

    # get a tracks oembed data
    track_url = 'http://soundcloud.com/forss/flickermood'
    embed_info = client.get('/oembed', url=track_url)

    # print the html for the player widget
    print embed_info['html']

    return render(request, 'rango/sc.html', {'embed' : embed_info})

Tags: 对象infocomclientidurlgetrequest
1条回答
网友
1楼 · 发布于 2024-05-23 23:11:52

查看soundcloudpythongithub repoResource对象的源代码,它们的文档似乎已经过时了。在

Resource定义了__getattr__方法,而不是__getitem__方法。这意味着您将不得不使用点表示法来访问您感兴趣的值,而不是切片表示法。正在更改:

print embed_info['html']

^{pr2}$

输出:

<iframe width="100%" height="400" scrolling="no" frameborder="no" 
src="https://w.soundcloud.com/player/?visual=true&url=https%3A%2F
%2Fapi.soundcloud.com%2Ftracks%2F293&show_artwork=true&
client_id=96e00f360883e6ef77c531acfc8ee4c3"></iframe>

我相信这就是你要找的。在

编辑

要嵌入一个集合而不是一个音轨,您只需调用client.get,并将url参数设置为相关播放列表的URL。要获取id为405726的播放列表的oembed数据:

def sc(request):
    client = soundcloud.Client(client_id='my_id')

    # get a playlist's oembed data
    playlist_url = "http://api.soundcloud.com/playlists/405726"
    embed_info = client.get('/oembed', url=playlist_url)

    # print the html for the player widget
    print embed_info.html

    return render(request, 'rango/sc.html', {'embed' : embed_info})

编辑2

关于获取任意轨迹集的嵌入的主题:

您可以使用ids端点上的ids查询参数在一个请求中查询多个不相关的磁道。它接受以逗号分隔的轨迹ID列表。用法:

$ curl "http://api.soundcloud.com/tracks?client_id=YOUR_CLIENT_ID&ids=13158665,6621631"

返回包含轨迹13158665和6621631的列表。在

不幸的是,a)不能直接使用带有client.get('/tracks', ids='13158665,6621631')或{}的客户机重新创建此请求,也不能仅仅通过将成功地curl作为client.get('/oembed', url=our_clever_url)的URL参数来重新创建此请求。在

至少,我们已经发现了一个局限性,幸运的是,我们总是可以在所提供的客户机之外测试我们是否可以做我们需要的。使用requests库,我们可以查询API本身,sans wrapper:

import requests

client_id='my-id'

track_ids = ["13158665", "6621631"]
tracks_url ='http://api.soundcloud.com/tracks'

payload = {'client_id': client_id, 'ids': ','.join(track_ids)}
response = requests.get(tracks_url, params=payload)
print response.status_code
print response.json()

因此,我们至少可以通过id在一个请求中手动检索任意一组轨迹

现在的问题是:/oembed端点是否会接受一个带有ids查询参数的URL并相应地作出响应?还需要测试一下,一会儿就会更新。在

编辑3

当我只需要一个单曲/播放列表(通过资源URL作为url查询参数传递)时,我能够让/oembed端点手动返回XML,而且以前我可以使用ids查询参数通过/tracks端点检索多个单独的曲目。不幸的是,/oembed端点不支持检索任意一组轨迹ID。你得试试别的办法。在

相关问题 更多 >