Archive for the 'python' Category



python收邮件再通过xmlrpc发表给wordpress

终于搞点这段代码了,还是自己控制好的,不过同样依靠定时任务来执行!

通过python收邮件,再通过wordpress的xmlrpc来发表,记得在wordpress的后台选上xmlrpc发表那项.

废话不说了,以下是python代码:

#coding=gbk
import   poplib
import   cStringIO
import   email
import   base64
import   string
import   time
import   xmlrpclib
 
 
def send_data_to_wp(wp_url,wp_username,wp_password,title,content,tags,fenlei,fabiao):
 
#wp_url = "http://192.168.0.25/wordpress/xmlrpc.php"
 
#wp_username = "admin"
 
#wp_password = "123456789"
 
 
wp_blogid=''
 
status_published = 0
 
#status_published = 1
 
 
server = xmlrpclib.ServerProxy(wp_url)
 
 
 
aa=fenlei
 
aa=aa.decode('gbk','ignore').encode('utf8','ignore')
 
categories = [aa]
 
 
 
#中文的gbk转换成utf8格式
 
title=title.decode('gbk','ignore').encode('utf8','ignore')
 
 
#中文的gbk转换成utf8格式
 
content=content.decode('gbk','ignore').encode('utf8','ignore')
 
 
#tags = ["sometag", "othertag"]
 
 
#fabiao等于1就立刻发表文章,不是的话就是草稿
 
if fabiao==1:
    
xpush = 'publish'
 
else:
    
xpush = 'draft'
 
 
 
data = {'title': title, 'description': content, 'categories': categories, 'mt_keywords': tags,'post_status':xpush}
 
print data
 
post_id = server.metaWeblog.newPost(wp_blogid, wp_username, wp_password, data, status_published)
 
return post_id
 
#邮箱用户
mailuser='xxxx'
#邮箱密码
mailpwd='123456789'
 
#wordpress xmlrpc.php位置
wpurl ='http://192.168.5.25/wordpress/xmlrpc.php'
 
#wordpress 用户名
wpuser='admin'
 
#wordpress 登录密码
wppwd ='123456789'
 
#pop收信的地址
server = poplib.POP3("xxx.lpfrx.com")
server.user(mailuser)
server.pass_(mailpwd)
#print server.stat()
numMessages   =   len(server.list()[1])
print   'num of messages =>',numMessages
 
addressList=[]
mailnum,mailsize=server.stat()
 
#删除邮件 (poplib.POP3.dele)
 
for   i   in   range(numMessages):           
 
m   =  server.retr(i+1)   
            
 
buf   =   cStringIO.StringIO()   
 
 
mail=email.message_from_string(string.join(m[1],'\n'))
 
atitle=email.Header.decode_header(mail['subject'])[0][0]
 
 
try:
    
ff=atitle.decode('utf8').encode('gbk','ignore')
 
except:
    
ff=atitle
 
 
print ff
 
#time.sleep(1)
 
 
for   j   in   m[1]:                   
    
print   >>buf,   j   
 
buf.seek(0)   
    
 
#解析信件内容   
 
 
 
msg   =   email.message_from_file(buf)   
 
for   part   in   msg.walk():   
    
contenttype   =     part.get_content_type()     
    
filename   =   part.get_filename()   
                  
    
#显示文件类型
    
#print 'type: ',contenttype
 
    
if   contenttype   ==   'text/plain':   
      
#   保存正文   
      
mailstr=base64.decodestring(part.get_payload())
      
#print mailstr
      
try:
        
newmailstr=mailstr.decode('utf8').encode('gbk','ignore')
      
except:
        
newmailstr=mailstr
 
      
      
if ff !='':
        
tags=[""]
 
    
#需要提交的分类 wordpress 分类的名称
    
xfenlei='一般想到的'
        
print send_data_to_wp(wpurl,wpuser,wppwd,ff,newmailstr,tags,xfenlei,0)
        
 
      
# 写入文件
      
f   =   open("fmail%d.txt"   %   (i+1),'wb')   
      
f.write(newmailstr)   
      
f.close()   
 
 
buf.close()
 
time.sleep(1)
 
#删除邮件
 
server.dele(selected+1)
 
server.quit()

代码文件下载: http://www.lpfrx.com/upload/sendwp-1.py

Tag:

python使用xmlrpc对wordpress增加文章

这两天搞的,python使用xmlrpc对wordpress增加文章,为了配合使用python用邮件向wordpress增加文章的实验,现在都做得差不多了,记录下代码!

#coding=gbk
 
 
import   xmlrpclib
 
 
def send_data_to_wp(wp_url,wp_username,wp_password,title,content,tags,fenlei):
 
 
wp_blogid=''
 
 
status_published = 0
 
 
server = xmlrpclib.ServerProxy(wp_url)
 
 
 
aa=fenlei
 
 
#中文的gbk转换成utf8格式, 不转换是会出错
 
aa=aa.decode('gbk','ignore').encode('utf8','ignore')
 
categories = [aa]
 
 
#中文的gbk转换成utf8格式
 
title=title.decode('gbk','ignore').encode('utf8','ignore')
 
 
#中文的gbk转换成utf8格式
 
content=content.decode('gbk','ignore').encode('utf8','ignore')
 
 
data = {'title': title, 'description': content, 'categories': categories, 'mt_keywords': tags,'post_status':'publish'}
 
print data
 
post_id = server.metaWeblog.newPost(wp_blogid, wp_username, wp_password, data, status_published)
 
return post_id
 
# 需要操作的wordpress
w_url = "http://192.168.5.25/wordpress/xmlrpc.php"
 
#登录用户
w_username = "admin"
 
#登录密码
w_password = "123456789"
 
#文章标签
w_tags = ["sometag", "othertag"]
 
