2013-03-24 3 views
0

Я очень новичок в Python, и я работаю с API, который недавно начал требовать подписку на URL. Мне сообщили, что в PHP это код, который будет подписывать URL выглядеть следующим образом:Url подписание с PHP на Python

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

Как это сделать в Python?

Вот мой код Python:

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

Можете ли вы докучать авторы API, чтобы дать вам более четкую спецификацию? Это проницательный способ указать, как сделать хеш-подпись, это двусмысленная кодировка w/r/t для одного. (Тем не менее, у PHP * есть * есть документация для всех используемых функций, кажется, что вы даже не прочитали их и, по крайней мере, попытаетесь перекомпилировать алгоритм.) – millimoose

+0

Код PHP, который я опубликовал, на самом деле является тем, что авторы API пришлите мне ... Я буду продолжать смотреть – user2015906

+0

Да, и то, что они вам отправили, является полуразрушенным, но SO не является сервисом портирования кода. Вам нужно будет включить механизм подписания, однако модуль 'wykop' будет реализован. Если это не ваш модуль, обратитесь к ним. – millimoose

ответ

0

Вот версия Python той части PHP кода

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() 
Смежные вопросы