https://cleaning-toolbox.tistory.com/60
위의 게시글을 보고 OWNER 토큰을 이해하셨다면
이제는 카톡 알림을 받을 User의 토큰을 최초 한 번은 발급받아야합니다.
과정은 이렇게 됩니다.
User의 카카오 로그인 url 접속 -> 카카오 로그인 -> 권한 허용 -> code 발급 -> code를 이용하여 Token 생성
위의 사진처럼 카카오 디벨로퍼에서 요청한 권한들을 User에게서 받을 수 있고 요청할 수 있습니다.
저의 카카오 로그인 User 전용 URL은
https://kauth.kakao.com/oauth/authorize?client_id={REST API KEY}&redirect_uri={redirect uri}&response_type=code&scope=talk_message,friends
이며 redirecturi만 기존의 OWNER것과 다르게 만들었습니다.
OWNER는 OWNER만의 Token으로 체크해야할 사항들이 있기에 따로 경로를 만들어 두개가 충돌하지 않게끔했습니다.
위의 URL에서 User가 카카오 로그인을 하고 권한을 수락한 후 code를 받으면 아래의 함수가 작동합니다.
def kakao_to_friends_get_friendstokens(code):
url = 'https://kauth.kakao.com/oauth/token'
authorize_code = code
data = {
'grant_type':'authorization_code',
'client_id':************,
'redirect_uri':'http://3.35.252.82:5000/kakao_friend_code',
'code': authorize_code,
}
response = requests.post(url, data=data)
tokens = response.json()
with open("kakao_code_friends_friends.json","w") as fp:
json.dump(tokens, fp)
그후 토큰의 유효성을 체크합니다.
def kakao_friends_token():
with open("./kakao_code_friends_friends.json","r") as fp:
tokens = json.load(fp)
url="https://kapi.kakao.com/v1/user/access_token_info"
headers={"Authorization" : "Bearer " + tokens["access_token"]}
response = requests.get(url, headers=headers)
return response.text
이렇게 하면 User가 만약 OWNER의 카카오톡 친구라면 User의 정보를 OWNER가 불러들일 수 있습니다.
저는 아래와 같은 함수를 작성하였습니다.
def kakao_friends_update():
with open("kakao_code_friends_refresh.json","r") as fp:
tokens = json.load(fp)
friend_url = "https://kapi.kakao.com/v1/api/talk/friends"
headers={"Authorization" : "Bearer " + tokens["access_token"]}
result = json.loads(requests.get(friend_url, headers=headers).text)
friends_list = result.get("elements")
try:
for friend in friends_list:
func.update_item_one(mongo, {"uuid":str(friend['uuid'])}, {"$set": {"id":str(friend['id']), "name":str(friend['profile_nickname']), "image":str(friend['profile_thumbnail_image'])}}, "alarm", "kakao")
print("friends_update success")
except:
print('friends_update fail')
Refresh Token으로 OWNER의 친구목록을 불러들이고 거기서 필요한 부분들만 뽑아서 MongoDB에 업데이트 하였습니다.
위의 함수와 이전 게시글을 참조한다면 OWNER의 카카오톡 친구목록을 불러올 수 있습니다.
전부를 불러오는게 아닌 그 권한을 수락한 친구들의 정보만 추출가능하게 됩니다.
왜인지는 모르겠지만 가끔 친구들이 권한을 수락하였지만 조금 시간이 지난 후에야 친구목록에 나오는 경우도 있습니다.
이 부분을 주의하시면서 진행하시면 잘 될 것 같습니다.
'Python' 카테고리의 다른 글
파이썬-실습(10) 카카오톡 친구들에게 API로 메시지 보내기 (0) | 2021.12.17 |
---|---|
파이썬-실습(9) 가변적인 Url 파싱하기, 카카오 인가코드 파싱 (0) | 2021.12.17 |
파이썬-실습(7) 카카오 디벨로퍼 인가코드, OWNER 토큰 (0) | 2021.12.16 |
파이썬-실습(6) HTML 콤보박스 값을 HTML에 다시 반영하기 (0) | 2021.12.15 |
파이썬-실습(5) HTML에 Flask를 통해 데이터 값을 삽입 (2) | 2021.12.14 |