#文章题目
w_title='中文测试'
 
#文章内容
w_content='今天天气不错啊'
 
#文章分类
w_fenlei='一般想到的'
 
 
print send_data_to_wp(w_url,w_username,w_password,w_title,w_content,w_tags,w_fenlei)

另外关于wordpress 的xmlrpc使用方法网址:http://codex.wordpress.org/XML-RPC_wp , 比较有用!

以下这段代码是列出xmlrpc的使用方法有哪些

mport xmlrpclib
from pprint import pprint
server = xmlrpclib.ServerProxy("http://localhost/wordpress/xmlrpc.php")
pprint(server.system.listMethods() )

这样应该比较方便应用了!

Tag:

python收电子邮件的代码记录

最近搞的,准备拿来在我的服务器上收信,还有一个目的是收信,然后自动发表到wordpress去,wordpress自带的收邮件发信功能只是发送到审核去,不是直接发表!所以不喜欢,于是自己来搞一个!

第一个需要解决的问题就是收邮件,用python貌似很容易实现!以下是我的实验代码,改自网上!

#coding=gbk
import   poplib
import   cStringIO
import   email
import   base64
import   string
 
# mail.xxx.com ,指的是你的pop收信服务器的地址,可以是域名或者ip
server = poplib.POP3("mail.xxx.com")
server.user("用户")
server.pass_("密码")
print server.stat()
numMessages   =   len(server.list()[1])
print   'num   of   messages ',   numMessages
 
addressList=[]
mailnum,mailsize=server.stat()
 
for selected in range(0,mailnum):
 
  
response,message,content=server.retr(selected+1)
  
messageString=email.message_from_string(string.join(message,'\n'))
  
type=messageString.get_content_charset()
 
  
#if type=='gb2312':
  
#   unicode(messageString.get_payload(),'gb2312')
  
#if type=='shift_jis':
  
#   unicode(messageString.get_payload(),'shift_jis')
  
#if type=='None':
  
#   unicode(messageString.get_payload(),'utf-8')
 
  
print messageString
  
#print base64.decodestring(messageString.get_payload(0).get_payload())
  
messageFrom=email.Header.decode_header(messageString['from'])[0][0]
  
print messageFrom
  
#addressList.append(messageFrom)

Tag:

python的SocketServer代码记录

python的SocketServer代码记录,这个是从网上摘抄下来经自己改写了一点的,客户测试端自己写的!

server:

import SocketServer


class RequestHandler(SocketServer.StreamRequestHandler):
  def handle(self):
    while True:
      mdata = self.request.recv(1024)
      if not mdata:
        break
      else:
        print "RECV from ", self.client_address[0]
        print '-> ',mdata



hostname = '192.168.0.25'
port = 8001
server = SocketServer.ThreadingTCPServer((hostname, port), RequestHandler)
server.serve_forever()

client

import socket 
import time

ISOTIMEFORMAT='%Y-%m-%d %X'
for r in range(1000):
  #try:
    xtime=time.strftime(ISOTIMEFORMAT, time.localtime( time.time() ) )
    socket.setdefaulttimeout(3)#
    sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
    sock.connect(('192.168.0.25', 8001))   
    #time.sleep(2)
    sock.send(str(r)+': '+xtime)
  #except:
  #finally:
    sock.close()
    time.sleep(0.5)

client如果去掉time.sleep(0.5)有时会出错,不知道为什么!

Tag:

python截取报文的程序代码记录

python截取报文的程序代码记录,需要安装pcap和dpkt两个包,和安装WinPcap , 我的python是2.5版本, 一切操作在windows下

WinPcap: http://www.winpcap.org/install/default.htm

dpkt:http://code.google.com/p/dpkt/downloads/list
没有windows python2.5的,所以自己下载那个dpkt-1.7.tar.gz, 解开后执行python setup.py install , 一切正常安装

pcap: http://code.google.com/p/pypcap/downloads/list, 下载windows python2.5那个

代码:

#coding=gbk
import pcap
import dpkt

hostlist=['360safe', '360.cn']



a=pcap.pcap()
a.setfilter('tcp port 80')   
# 可以是'tcp' 'udp' 'port 80'等过滤用的
for i,j in a:
  tem=dpkt.ethernet.Ethernet(j)
  #print ("%s %x",i,tem)
  ip=tem.data
  tcp=ip.data
  #print icp.data
  #geturl_start=tcp.data.find('GET / HTTP/1.1')
  geturl_start=tcp.data.find('GET ')
  if geturl_start !=-1:
    mystr= tcp.data
    #print mystr
    host_start=mystr.find('Host: ')
    if host_start != -1:     
      host_end=mystr.find('\r\n', host_start)
      if host_end != -1:
      
host=mystr[host_start:host_end]

        k=0
for _host in hostlist:
  #print "test:",host.find(_host)
          if host.find(_host) !=-1:
            k=1
    break
   
if k==1:
  continue


        print "---------"
print host
        #print mystr

目的是截取host主机出来, 监控80端口, hostlist是为了过滤360卫士和360杀毒的请求

Tag:, ,

python2.5安装MySQLDB记录

每次都不记得怎样安装。

我是使用easy_install工具,需要先安装setuptools, 使用ez_setup.py脚本后就有easy_install工具了.

用下载工具下载这个脚本吧: http://peak.telecommunity.com/dist/ez_setup.py。

下载完执行 python ez_setup.py后就有 easy_install 了, 我的是win7系统,python的安装目录
是 c:\pyton25

所以easy_install在 C:\Python25\Scripts

然后命令执行 easy_install “MySQL-python==1.2.2″ 就可以安装MySQLDB, 如果直接执行
easy_install MySQL-python 会出错的,据说2.5版安装 1.2.2版的MySQLdb才行.

Tag:, ,