【问题标题】:Python - oauth2 - linkedin APIPython - oauth2 -linkedin API
【发布时间】:2014-10-25 03:53:35
【问题描述】:

我正在尝试通过 python 代码关注一些在 LinkedIn 上注册的公司,根据 LinkedIn API documentation 我需要使用 oauth2 - POST 方法来关注一家公司。

我的查询如下:

  1. 如何通过python代码指定特定公司名称来关注公司?
  2. 有人可以为此提供 python 代码吗?

我的代码如下:

oauth_token    = oauth.Token(key=access_token_key, secret=access_token_secret)
oauth_consumer = oauth.Consumer(key=api_key, secret=api_secret)
signature_method_hmac_sha1 = oauth.SignatureMethod_HMAC_SHA1()
http_method    = "POST"
http_handler   = urllib.HTTPHandler(debuglevel=_debug)
https_handler  = urllib.HTTPSHandler(debuglevel=_debug)

def linkedinreq(url, method, parameters):
          req = oauth.Request.from_consumer_and_token(oauth_consumer,
                                            token=oauth_token,
                                            http_method=http_method,
                                            http_url=url, 
                                            parameters=parameters)

          req.sign_request(signature_method_hmac_sha1, oauth_consumer, oauth_token)
          req.to_postdata()

def fetchsamples():
          url = "https://api.linkedin.com/v1/people/~/following/companies"

          parameters = []
          response = linkedinreq(url, "POST", parameters)

fetchsamples()

【问题讨论】:

    标签: python oauth linkedin


    【解决方案1】:

    不要重新发明轮子,而是使用 python-linkedin 包装器。

    搜索公司的示例代码:

    from linkedin import linkedin
    
    CONSUMER_KEY = 'your key'
    CONSUMER_SECRET = 'your secret'
    USER_TOKEN = 'your token'
    USER_SECRET = 'your user secret'
    RETURN_URL = ''
    
    # Instantiate the developer authentication class
    authentication = linkedin.LinkedInDeveloperAuthentication(CONSUMER_KEY, CONSUMER_SECRET,
                                                              USER_TOKEN, USER_SECRET, 
                                                              RETURN_URL, linkedin.PERMISSIONS.enums.values())
    
    # Pass it in to the app...
    application = linkedin.LinkedInApplication(authentication)
    
    print application.search_company(selectors=[{'companies': ['name', 'universal-name', 'website-url']}],
                                     params={'keywords': 'apple microsoft'})
    

    要关注公司,请使用follow_company()方法,查看更多信息和示例here

    COMPANY_ID = 1035  # this you would get from the `search_company()`
    application.follow_company(COMPANY_ID)
    

    【讨论】:

    • 感谢您的回复。我遇到了这个链接并使用了它。但是,我想知道 oauth2 中的 POST。我找不到很好的教程来理解这一点。
    【解决方案2】:

    python 模块 python-linkedinpython-linkedin-v2 已过时。因此,我建议您改用requests_oauthlib 模块。

    from requests_oauthlib import OAuth2Session
    from requests_oauthlib.compliance_fixes import linkedin_compliance_fix
    
    # In case the `redirect_url` does not implement https     
    import os                                                   
    os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' 
    
    # Credentials you get from registering a new application
    client_id = '<the client id you get from linkedin>'
    client_secret = '<the client secret you get from linkedin>'
    redirect_url = '<authorized redirect URL from LinkedIn config>'
    
    # OAuth endpoints given in the LinkedIn API documentation (check for updates)
    authorization_base_url = 'https://www.linkedin.com/oauth/v2/authorization'
    token_url = 'https://www.linkedin.com/oauth/v2/accessToken'
    
    # Authorized Redirect URL (from LinkedIn config)
    linkedin = OAuth2Session(client_id, redirect_uri=redirect_url)
    linkedin = linkedin_compliance_fix(linkedin)
    
    # Redirect user to LinkedIn for authorization
    authorization_url, state = linkedin.authorization_url(authorization_base_url)
    print('Please go here and authorize,', authorization_url)
    
    # Get the authorization verifier code from the callback url
    redirect_response = input('Paste the full redirect URL here:')
    
    # Fetch the access token
    linkedin.fetch_token(token_url, client_secret=client_secret,
                         authorization_response=redirect_response)
    
    # Fetch a protected resource, i.e. user profile
    r = linkedin.get('https://api.linkedin.com/v1/people/~')
    print(r.content)
    

    【讨论】:

    • 从哪里以及如何获取 client_id 和 client_secret?假设我是否想通过这种道德程序练习获取我自己的 LinkedIn 帐户信息?
    • 我会将以下内容添加到授权 URL:authorization_url += "&scope=r_liteprofile"
    • 但是我需要做些什么来自动传递redirect_response而无需手动输入作为输入?
    猜你喜欢
    • 2013-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 1970-01-01
    相关资源
    最近更新 更多