2010-04-13 27 views
5

tôi phải thu thập thông tin last.fm cho người dùng (bài tập đại học). Tôi mới dùng python và gặp phải lỗi sau:LoạiError: liên kết với Unicode: cần chuỗi hoặc bộ đệm, Người dùng tìm thấy

Traceback (most recent call last): 
    File "crawler.py", line 23, in <module> 
    for f in user_.get_friends(limit='200'): 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pylast.py", line 2717, in get_friends 
    for node in _collect_nodes(limit, self, "user.getFriends", False): 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pylast.py", line 3409, in _collect_nodes 
    doc = sender._request(method_name, cacheable, params) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pylast.py", line 969, in _request 
    return _Request(self.network, method_name, params).execute(cacheable) 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pylast.py", line 721, in __init__ 
    self.sign_it() 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pylast.py", line 727, in sign_it 
    self.params['api_sig'] = self._get_signature() 
    File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/pylast.py", line 740, in _get_signature 
    string += self.params[name] 
TypeError: coercing to Unicode: need string or buffer, User found 

tôi sử dụng lib pylast để thu thập thông tin. những gì tôi muốn làm:

tôi muốn có được bạn bè của người dùng và bạn bè của bạn bè của người dùng. lỗi xảy ra, khi tôi có vòng lặp for trong vòng lặp khác cho vòng lặp. đây là mã:

network = pylast.get_lastfm_network(api_key = API_KEY, api_secret = API_SECRET, username = username, password_hash = password_hash) 
user = network.get_user("vidarnelson") 

friends = user.get_friends(limit='200') 

i = 1 

for friend in friends: 
user_ = network.get_user(friend) 
print '#%d %s' % (i, friend) 
i = i + 1 

for f in user_.get_friends(limit='200'): 
    print f 

lời khuyên nào?

cảm ơn trước. Trân trọng!

Trả lời

6

Có vẻ như get_friends sẽ trả về danh sách các đối tượng User, vì vậy bạn không cần phải gọi số get_user trên các mục nhập của nó. Chỉ cần sử dụng:

for friend in friends: 
    for f in friend.get_friends(limit='200'): 
     ... 
+0

cảm ơn bạn rất nhiều. đã được giải quyết! :) – tronic

Các vấn đề liên quan