2013-03-24 2 views
0

저는 Python에 익숙하지 않습니다. 최근에 필요한 URL 서명을 시작한 API를 사용하고 있습니다. 나는 PHP에서 다음과 같이 URL에 서명 할이 코드를 권고했다 :URL을 PHP에서 Python으로 로그인

function signUrl($url, $post = null) 
{ 
if ($post !== null) { ksort($post); } 
return md5(YourSecretApiKey . $url . ($post === null ? '' : implode(',', $post))); 
} 

어떻게 이것을 파이썬에서 할 수 있습니까?

import wykop 

appkey = 'KEY' 
secretkey = 'KEYa' 

api = wykop.WykopAPI(appkey) 
profile = api.get_profile("m__b") 
print api.get_profile("m__b") 

그리고 오류 얻을 :

여기
wykop.InvalidAPISignError 
+0

당신이 훼방 할 수 PHP 코드의 일부의 파이썬 버전을 내 파이썬 코드의

API 작성자가 명확한 사양을 제공합니까? 이는 해시 서명을 만드는 방법을 지정하는 멋진 방법입니다.이 서명은 모호한 w/r/t 인코딩입니다. (즉, PHP *는 사용 된 모든 함수에 대한 문서를 가지고 있지만 읽지 않고 적어도 알고리즘을 다시 구현하려고 시도한 것 같습니다.) – millimoose

+0

게시 한 PHP 코드는 실제로 API 작성자 나를 보내라. 나는 계속 보게 될 것이다. – user2015906

+0

예, 그들이 보낸 것은 반 중얼 거림이지만, SO는 코드 포팅 서비스가 아니다. 'wykop' 모듈이 구현되었지만 서명 메커니즘을 포함시켜야합니다. 그것이 당신의 모듈이 아니라면, 그것의 메인테이너들을 괴롭 히십시오. – millimoose

답변

0

import hashlib 
# Ready for md5 

def signUrl(url, post=None): 

    # Set default. Empty for not provided 
    post_string = '' 

    if post is not None: 

    # Dictionary in Python does not maintain order 
    # Sort it manually with a for loop instead 
    post = [post[k] for k in sorted(post.keys())] 

    post_string = ','.join(post) 
    # PHP implode 

    return hashlib.md5(YourSecretApiKey + url + post_string).hexdigest() 
관련 문제