본문 바로가기
Python

[파이썬] 링크드인 linkedin API 키 발급

by 퍼포먼스마케팅코더 2022. 6. 22.
반응형

파이썬 링크드인 linkedin API 키 발급하는 방법은 하기와 같다. 특히 링크드인은 다른 API와는 다르게 발급받는게 조금 까다롭게 만들어졌다. 먼저 링크드인 별도 페이지를 개설해야되며, 이에 차근차근 파이썬 으로 어떻게 API로 어떻게 만드는지를 알아보도록 하자.

 

파이썬 링크드인 linkedin API 키 발급

먼저 아래와 같이 사이트에 들어간다. 

 

https://www.linkedin.com/developers/

 

LinkedIn Developer Solutions

Grow your brand and business with LinkedIn APIs

developer.linkedin.com

 

맨 먼저 앱을 만드는것은 이제 기본이다. 앱을 만들자.

파이썬 링크드인 linkedin API 키 발급

 

처음에는 앱 이름을 만들고, 이외 링크드인 페이지를 따로 만들어야된다. 처음이라는 어쩔수 없으니 링크드인 페이지를 만들도록 하자.

 

파이썬 링크드인 linkedin API 키 발급

해당 페이지를 클릭하면 링크드인 페이지 개설이 나온다. 회사로 클릭하자.

파이썬 링크드인 linkedin API 키 발급

 

이외 나는 다음과 같은 방식으로 작성되었다. 해당 원하는대로 작성하고 페이지 만들기를 최종 완료하면 된다. 

파이썬 링크드인 linkedin API 키 발급

 

그럼 다음과 같은 화면이 나오는데, 최종 확인한 이후에 동의합니다를 누르고 넘어간다. 

파이썬 링크드인 linkedin API 키 발급

 

 

그럼 다음과 같은 화면이 나오는데, 여기서 verify를 클릭해야된다. 

파이썬 링크드인 linkedin API 키 발급

 

 

 

해당 화면에서 generate URL 클릭 후 복사하고 브라우저에서 열자. 

파이썬 링크드인 linkedin API 키 발급

 

 

 

그럼 다음과 같은 화면이 나오는데, 마찬가지로 verify를 해서 넘어간다. 

파이썬 링크드인 linkedin API 키 발급

 

 

그럼 최종 완료되었다. 

파이썬 링크드인 linkedin API 키 발급

 

 

이제 마지막 페이지로 돌아가서 I'm done을 클릭하자.

파이썬 링크드인 linkedin API 키 발급

 

그럼 마지막으로 verified라고 나오고 완료되었다는 문구가 나올것이다. 

파이썬 링크드인 linkedin API 키 발급

 

이후에 Auth에 가보면 Client ID 와 Client Secret 키가 보일 것이다. 해당 내용을 토대로 이제 파이썬에서 돌릴것이니 잘 기록해두자.

 

파이썬 링크드인 linkedin API 키 발급

해당 내용을 credentials.json 파일을 통해 임의 폴더 디렉토리에 넣는다. 물론 하기의 내용과 함께 말이다.

 

{"client_id":"xxxxxxxxxxxxx",
"client_secret":"xxxxxxxxxxxxx",
"redirect_uri":"http://localhost:8888"}

 

제품으로 이동하여 "LinkedIn에서 공유", "LinkedIn으로 로그인" 및 "Marketing Developer Platform"에 대한 권한을 요청한다. 다만 마케팅 쪽은 권한이 제한적이라 파이썬으로 하는 API 기능이 다소 제한적일 수 있다는 부분이 있다.

 

 

파이썬 링크드인 linkedin API 키 발급

 

 

파이썬 링크드인 linkedin API access Token 발급

 

이제 아래 파이썬 코딩을 돌린다. 먼저 credentials json 파일의 경로만 수정해주고 돌려주면 최초 인증에 따른 허용하기 등이 나올 것이다. 다 허용하기로 눌러 넘어가면 된다. 

import json
import random
import requests
import string

def read_creds(filename):
    '''
    Store API credentials in a safe place.
    If you use Git, make sure to add the file to .gitignore
    '''
    with open(filename) as f:
        credentials = json.load(f)
    return credentials
 
creds = read_creds('C:/Users/user/raw/linkedin/credentials.json')  #json 파일주소
client_id, client_secret = creds['client_id'], creds['client_secret']
redirect_uri = creds['redirect_uri']

