# coding=utf-8
# /usr/bin/python3.6 generate_stars.py
# 定時任務每天凌晨第一分
# 1 0 * * * /usr/bin/python3.6 /root/backend/services/app/app/generate_stars.py
# 測試定時任務1分一次
# */1 * * * * /usr/bin/python3.6 /root/backend/services/app/app/generate_stars.py
import random
import json
import datetime
import time
from pymongo import MongoClient
from io import BytesIO
import pymysql.cursors
import logging
# 默認的日志級別設置為WARNING(日志級別等級CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET)
logging.basicConfig(level=logging.DEBUG,
format="%(asctime)s %(name)s [line:%(lineno)d] %(levelname)s %(message)s",
datefmt='%a, %d %b %Y %H:%M:%S',
filename="/root/backend/db/cront.log",
filemode="a")
dddd = MongoClient('120.xx.26.xx:20002', username='xxx', password='xxx')
mongo_tag = MongoClient('xxxxx.mongodb.rds.aliyuncs.com:3717', username='xx', password='xxx')
def get_stars_accounts():
current = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
logging.info("ok start-%s"%(current))
stars = dddd['goodlook']['star'].find()
conn = pymysql.connect(host='rm-xxxx.mysql.rds.aliyuncs.com',
port=3306,
user='dba',
password='xxx',
db='app',
charset='utf8')
cursor = conn.cursor()
# conn.ping(reconnect=True)
for star in stars:
print(star)
updated_at = star.get("updated_at")
created_at = star.get("created_at")
print(type(updated_at))
star_id = star.get("star_id")
birthday = star.get("birthday")
biography = star.get("biography")
dress_comment = star.get("dress_comment")
country = star.get("nation")
height = star.get("height")
avatar_url = star.get("avatar")
images_count = star.get("image_count")
gender = star.get("gender")
if gender == "女":
gender = 'F'
else:
gender = 'M'
# big_image_url = star.get("image_url")[0]
names_list = star.get("names")
chinese_name = None
english_name = None
alias_name = None
for li in names_list:
if li.get("type") == "Chinese":
chinese_name = li.get("name")
elif li.get("type") == "English":
english_name = li.get("name")
else:
alias_name = li.get("name")
print(chinese_name, english_name, alias_name)
if english_name and chinese_name:
name = english_name
other_name = chinese_name
elif english_name and not chinese_name:
name = english_name
other_name = ""
elif chinese_name and not english_name:
name = chinese_name
other_name = ""
else:
pass
# 拿tag_id;直到昭君那邊數據里直接帶tag_id,即可刪除
print("name", name)
tag = mongo_tag['admin']['tag'].find_one({"key": "star", "value": name})
if tag is not None:
tag_id = str(tag.get("_id"))
print("tag_id", tag_id)
sql = 'select star_id, updated_at from star where star_id="{star_id}"'.format(star_id=star_id)
cursor.execute(sql)
ret = cursor.fetchone()
if ret is not None:
# 表里存在
mydb_updated_at = ret[1]
if updated_at > mydb_updated_at:
# 更新
update_sql = 'update star set gender="{gender}", height="{height}", country="{country}", birthday="{birthday}", avatar_url="{avatar_url}", name="{name}", other_name="{other_name}", alias_name="{alias_name}", biography="{biography}", dress_comment="{dress_comment}", created_at="{created_at}", updated_at="{updated_at}" where star_id="{star_id}"'.format(
gender=gender, height=height, country=country, birthday=birthday,
avatar_url=avatar_url, name=name, other_name=other_name, alias_name=alias_name,
biography=biography, dress_comment=dress_comment, created_at=created_at,
updated_at=updated_at,
star_id=star_id)
cursor.execute(update_sql)
conn.commit()
else:
# 說明數據沒有變化
pass
else:
# 表里不存在直接插入
try:
insert_sql = 'insert into star(tag_id, star_id, gender, height, country, birthday, avatar_url, name, other_name, alias_name, biography, dress_comment,created_at,updated_at) values("{tag_id}", "{star_id}", "{gender}", "{height}", "{country}", "{birthday}","{avatar_url}", "{name}", "{other_name}", "{alias_name}", "{biography}","{dress_comment}", "{created_at}", "{updated_at}")'.format(
tag_id=tag_id, star_id=star_id, gender=gender, height=height, country=country,
birthday=birthday,
avatar_url=avatar_url, name=name, other_name=other_name, alias_name=alias_name,
biography=biography, dress_comment=dress_comment, created_at=created_at,
updated_at=updated_at)
cursor.execute(insert_sql)
conn.commit()
except pymysql.err.IntegrityError as e:
pass
else:
pass
cursor.close()
conn.close()
current = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
logging.info("ok over-%s" % (current))
get_stars_accounts()