文档章节

python 24小时排行

昏鸦
 昏鸦
发布于 2014/03/24 18:20
字数 799
阅读 320
收藏 5

#!/usr/bin/env python

#coding=utf-8

'''

Created on 2013-8-22


@author : 昏鸦

'''

import MySQLdb

import time

import pexpect

import subprocess

import os

import socket

import urllib2

import sys

mintor_url = 'http://ip/sms?appId=1001&to=电话&msg='#   短息接口

News_Result_='News_Result_'

tempdir= 'datas/'

tmpexedir= 'exedatas/'

reasultdir='redatas/'


######test#####

#pubid=int(13938)

#dbip='数据库ip'


##########oline###########

pubid=int(14219)

dbip='数据库ip'



global ipath 

ipath=os.getcwd()+'/'

def telme(info):

    global mintor_url

    tmp_url = mintor_url+info

    socket.setdefaulttimeout(10)

    response = urllib2.urlopen(tmp_url)

    html = response.read() 

    print html

    response.close()

   

    

def getlogname(hour):

    return News_Result_+str(time.strftime('%Y%m%d%H',time.localtime(time.time()-hour*60*60)))+".log"  


def dbexe(filename):

    ida =str(time.strftime('%Y-%m-%d',time.localtime(time.time()-24*60*60)))

    db = DB()

    data_list = db.getpubnews(pubid ,ida)

    newsower = db.getnewsowerinfo(ida)

    print 'open result file:',filename

    file = open(filename)

    k=200

    dbresult=[];

    while 1:

        print 'k:',k

        if k <=0:

            break

        lines = file.readlines(200)

        if not lines:

            break

        for line in lines:

            try:

                if k <=0:

                    break

                line = line.strip()

                lists = line.split('|')

                if(lists[0].isdigit() and lists[1].isdigit()  and newsower.count(int(lists[0]))<=0):

                    datainfo = []

                    datainfo.append(int(lists[0]))

                    datainfo.append(int(k))

                    dbresult.append(datainfo)

                    k-=1

            except Exception, ex:

                print ex

    dbresult.reverse()

    if k>100:

        print 'data is to small,so return:',filename

        return 

    if db.addpubnews(pubid,dbresult):

            if data_list[0] is not None:

                db.delpubnews(pubid, int(data_list[0]), int(data_list[1]))

    file.close()

    db.destory()

                


def checkexistsyn(name,num):

    if os.path.exists(name) == False:

        syndata(num)

        

def awkexe():

    log1= ipath+tempdir+getlogname(2)

   

    log2= ipath+tempdir+getlogname(3)

    log3= ipath+tempdir+getlogname(4)

    checkexistsyn(log1,2)

    checkexistsyn(log2,3)

    checkexistsyn(log3,4)

    

        

    reultname = ipath+reasultdir+str(time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())))+'.log'

    cmd =' cat '+log1+' '+log2+' '+log3+' | awk \'$1 !~/^NULL/\'  | awk -F "|"  \'{a[$1]+=$2}END{for(x in a)print x"|"a[x]}\'  | sort -n  -r -k 2 -t "|" >> '+reultname

    print 'cmd:',cmd

    re = subprocess.call([cmd],shell=True)

    if re==0:

        print 'success'

        dbexe(reultname)

    else:

        telme('awk-exe-fail-oa')


def syndata(hour):

    logn = getlogname(hour)

    command = 'rsync -v 用户名@ip:/data/tianliang/NewsSort/NewsResult/'+logn +"  "+ipath+tempdir

    print 'command:',command

    path = ipath+tempdir+logn

    foo = pexpect.spawn(command)  

    index = foo.expect(["(?i)yes/no", "(?i)password", pexpect.EOF, pexpect.TIMEOUT])


    if (index == 0):

            print ' need---------------yes'

            foo.sendline('yes')

            foo.expect("(?i)password")

            foo.sendline('dev4smc')

            foo.expect(pexpect.EOF)

            foo.close() 

            print 'syndata w success' 

    elif(index == 1):

            print ' need---------------pass'

            foo.sendline('dev4smc')

            foo.expect(pexpect.EOF)

            foo.close()

            

            print 'syndata q success'

    else :

            print 'has error'

            

    return os.path.exists(path)



def gethour():

    d4= time.localtime(time.time())

    return int(d4.tm_hour)


def checkDate():

    

    hour = gethour()

    #if hour==9 or hour==12 or hour==17 or hour==20  or hour==0:

    #    return True

    

    return True


def startjob():

    k = 0

    while k < 10:

        k+=1

        if(syndata(2)):

            if checkDate():

                awkexe()

                return

            else:

                return

        else:

            time.sleep(60*5)

        

    telme('-ryn-data-error-oa-'+str(k))

    

    

def teststartjob():

    pass


    k = 0

    while k < 1:

        k+=1

        if(syndata(2)) and (syndata(3)) and syndata(4):

          #  if checkDate():

                awkexe()

                return

        else:

            time.sleep(60*5)

        

    telme('-ryn-data-error-oa')

  

