Skip to content

Instantly share code, notes, and snippets.

@stephenmcd
Created December 7, 2013 21:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stephenmcd/7849005 to your computer and use it in GitHub Desktop.
Save stephenmcd/7849005 to your computer and use it in GitHub Desktop.
Convert linkedin profile viewers to RSS.
import cgi
import getpass
import mechanize
import json
import SimpleHTTPServer
import SocketServer
import uuid
_entries = []
_pass = getpass.getpass()
def entries():
global _entries
viewers = viewers_json(viewers_html())
headlines = [cgi.escape(viewer_headline(viewer)) for viewer in viewers]
current = [e["title"] for e in _entries]
for headline in reversed(headlines):
if headline not in current:
entry = {"title": headline, "guid": str(uuid.uuid4())}
_entries.insert(0, entry)
_entries = _entries[:5]
return _entries
def viewers_html():
br = mechanize.Browser()
br.set_handle_robots(False)
br.open("http://www.linkedin.com")
br.select_form(name="login")
br["session_key"] = "steve@jupo.org"
br["session_password"] = _pass
br.submit()
return br.open("http://www.linkedin.com/wvmx/profile").read()
def viewers_json(html):
start = '{"content'
data = start + html.split(start, 1)[1].split("--></code>", 1)[0]
parts = data.split(",")
u = ":\u"
for i, part in enumerate(parts):
if u in part:
parts[i] = part.split(u, 1)[0] + ':""'
data = json.loads(",".join(parts))
return data["content"]["Base"]["wvmx_mirror_viewers"]["WVMXViewers"]
def viewer_headline(viewer):
name = viewer["fmt__full_name"]
location = viewer["fmt__location"]
try:
return "%s, %s, %s" % (name, viewer["headline"], location)
except KeyError:
return viewer.get("obfuscationString", "Anonymous")
class RequestHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header("Content-type", "text/xml")
self.end_headers()
self.wfile.write("<feed xmlns=\"http://www.w3.org/2005/Atom\">")
self.wfile.write("<title>LinkedIn Profile Viewers</title>")
for entry in entries():
s = "<entry><title>%(title)s</title><guid>%(guid)s</guid></entry>"
self.wfile.write(s % entry)
self.wfile.write("</feed>")
return
server = SocketServer.TCPServer(("127.0.0.1", 7050), RequestHandler)
server.serve_forever()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment