python微信公衆番号access_tokenの取得


  redis  access_token,      1  (   access_token               ,  time.time()             access_token    (2  ),       ,     )
#-*- coding: utf-8 -*-
# filename: basic.py
import urllib
import time
import json
import httplib
from django.core.cache import cache

logger = LOGHandler.getlogger()
class Basic:  
    def __init__(self):
        self.__accessToken = ''
        self.__leftTime = 0
    def __real_get_access_token(self):#      access_token
        try:
            logger.debug('    access')
            appId = 'your appid'
            appSecret = 'your appSecret'
            postUrl = ("http://api.weixin.qq.com/cgi-bin/token?grant_type="
            "client_credential&appid=%s&secret=%s" % (appId, appSecret))
            logger.debug(postUrl)
            urlResp = urllib.urlopen(postUrl).read()
            logger.debug(urlResp)
            urlResp = json.loads(urlResp)
            logger.debug(urlResp['access_token'])
            self.__accessToken = urlResp['access_token']
            self.__leftTime = urlResp['expires_in']
            logger.debug('  access_token')
        except Exception, e:
            logger.debug(e.message)
    def get_access_token(self):
        if self.__leftTime < 10:
            try:
                if cache.has_key('access_token'):
                    self.__accessToken = cache.get('access_token')
                    logger.debug(self.__accessToken)
                else:
                    self.__real_get_access_token()
                    cache.set('access_token', self.__accessToken, 60 * 60)
                    logger.debug(self.__accessToken)
            except Exception,e:
                logger.debug(e)
        return self.__accessToken
    def run(self):
        while(True):
            if self.__leftTime > 10:
                time.sleep(2)
                self.__leftTime -= 2
            else:
                self.__real_get_access_token()


#     
bc = Basic()
accessToken = bc.get_access_token()
logger.debug(accessToken)