py-hanspell icon indicating copy to clipboard operation
py-hanspell copied to clipboard

오늘 새로운 passportKey 라는 파라미터가 추가되면서 동작하지 않는것 같습니다.

Open soulduse opened this issue 2 years ago • 6 comments
trafficstars

image

오늘 갑자기 맞춤법 검사가 안되서 확인해보니 passportKey라는게 추가되었습니다. 이거 값이 계속해서 바뀌는거면 더이상 라이브러리가 사용이 어려울수도 있을것 같아요 일단 몇시간 지켜봤는데 고정되어있긴합니다. 그런데 시간단위일지, 아니면 일단위 일지 모르겠지만 저 값이 빠지거나 내부적으로 변경되면 사용못할것 같아요 어떻게 해결해 볼 수 있을까요?

URL 예시

https://m.search.naver.com/p/csearch/ocontent/util/SpellerProxy?passportKey=553f46b15389bd8738bc4bcdce6fc217766831c7&callback=jQuery112408824280372691444_1695341199690&q=%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%98%81&where=nexearch&color_blindness=0&=1695341199696

soulduse avatar Sep 22 '23 03:09 soulduse

조만간 fix 올리겠습니다.

ssut avatar Sep 22 '23 05:09 ssut

오류가 떠서 이유를 찾다보니.. base_url 변수의 주소에서 "유효한 키값이 아닙니다"라고 return하는 것같아요

Mr-taek avatar Sep 22 '23 11:09 Mr-taek

@Mr-taek 넵 맞습니다. 새로운 파라미터(passportKey)가 추가 되었는데 이 값이 없으면 동작하지 않습니다.

soulduse avatar Sep 22 '23 12:09 soulduse

이 패키지를 사용해서 알프레드 워크플로우를 만들어 배포했었었는데 임시 조치로 passportKey 발급받아 사용하는 것으로 해결했습니다. (완벽한 해결책은 아닙니다)

그때그때 토큰을 받아오는 것은 네이버에 너무 자주 요청을 보내게 되어 토큰을 저장해 사용하였습니다. 구체적으로는 다음과 같은 방식을 택했습니다.

  1. passportKey가 주어지면 해당 값 사용
  2. passportKey가 없고 token.txt에 값이 있으면 사용
  3. 문제가 생기면 새로 passportKey를 발급받아 token.txt 에 저장하고 사용
def read_token():
    with open("token.txt", "r") as f:
        TOKEN = f.read()
    return TOKEN

def update_token(agent):
    """update passportkey
    from https://gist.github.com/AcrylicShrimp/4c94db38b7d2c4dd2e832a7d53654e42
    """

    html = agent.get(url='https://search.naver.com/search.naver?where=nexearch&sm=top_hty&fbm=1&ie=utf8&query=맞춤법검사기') 

    match = re.search('passportKey=([a-zA-Z0-9]+)', html.text)
    if match is not None:
        TOKEN = parse.unquote(match.group(1))
        with open("token.txt", "w") as f:
            f.write(TOKEN)
    return TOKEN

전체 커밋은 https://github.com/kw-lee/alfhanspell/commit/5826618ce4de9009b00aa33a718a8002b452e3a4 에서 확인하실 수 있습니다.

민감한 정보가 아니라 로컬에 저장해도 문제가 없어 임시로 텍스트파일에 저장하는 식으로 구현하였는데, 패키지에서 구현하려면 임시 파일(tmpfile)이나 쿠키를 사용해서 토큰을 저장 및 불러오는 방식을 고려해보시면 어떨까합니다.

kw-lee avatar Sep 23 '23 13:09 kw-lee

현재 며칠 살펴보니 하루에 한번 바뀌는것 같아요 아마도 자정이 넘어가는때 쯤인것 같습니다.

soulduse avatar Sep 23 '23 22:09 soulduse

@kw-lee 괜찮은 아이디어 인것 같네요!

soulduse avatar Sep 23 '23 22:09 soulduse