Monday, November 08, 2010 at 12:01 AM.
system.verbs.apps.twitter.getFriends
on getFriends (adrfriends, username=nil, password=nil, friendsurl=nil, flfollowers = false) { twitter.init (); bundle { //set defaults if username == nil { username = user.twitter.prefs.username}; if password == nil { password = string (user.twitter.prefs.password)}; if friendsurl == nil { if flfollowers { friendsurl = user.twitter.prefs.followersurl} else { friendsurl = user.twitter.prefs.friendsurl}}}; local (urllist = string.urlsplit (friendsurl)); try { local (tc = clock.ticks (), timeoutticks = 60 * user.twitter.prefs.timeOutSecs); local (s = string.httpResultSplit (tcp.httpClient (server:urllist [2], path:urllist [3], username:username, password:password, method:"GET", timeoutticks:timeoutticks, flMessages:false))); <<scratchpad.xmltext = s <<local (s = scratchpad.xmltext) user.twitter.stats.whenLastGet = clock.now (); user.twitter.stats.ctGets++; user.twitter.stats.ctSecsLastGet = double (clock.ticks () - tc) / 60; bundle { //extract data from the xml in adrfriends^ local (xstruct, adruser); xml.compile (s, @xstruct); new (tabletype, adrfriends); local (adrusers = xml.getaddress (@xstruct, "users")); for adruser in adrusers { if nameof (adruser^) contains "user" { local (screenname = xml.getvalue (adruser, "screen_name")); local (adrsub = @adrfriends^.[screenname]); new (tabletype, adrsub); adrsub^.id = xml.getvalue (adruser, "id"); adrsub^.name = xml.getvalue (adruser, "name"); adrsub^.location = xml.getvalue (adruser, "location"); adrsub^.description = xml.getvalue (adruser, "description"); adrsub^.profileImageUrl = xml.getvalue (adruser, "profile_image_url"); adrsub^.url = xml.getvalue (adruser, "url"); try { local (adrstatus = xml.getaddress (adruser, "status")); adrsub^.statusCreatedAt = xml.getvalue (adrstatus, "created_at"); adrsub^.statusId = xml.getvalue (adrstatus, "id"); adrsub^.statusText = xml.getvalue (adrstatus, "text"); adrsub^.statusRelativeCreatedAt = xml.getvalue (adrstatus, "relative_created_at")} else { adrsub^.statusCreatedAt = date (0); adrsub^.statusId = 0; adrsub^.statusText = ""; adrsub^.statusRelativeCreatedAt = ""}}}}; user.twitter.stats.lastGetError = ""; return (true)} else { user.twitter.stats.lastGetError = tryerror; return (false)}}; bundle { //test code getfriends (@scratchpad.twitterFriends, flfollowers:true)}
This listing is for code that runs in the OPML Editor environment. I created these listings because I wanted the search engines to index it, so that when I want to look up something in my codebase I don't have to use the much slower search functionality in my object database. Dave Winer.