文档章节

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学习之旅 —— 8.爬虫实战:刷某博客站点的访问量

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

coder_pig
07/13
0
0
2018 IEEE最热门48种编程语言发榜!Python雄踞四项第一

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

android自学
08/06
0
0
GitHub 年度报告,2017 年最受欢迎的编程语言

就在前两天,GitHub 举办了年度盛会 GitHub Universe,公布了 GitHub 这一年的数据变化与主要动作,GitHub 主页做了次更新,紧接着,发布了 GitHub Octoverse 2017 年度报告,今天就带大家解...

stormzhangV
2017/10/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java IO类库之PrintStreamWriter

* A <code>PrintStream</code> adds functionality to another output stream, * namely the ability to print representations of various data values * conveniently. Two other fea......

老韭菜
56分钟前
0
0
qduoj~前端~二次开发~笔记

青岛大学qdu的onlinejudge是js的写的前端,框架是vue.js,在nodejs上部署运行,其实整体运行还是建立在docker的容器虚拟环境里,这里暂时不需要docker。安装环境是Ubuntu14-64bit 1.安装一大...

虚拟世界的懒猫
今天
6
0
ConcurrentHashMap源码解读

部分内容转自:http://jiabinyuan.xyz/#/app/archive/detail/25 内部结构 内部采用了segment结构,每一个segment相当于一个hashtable。看下面的结构图: 从图的结构我们可以了解到,Concurr...

edwardGe
今天
1
0
Ubuntu终端Tab键自动补全

打开 /etc/bash.bashrc,找到下列代码,取消注释。 #enable bash completion in interactive shells#if ! shopt -oq posix; then# if [-f /usr/share/bash-completion/bash_compl......

大熊猫
今天
0
0
polipo socks5代理转http代理

天朝的网络,哎~ 装个 yarn 都时而会卡 假设在SSlocal 已经装好运行的前提下,来安装设置 polipo sudo apt-get install polipo sudo vim /etc/polipo/config 追加下列配置内容,并保存 socksP...

纯洁徐
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部