`
phyeas
  • 浏览: 164698 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

Python获取JE用户头像

阅读更多

根据JE API说的内容,每个闲聊都附带用户信息,其中包括用户头像,这些logo不是保存在本地的,所以就需要从JE上获取,然后保存至本地,以下方法就加在core.py(http://phyeas.iteye.com/blog/352518 )中

    def getLogo(self, path=None, user=None, remote=False, localForld=APP_LOCAL_LOGO_FORLD_PATH):
        '''获取用户头像(此方法会将头像保存至本地,下次获取将获取本地图像)
        @param path:用户头像路径(服务器路径)
        @param user:用户
        @param remote: 是否从远程读取
        @param localForld: 本地存储路径 默认:config.APP_LOCAL_LOGO_FORLD_PATH
        @see: config.APP_LOCAL_LOGO_FORLD_PATH
        @return: 存储在本地的路径(str)
        '''
        if not path and not user:
            return None
        if not path and "logo" in user:
            path = user["logo"]
        localpath = self.getLocalLogoPath(path, localForld)
        
        if localpath and not remote:
            print "logo has exists in local!"
            return localpath
        request = Request(JE_URL + path)
        f = sendRequest(request)
        data = f["data"]
        #data=None
        return self.saveLogo(path, data, localForld)
            
    def saveLogo(self, path, data, localForld=APP_LOCAL_LOGO_FORLD_PATH):
        '''将头像保存至本地,生成本地序列号(文件名)
        @param path:服务器上的路径
        @param data:从服务器获取到的头像数据
        @param localForld:本地文件夹路径
        '''
        c = self.codeGenerator.generate()
        p = localForld + "/" + c
        f = open(p, "w")
        f2 = open(APP_LOCAL_LOGO_KEYS_FILE_PATH, "w")
        try:
            f.write(data)
            self.logos[path] = c
            f2.write(repr(self.logos))
        finally:
            if f:f.close()
            if f2:f2.close()
            self.codeGenerator.saveLast()
        return path
    
    def getLocalLogoPath(self, path, localForld=APP_LOCAL_LOGO_FORLD_PATH):
        '''获取服务器logo映射到本地logo的路径
        @param path:服务器路径
        @param localForld:本地存放logo文件夹
        '''
        if os.path.exists(APP_LOCAL_LOGO_KEYS_FILE_PATH):
            keysFile = open(APP_LOCAL_LOGO_KEYS_FILE_PATH, "r")
            try:
                f = keysFile.read()
                obj = eval(f)
                self.logos = obj if obj else self.logos
            except Exception, e:
                print e
            finally:
                if keysFile:keysFile.close()
        if path in self.logos:
            return localForld + self.logos[path]

 先查看本地是否已下载了,如果没有则下载并保存至本地,如果没有,就去网上下载,下载完毕后生成一个流水号,然后将流水号作为文件名存储,这个过程中设计到两个系统对象存储文件,一个就是存储当前的最大流水号,以便在下次再次启动程序时能从这个流水号开始往上加,再一个就是文件名的映射文件,将网络路径映射到本地文件名。

这里设计到一个叫Generator的类,这是我写的一个流水号生成器,代码如下:

 

文件名:SerialCode.py

#!/usr/bin/env python
#coding=UTF-8
'''
Created on 2009-3-13

@author: phy
'''
import time
import cPickle as pickle

class Generator(object):
    """流水号生成器"""
    def __init__(self, gs=[]):
        self.generators = gs
        self.lastCode = ""
        self.s_in_file = "/home/phy/code.sc"#流水号保存的位置
    def generate(self):
        """生成一个流水号"""
        code = ""
        for generator in self.generators:
            if hasattr(generator, "generate") and callable(getattr(generator, "generate")):
                code += generator.generate(code)
        self.lastCode = code
        return code
    def setLastCode(self, code):
        """初始化流水号"""
        if(len(self) != len(code)):
            return
        index = 0
        prefix = ""
        for generator in self.generators:
            if not hasattr(generator, "__len__"):
                continue
            n = len(generator)
            v, index = code[index:index + n], index + n
            if hasattr(generator, "setValue") and callable(getattr(generator, "setValue")):
                generator.setValue(prefix, v)
            prefix += v
    def __len__(self):
        """该长度表示所生成的流水号的总长"""
        n = 0
        for generator in self.generators:
            if hasattr(generator, "__len__"):
                n += len(generator)
        return n
    def saveLast(self):
        """保存最后一次生成的流水号"""
        f = file(self.s_in_file, "wb")
        try:
            pickle.dump(self.lastCode, f, True)
        except IOError, e:
            print e
        finally:
            f.close()
    def loadLast(self):
        """加载最后一次生成的流水号"""
        f = None
        try:
            f = file(self.s_in_file, "rb")
            self.lastCode = pickle.load(f)
            if(self.lastCode):
                self.setLastCode(self.lastCode)
            return self.lastCode
        except IOError, e:
            print e
        finally:
            if f:
                f.close()
class CharGenerator(object):
    def __init__(self, ch="A"):
        self.ch = ch
    def generate(self, code):
        return self.ch
    def __len__(self):
        return len(self.ch)
    
class DateGenerator(object):
    def __init__(self, format="%Y%m%d%H%M%S"):
        self.format = format
    def generate(self, code):
        return time.strftime(self.format, time.localtime())
    def __len__(self):
        return len(time.strftime(self.format, time.localtime()))

class FlowNumberGenerator(object):
    def __init__(self, restartOnPrefixChange=False, length=4, startBy=1):
        self.len_of_char = length#生成的字符长度
        self.currPrefix = ""#前面的字符
        self.restartOnPrefixChange = restartOnPrefixChange#在前缀字符改变是是否重新开始
        self.startBy = startBy if isinstance(startBy, int) else 1#上次生成的code
        self.preCode = self.startBy - 1
    def generate(self, code):
        if self.restartOnPrefixChange and self.currPrefix != code:
            self.preCode = self.startBy - 1
            self.currPrefix = code
        v = self.preCode + 1
        returnValue = self.intToChar(v)
        self.preCode = v
        return returnValue
    def intToChar(self, num):
        num = str(num)
        while len(num) < self.len_of_char:
            num = "0" + num
        return num
    def setValue(self, prefix, value):
        self.currPrefix = prefix
        self.preCode = int(value)
    def __len__(self):
        return self.len_of_char

def cretaeDefault(defaultChar=None, useDateGenerator=True):
    genertor = Generator()
    if defaultChar:
        genertor.generators.append(CharGenerator(defaultChar))
    if useDateGenerator:
        genertor.generators.append(DateGenerator("%Y%m%d%H"))
    genertor.generators.append(FlowNumberGenerator(restartOnPrefixChange=True))
    #genertor.generators.append(Config())
    genertor.loadLast()
    return genertor

if __name__ == '__main__':
    genertor = Generator()
    genertor.generators.append(CharGenerator("WN"))
    genertor.generators.append(DateGenerator("%Y%m%d%H"))
    genertor.generators.append(FlowNumberGenerator(restartOnPrefixChange=True))
    genertor.generators.append(Config())
    l_code = genertor.loadLast()
    l_code = genertor.generate() if not(l_code) else l_code
    print "上次的流水号:" + l_code
    while True:
        input = raw_input("请选择(输入q或其他退出,输入n显示下一个流水号):")
        if(input != "n"):
            genertor.saveLast()
            break
        l_code = genertor.generate()
        print l_code
    
        

 。。。这几天都在加班,累死了。。

分享到:
评论

相关推荐

    基于Python获取北京时间

    标题:Python获取北京时间工具 介绍:这是一个基于Python语言的简单而实用的工具,用于获取当前的北京时间。无论您身在何处,只需运行此工具,即可准确获取到中国的标准时间——北京时间。对于需要与北京时间同步的...

    Python实战示例 微信好友头像墙.zip

    Python实战微信好友头像墙Python实战微信好友头像墙Python实战微信好友头像墙Python实战微信好友头像墙Python实战微信好友头像墙Python实战微信好友头像墙Python实战微信好友头像墙Python实战微信好友头像墙Python...

    python获取SVN日志

    指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间...

    python获取股票信息

    python获取每日股票信息,涨跌幅、量比等等

    Python 实例 - wxpy获取微信好友头像 Python源码

    Python 实例 - wxpy获取微信好友头像 Python源码Python 实例 - wxpy获取微信好友头像 Python源码Python 实例 - wxpy获取微信好友头像 Python源码Python 实例 - wxpy获取微信好友头像 Python源码Python 实例 - wxpy...

    python获取万得行情数据

    python获取万得行情数据

    Python获取USB扫码枪数据

    Python3.10+pyQT 自动获取USB扫码枪信息,即插即用。

    python实时获取微信聊天信息源码

    用于实时获取微信聊天信息,支持最新版微信PC客户端3.7以上版本. 基于Python3.6及以上版本

    python获取天气预报

    用python获取中央气象局天气预报,使用re模块

    Python 获取网页表格数据(read-html()方法)Python源码

    Python 获取网页表格数据(read_html()方法)Python源码Python 获取网页表格数据(read_html()方法)Python源码Python 获取网页表格数据(read_html()方法)Python源码Python 获取网页表格数据(read_html()方法)...

    Python获取指定时间段内的日期判断具体节日系统

    易用性与兼容性:Python的holidays库和chinesecalendar库都支持多种操作系统和平台,使得节日判断系统可以在不同环境下运行,方便用户使用。 更新与维护:由于中国的节假日可能会因政策调整而发生变化,因此系统设计...

    Esp32+Python获取天气数据+Pyechrts(Html)显示

    Esp32是一款功能强大的微控制器,它集成了Wi-Fi和蓝牙功能,非常适合...这个项目不仅提供了获取实时信息的能力,还展示了如何将IoT设备与数据可视化结合,是学习 Esp32、Python编程、API接口以及数据可视化的良好实践。

    Python简单获取自身外网IP的方法

    ### Python简单获取自身外网IP的方法 在互联网应用开发中,获取客户端或服务器的外网IP地址是一项常见的需求。这不仅对于网络安全管理至关重要,还能帮助开发者实现地理位置定位、访问控制等高级功能。本文将详细...

    python获取有赞token和有赞接口调用代码示例

    有赞token获取和有赞接口调用代码示例,具体的类没写,只是获取了下token和测试了下python调用有赞接口的方法。有需要的可以下下来看看。

    Python 获取32位和64位listview控件数据的实现 【GetListViewData.pyd】

    1.仅通过传入listview句柄即可获取数据。(更新:解决了在windows server下取数据异常问题) 2.包含表头内容。 3.数据按行显示,并且无缺漏。 4.此pyd由64位Python打包,也就只能运行在64位Python上,有需要可留言,再...

    python获取窗口句柄坐标.zip_python 教程

    在Python编程领域,有时我们需要与操作系统进行交互,例如获取屏幕信息、操作窗口或者进行图像处理。这个名为"python获取窗口句柄坐标.zip"的压缩包包含了一个Python教程,旨在教授如何利用Python实现这些功能。主要...

    python获取的宋词三百首数据库

    python获取的宋词三百首数据库

    Python实时获取日志增量数据demo

    python获取日志文件增量信息的完整代码,有详细的注释说明。

    Python获取Redis所有Key以及内容的方法

    一、获取所有Key # -*- encoding: UTF-8 -*- __author__ = "Sky" import redis pool=redis.ConnectionPool(host='127.0.0.1',port=6379,db=0) r = redis.StrictRedis(connection_pool=pool) keys = r.keys() print ...

    python 通过onvif协议获取 Rtsp 视频.zip

    本主题主要关注如何使用Python编程语言通过ONVIF协议访问网络摄像机,并获取Rtsp(Real-Time Transport Protocol)视频流。 首先,了解ONVIF协议的基本概念是必要的。ONVIF定义了设备和服务的网络接口,包括媒体...

Global site tag (gtag.js) - Google Analytics