I am trying to write a simple GUI for Plurk using pyplurk.
I successfully received it to create an API connection, log in and get and display a list of friends. Now I'm trying to get and display a list of Plurks.
pyplurk provides the GetNewPlurks function as follows:
def GetNewPlurks(self, since): '''Get new plurks since the specified time. Args: since: [datetime.datetime] the timestamp criterion. Returns: A PlurkPostList object or None. ''' offset = jsonizer.conv_datetime(since) status_code, result = self._CallAPI('/Polling/getPlurks', offset=offset) return None if status_code != 200 else \ PlurkPostList(result['plurks'], result['plurk_users'].values())
As you can see, this returns a PlurkPostList, which in turn is defined as follows:
class PlurkPostList: '''A list of plurks and the set of users that posted them.''' def __init__(self, plurk_json_list, user_json_list=[]): self._plurks = [PlurkPost(p) for p in plurk_json_list] self._users = [PlurkUser(u) for u in user_json_list] def __iter__(self): return self._plurks def GetUsers(self): return self._users def __eq__(self, other): if other.__class__ != PlurkPostList: return False if self._plurks != other._plurks: return False if self._users != other._users: return False return True
Now I expected that I could do something like this:
api = plurk_api_urllib2.PlurkAPI(open('api.key').read().strip(), debug_level=1) plurkproxy = PlurkProxy(api, json.loads) user = plurkproxy.Login('my_user', 'my_pass') ps = plurkproxy.GetNewPlurks(datetime.datetime(2009, 12, 12, 0, 0, 0)) print ps for p in ps: print str(p)
When I run this, I get the following:
<plurk.PlurkPostList instance at 0x01E8D738>
from "print ps", then:
for p in ps: TypeError: __iter__ returned non-iterator of type 'list'
I donβt understand - for sure the list is repeated? Where am I mistaken - how do I access Plurks in a PlurkPostList?