class DB(object):


    def destory(self):

        if self.cur != None:

            print 'close db cur'

            self.cur.close()

        if self.conn != None:

            print 'close db conn'

            self.conn.close()

        print 'close db '

            

    def __init__(self):

        

        self.conn = MySQLdb.connect(host=dbip, user='user',passwd='pwd', db='dbname', port=3306, charset='utf8')

        self.cur = self.conn.cursor()

        

    def getnewsowerinfo(self,startTime):

        

        sql = "select newsid from p_news_owner where \

        (ownertype =3 or (ownertype=1 &&(ownerid in(1,2))) or (ownertype=2 && ownerid = 13793)) and createTime >='%s'"

        print sql

        list=(startTime)

        self.cur.execute(sql%list)

        data_list=[]

        data_list.extend( self.cur.fetchall())

        result = []

        for data in data_list:

            try:

                result.append(int(data[0]))

            except Exception, eo:

                print "a date has error:",eo

        return result

    def addpubnews(self,ipubid,datas):

        

        idate=str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

        print 'start add pub_news pubid :%d, date:%s'%(ipubid,idate)

        sql = "insert into p_pub_news (pubid, newsid,weight,newscreatetime,createtime,publishtime,createuser) values(%d,%d,%d,'%s','%s','%s','%s')"

        for data in datas:

            list=(ipubid,data[0],data[1],idate,idate,idate,'lixuan')

           # print "add sql:",sql%list

            self.cur.execute(sql%list)

        #self.cur.executemany(sql,relist)

        self.conn.commit()

        print ' add pub_news success pubid :%d, date:%s'%(ipubid,idate)

        return True

    

    def delpubnews(self,ipubid, maxid,minid):

        

        print 'start dele data , maxid:%d,pubid:%d'%(maxid,ipubid)

        sql = 'delete from p_pub_news where id <= %d and id >=%d and pubid = %d'

        list=(maxid,minid,ipubid)

        self.cur.execute(sql%list)

        self.conn.commit()

        print 'dele data p_pubnews success, maxid:%d,pubid:%d'%(maxid,ipubid)

       

    def getpubnews(self, ipubid,idate):

        #and createtime < '%s'

        sql = "select max(id),min(id) ,count(1) from p_pub_news where pubid =%d  "

        list=(ipubid)

        self.cur.execute(sql%list)

        data_list=[]

        data_list.extend( self.cur.fetchall())

        return data_list[0];

    

    

if __name__ == '__main__':

     #global ipath

     if len(sys.argv) >1:

         ipath = sys.argv[1]

         

     idate=str(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())))

     print 'start service...,',idate

     #teststartjob()

     startjob()

    


© 著作权归作者所有

共有 人打赏支持
昏鸦
粉丝 6
博文 182
码字总数 59043
作品 0
程序员
查找出含有特定文件并且24小时内有更新的目录python脚本

查找出指定文件所在目录24小时内有更新的部分python脚本: 注: 1、先找出含有aa.txt文件的所有目录 2、再筛选出24小时(86400秒)内有更新的目录 3、写入时记得加'n'(换行),读取时记得排...

yangzhimingg
06/07
0
0
判断文件的更改时间是否超过24小时python脚本

判断文件的更改时间是否超过24小时python脚本: vi a1.py #!/usr/bin/python import os import time dir="/root/ming.txt" now = time.time() f = os.path.getmtime(dir) if f < (now - 8640......

yangzhimingg
06/07
0
0
用四个点,告诉你为什么要学Python

1.2018年编程语言火热度排行 时代变迁如此之快,谁又能想到当我们还在羡慕大雄的机器猫时现在人工智能已经开始步入我们的生活点滴呢?我先给大家小小的科普一下:二十世纪四十年代当计算机刚...

Python共读
08/21
0
0
2018 IEEE最热门48种编程语言发榜!Python雄踞四项第一

IEEE Spectrum 杂志发布了2017年编程语言排行榜。这是他们发布的第四届编程语言 Top 榜。据介绍,IEEE Spectrum 的排序是综合 10 个精选线上数据源,例如 Stack Overflow、Twitter、Reddit等...

android自学
08/06
0
0
小猪的Python学习之旅 —— 8.爬虫实战:刷某博客站点的访问量

引言: Python并发的文章还在肝,比较乏味,写个爬虫小脚本玩玩,想起之前 在某博客站点看到,一个人发布的渣渣文章,半个小时不到2W访问量, 还连续几篇都是,然后一个留言或者点赞的都没有...

coder_pig
07/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

各种开源汇编、反汇编引擎的非专业比较

由于平时业余兴趣和工作需要,研究过并使用过时下流行的各种开源的x86/64汇编和反汇编引擎。如果要对汇编指令进行分析和操作,要么自己研究Intel指令集写一个,要么就用现成的开源引擎。自己...

simpower
10分钟前
1
0
(4)添加vue-router

(4)添加vue-router 1 安装vue-router cnpm install vue-router --save 2 页面准备 新建目录/src/views/common,此目录下面建立4个组件404.vue、home.vue、login.vue、theme.vue。每个文件...

neumeng
12分钟前
1
0
高可用性系统在大众点评的实践与经验

背景 所谓高可用性指的是系统如何保证比较高的服务可用率,在出现故障时如何应对,包括及时发现、故障转移、尽快从故障中恢复等等。本文主要以点评的交易系统的演进为主来描述如何做到高可用...

Skqing
20分钟前
2
0
Network protocols

The network stack does serveral seemingly-impossible things. It does reliable transmission over our unreliable networks, usually without any detactable hiccups. It adapts smooth......

nao
21分钟前
1
0
Android 生命周期方法

1,onCreate(); 2,onStart(); 3,onResume(); //打开页面,前三个方法自动执行 4,onPause(); 5,onStop(); //打开其他页面,前一个页面执行这俩方法 6,onRestart(); //onStart(),onResume //当关闭...

lanyu96
28分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部