Skip to content

Instantly share code, notes, and snippets.

@UndeRus
Created March 16, 2012 20:02
Show Gist options
  • Save UndeRus/2052276 to your computer and use it in GitHub Desktop.
Save UndeRus/2052276 to your computer and use it in GitHub Desktop.
Juick subscription graph in csv
#!/usr/bin/python
# -*- coding: utf-8 -*-
from lxml.html import parse
from urllib2 import urlopen
import os
import time
import sys
JUICK_URL = "http://juick.com/"
processed = set()
errored = set()
tasks = []
class User(object):
def __init__(self, nick):
assert isinstance(nick, basestring)
self.nick = nick
def get_friends(self):
friends = []
try:
tree = parse(os.path.join(JUICK_URL, self.nick, "friends"))
friends = [i.text_content() for i in tree.xpath("id('content')/p/a")]
except IOError:
# print "Пользователя %s не существует" % self.nick
errored.add(self.nick)
return friends
def get_readers(self):
readers = []
try:
tree = parse(os.path.join(JUICK_URL, self.nick, "readers"))
readers = [i.text_content() for i in tree.xpath("id('content')/p/a")]
except IOError:
#print "Пользователя %s не существует" % self.nick
errored.add(self.nick)
return readers
def process_user(name):
user = User(name)
readers = user.get_readers()
friends = user.get_friends()
for reader in readers:
try:
if (reader not in tasks) and (reader not in processed):
tasks.append(reader)
print reader + "," + name
except:
pass
for friend in friends :
try:
if (friend not in tasks) and (friend not in processed):
tasks.append(friend)
print name + "," + friend
except:
pass
processed.add(name)
def main(username):
process_user(username)
for user in tasks:
time.sleep(2)
process_user(user)
if __name__ == "__main__":
if len(sys.argv) != 2:
print "Usage: %s JUICK_NICK" % sys.argv[0]
return 1
nick = sys.argv[1]
main(nick)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment