我正在尝试对soundcloud进行实验,但是当我使用API教程中的代码时,我得到了以下错误:'Resource‘对象没有属性'__getitem__'
我不明白为什么嵌入信息‘’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})
发布于 2015-09-06 16:35:00
查看soundcloud中Resource
对象的源代码,它们的文档似乎已经过时了。
Resource
定义__getattr__
方法,但不定义__getitem__
方法。这意味着您必须使用点表示法来访问您感兴趣的值,而不是片表示法。改变:
print embed_info['html']
至
print embed_info.html
产出:
<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 oembed
获取播放列表的405726
数据
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
端点上的/tracks
查询参数在单个请求中查询多个不相关的轨道。它接受一个逗号分隔的轨道ids列表。用法:
$ curl "http://api.soundcloud.com/tracks?client_id=YOUR_CLIENT_ID&ids=13158665,6621631"
返回包含轨道13158665和6621631的列表。
不幸的是,这个请求不能使用client.get('/tracks', ids='13158665,6621631')
或client.get('/tracks?ids=13158665,6621631')
直接使用客户端重新创建,或者仅仅通过将我们成功地将curl
编辑的URL作为url参数传递给client.get('/oembed', url=our_clever_url)
来重新创建。
至少,我们已经发现了一个限制,幸运的是,我们总是可以在提供的客户端之外下降来测试我们是否可以做我们需要做的事情。使用请求库,我们可以查询API本身,sans包装器:
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
查询参数的ids
并相应地做出响应吗?还需要测试一下,一会儿再更新。
编辑3
当我只想要一个单一的轨道/播放列表(通过资源URL作为url
查询参数传递)时,我能够让url
端点手动返回ids
,而且以前我已经能够使用ids
查询参数通过/tracks
端点检索多个单独的曲目。不幸的是,/oembed
端点不支持检索任意一组跟踪ids。你得试试别的办法。
https://stackoverflow.com/questions/32429594
复制相似问题