Created
December 7, 2013 21:28
-
-
Save stephenmcd/7849005 to your computer and use it in GitHub Desktop.
Convert linkedin profile viewers to RSS.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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"] = "[email protected]" | |
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