def create_CSRF_token():
    '''
    This function generates a random string of letters.
    It is not required by the Linkedin API to use a CSRF token.
    However, it is recommended to protect against cross-site request forgery
    '''
    letters = string.ascii_lowercase
    token = ''.join(random.choice(letters) for i in range(20))
    return token

api_url = 'https://www.linkedin.com/oauth/v2'
 
def authorize(api_url,client_id,client_secret,redirect_uri):
    '''
    Make a HTTP request to the authorization URL.
    It will open the authentication URL.
    Once authorized, it'll redirect to the redirect URI given.
    The page will look like an error. but it is not.
    You'll need to copy the redirected URL.
    '''
    # Request authentication URL
    csrf_token = create_CSRF_token()
    params = {
        'response_type': 'code',
        'client_id': client_id,
        'redirect_uri': redirect_uri,
        'state': csrf_token,
        'scope': 'r_liteprofile,r_emailaddress,w_member_social'
        }
 
    response = requests.get(f'{api_url}/authorization',params=params)
 
    print(f'''
    The Browser will open to ask you to authorize the credentials.\n
    Since we have not set up a server, you will get the error:\n
    This site can’t be reached. localhost refused to connect.\n
    This is normal.\n
    You need to copy the URL where you are being redirected to.\n
    ''')
 
    open_url(response.url)
 
    # Get the authorization verifier code from the callback url
    redirect_response = input('Paste the full redirect URL here:')
    auth_code = parse_redirect_uri(redirect_response)
    return auth_code

def open_url(url):
    '''
    Function to Open URL.
    Used to open the authorization link
    '''
    import webbrowser
    print(url)
    webbrowser.open(url)

    
def parse_redirect_uri(redirect_response):
    '''
    Parse redirect response into components.
    Extract the authorized token from the redirect uri.
    '''
    from urllib.parse import urlparse, parse_qs
 
    url = urlparse(redirect_response)
    url = parse_qs(url.query)
    return url['code'][0]

def save_token(filename,data):
    '''
    Write token to credentials file.
    '''
    data = json.dumps(data, indent = 4) 
    with open(filename, 'w') as f: 
        f.write(data)

        
def headers(access_token):
    '''
    Make the headers to attach to the API call.
    '''
    headers = {
    'Authorization': f'Bearer {access_token}',
    'cache-control': 'no-cache',
    'X-Restli-Protocol-Version': '2.0.0'
    }
    return headers

def auth(credentials):
    '''
    Run the Authentication.
    If the access token exists, it will use it to skip browser auth.
    If not, it will open the browser for you to authenticate.
    You will have to manually paste the redirect URI in the prompt.
    '''
    creds = read_creds(credentials)
    print(creds)
    client_id, client_secret = creds['client_id'], creds['client_secret']
    redirect_uri = creds['redirect_uri']
    api_url = 'https://www.linkedin.com/oauth/v2'
         
    if 'access_token' not in creds.keys(): 
        args = client_id,client_secret,redirect_uri
        auth_code = authorize(api_url,*args)
        access_token = refresh_token(auth_code,*args)
        creds.update({'access_token':access_token})
        save_token(credentials,creds)
    else: 
        access_token = creds['access_token']
    return access_token

if __name__ == '__main__':
    credentials = 'C:/Users/user/raw/linkedin/credentials.json'  #json 파일주소
    access_token = auth(credentials)

 

하기 URL을 치면 관련해서 허용할꺼냐는 내용이 나오는데, 전부다 허용해서 넘어가면 된다. 이후 최종적으로 파이썬 내부에 ?code = 변수 앞에 &state 사이에 액세스 토큰을 얻을 수 있다. 해당 토큰을 아까 credentials.json 파일 안에 넣으면 된다.

if __name__ == '__main__':
    credentials = 'C:/Users/user/raw/linkedin/credentials.json'  #json 파일주소
    access_token = auth(credentials)

 

access 토큰을 credentials.json 파일에 저장해두고 넘어가면 된다.

{"client_id":"xxxxxxxxxxxxxxx",
"client_secret":"xxxxxxxxxxxxxxx",
"redirect_uri":"http://localhost:8888",
"access_token":"xxxxxxxxxxxxxxx"}

 

 

이후 이전에 말한 해당 인증 내용은 따로 파이썬 ln_oauth.py 파일로 저장해둔다. 다만 인증까지는 되나, 기타 get 및 post 등의 API 사용시엔 먹히질 않는 경우가 발생하고, 에러가 뜬다. 이는 보안사항으로 중점적으로 파헤쳐야될 것 같다.

 

 

반응형

댓글