根据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
。。。这几天都在加班,累死了。。
分享到:
- 2009-03-25 23:25
- 浏览 1336
- 评论(0)
- 论坛回复 / 浏览 (0 / 1849)
- 查看更多
相关推荐
标题:Python获取北京时间工具 介绍:这是一个基于Python语言的简单而实用的工具,用于获取当前的北京时间。无论您身在何处,只需运行此工具,即可准确获取到中国的标准时间——北京时间。对于需要与北京时间同步的...
Python实战微信好友头像墙Python实战微信好友头像墙Python实战微信好友头像墙Python实战微信好友头像墙Python实战微信好友头像墙Python实战微信好友头像墙Python实战微信好友头像墙Python实战微信好友头像墙Python...
指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间时间 获取SVN日志指定区间...
Python 实例 - wxpy获取微信好友头像 Python源码Python 实例 - wxpy获取微信好友头像 Python源码Python 实例 - wxpy获取微信好友头像 Python源码Python 实例 - wxpy获取微信好友头像 Python源码Python 实例 - wxpy...
python获取万得行情数据
Python3.10+pyQT 自动获取USB扫码枪信息,即插即用。
用于实时获取微信聊天信息,支持最新版微信PC客户端3.7以上版本. 基于Python3.6及以上版本
用python获取中央气象局天气预报,使用re模块
Python 获取网页表格数据(read_html()方法)Python源码Python 获取网页表格数据(read_html()方法)Python源码Python 获取网页表格数据(read_html()方法)Python源码Python 获取网页表格数据(read_html()方法)...
易用性与兼容性:Python的holidays库和chinesecalendar库都支持多种操作系统和平台,使得节日判断系统可以在不同环境下运行,方便用户使用。 更新与维护:由于中国的节假日可能会因政策调整而发生变化,因此系统设计...
Esp32是一款功能强大的微控制器,它集成了Wi-Fi和蓝牙功能,非常适合...这个项目不仅提供了获取实时信息的能力,还展示了如何将IoT设备与数据可视化结合,是学习 Esp32、Python编程、API接口以及数据可视化的良好实践。
### Python简单获取自身外网IP的方法 在互联网应用开发中,获取客户端或服务器的外网IP地址是一项常见的需求。这不仅对于网络安全管理至关重要,还能帮助开发者实现地理位置定位、访问控制等高级功能。本文将详细...
有赞token获取和有赞接口调用代码示例,具体的类没写,只是获取了下token和测试了下python调用有赞接口的方法。有需要的可以下下来看看。
1.仅通过传入listview句柄即可获取数据。(更新:解决了在windows server下取数据异常问题) 2.包含表头内容。 3.数据按行显示,并且无缺漏。 4.此pyd由64位Python打包,也就只能运行在64位Python上,有需要可留言,再...
在Python编程领域,有时我们需要与操作系统进行交互,例如获取屏幕信息、操作窗口或者进行图像处理。这个名为"python获取窗口句柄坐标.zip"的压缩包包含了一个Python教程,旨在教授如何利用Python实现这些功能。主要...
python获取的宋词三百首数据库
python获取日志文件增量信息的完整代码,有详细的注释说明。
一、获取所有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(Real-Time Transport Protocol)视频流。 首先,了解ONVIF协议的基本概念是必要的。ONVIF定义了设备和服务的网络接口,包括媒体...
python获取同花顺涨停连板跌停数据