2010-04-13 10 views
5

Ich muss last.fm für Benutzer (Universität Übung) crawlen. Ich bin neu in Python und erhalten Fehler folgende:TypeError: erzwingt Unicode: brauche String oder Puffer, Benutzer gefunden

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 

i verwenden, um die pylast lib für das Crawling. Was ich tun möchte:

Ich möchte einen Benutzer Freunde und die Freunde der Benutzer Freunde zu bekommen. der Fehler tritt auf, wenn ich eine for-Schleife in einer anderen for-Schleife habe. Hier ist der Code:

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 

ein Hinweis?

Dank im Voraus. Grüße!

Antwort

6

Es sieht aus wie get_friends wird eine Liste von User Objekte zurückgeben, so dass Sie get_user auf seinen Einträgen nicht aufrufen müssen. Verwenden Sie einfach:

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

vielen Dank. gelöst! :) – tronic

Verwandte Themen