Having used Udi's additions to Web2py to get basic authentication using LinkedIn working I'd like to interact with the LinkedIn API.
I can get to this functonality using linkedin.py (by Ozgur Vatansever) in a controller using "auth.settings.login_form.session.linkedin" e.g., auth.settings.login_form.session.linkedin.get_search(...) this "auth.settings.login_form.session.linkedin" feels rather brittle. Is it? Is a better way to access the function get_search() ? On Wednesday, 15 August 2012 17:05:58 UTC+1, Massimo Di Pierro wrote: > > or to > > redirect(URL('user', args='login')) > > or to > > redirect(URL('user/ogin')) > > > On Wednesday, 15 August 2012 08:57:20 UTC-5, Carl wrote: >> >> Found this code very useful! Udi's time has saved me so much time. >> >> One minor change I made was to user() function in default.py. >> The redirect() calls parameters: >> >> change >> redirect(URL('user', 'login')) >> to >> redirect(URL(f='user', args=['login',])) >> >> >> >> >> On Wednesday, 4 April 2012 06:49:46 UTC+1, Udi Milo wrote: >>> >>> It took a while to figure out, but this is my version on how to use >>> linkedIn in web2py, >>> comments are much appreciated. (its very detailed and intended for >>> people that are just starting out like me) >>> >>> Enjoy! >>> >>> first thing, go to linkedIn.com and get your key and secret. >>> after getting it: >>> >>> *1. add linkedIn.py and model.py to Modules from the python-linkedin lib >>> * >>> *2. add the linkedinAccount.py to modules. modify it to look like:* >>> >>> from gluon.http import HTTP >>> try: >>> import linkedin >>> except ImportError: >>> raise HTTP(400,"linkedin module not found") >>> >>> class LinkedInAccount(object): >>> def __init__(self,request,session,key,secret,return_url): >>> self.request = request >>> self.session = session >>> >>> if self.session.linkedin is None: >>> self.session.verified = False >>> self.session.linkedin = >>> linkedin.LinkedIn(key,secret,return_url, gae=True) >>> self.session.linkedin.request_token() >>> >>> def verify(self, verifier): >>> self.session.verified = verifier and >>> self.session.linkedin.access_token(verifier = verifier) >>> return self.session.verified >>> >>> def login_url(self, next="/"): >>> return self.session.linkedin.get_authorize_url() >>> >>> def logout_url(self, next="/"): >>> self.session.linkedin = None >>> return next >>> >>> def get_user(self): >>> if self.session.verified: >>> profile = self.session.linkedin.get_profile(fields=['id', >>> 'first-name', 'last-name','picture-url','industry']) >>> return dict(first_name = profile.first_name, >>> last_name = profile.last_name, >>> picture_url = profile.picture_url, >>> industry = profile.industry, >>> username = profile.id) >>> >>> *3. add the following to your dal.py* >>> >>> ## LinkedIn >>> >>> auth.settings.actions_disabled=['register','change_password','request_reset_password','retrieve_username'] >>> from linkedinAccount import LinkedInAccount >>> auth.settings.login_form=LinkedInAccount( >>> request, >>> session, >>> KEY, >>> SECRET, >>> 'http://' + request.env.http_host + '/user/verify') >>> >>> and just above "auth.define_tables()" add this: >>> >>> ## create custom field 'username' for linkedin authentication >>> auth.settings.extra_fields['auth_user']= [ >>> Field('username', writable=False, readable=False), >>> Field('picture_url', writable=False, readable=False), >>> Field('industry', writable=False, readable=False), >>> ] >>> >>> *4. add the following to your default.py, the user function (clear is a >>> debug tool, in case your session expires or you play with it and you need >>> to remove it)* >>> >>> def user(): >>> if len(request.args)>0 and request.args(0)=='verify': >>> auth.settings.login_form.verify(request.vars.oauth_verifier) >>> redirect(URL('user', 'login')) >>> >>> if request.args(0)=='clear': >>> session.linkedin = None >>> return 'clean' >>> >>> >>> --