View All Posts. MiCHiLU.com powered by Django ;-)

[Python]: hatena.api.auth

見つからなかったので書きました。 Google code に python-hatena-api を登録。 http://python-hatena-api.googlecode.com/svn/trunk/hatena/api/auth.py

http://search.cpan.org/src/NAOYA/Hatena-API-Auth-0.05/t/01-methods.t を参考に、 api_sig と uri_to_login まで。

import md5


class Auth(object):
    host = "auth.hatena.ne.jp"
    path = "auth"
    schema = "http"

    def __init__(self, api_key, secret):
        self.api_key = api_key
        self.secret = secret

    def api_sig(self, api_key=None, **kwargv):
        api_key = api_key or self.api_key

        sig_dict = dict(
            api_key = api_key,
        )
        sig_dict.update(**kwargv)
        sig_keys = sig_dict.keys()
        sig_keys.sort()

        sig_list = list()
        for key in sig_keys:
            sig_list.extend((
                key,
                sig_dict[key],
            ))
        sig_string = "".join(sig_list)

        m = md5.new()
        m.update("%s%s" % (
            self.secret,
            sig_string,
        ))
        return m.hexdigest()

    def uri_to_login(self, **kwargv):
        query = dict(
            api_key = self.api_key,
            api_sig = self.api_sig(**kwargv),
            secret = self.secret,
        )
        query.update(**kwargv)
        query_string = "&".join(["%s=%s" % (key, value)
            for key, value in query.items()])
        return "%s://%s/%s?%s" % \
            (self.schema, self.host, self.path, query_string)
Fri, 9 Nov 2007 03:35:22 +0900 source edit
Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 2.1 Japan License.
View All Posts. MiCHiLU.com powered by Django ;-)