ソースを参照

add email function for jobcheck

jason 2 年 前
コミット
46933e1413
3 ファイル変更127 行追加38 行削除
  1. 1 0
      .gitignore
  2. 47 10
      SEO/seo_monitor.py
  3. 79 28
      joblist/jobcheck.py

+ 1 - 0
.gitignore

@@ -0,0 +1 @@
+userdata.*

+ 47 - 10
SEO/seo_monitor.py

@@ -15,6 +15,10 @@ db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb
 
 data = pd.DataFrame()
 
+scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
+credentials = ServiceAccountCredentials.from_json_keyfile_name("choozmointernal-2e314f3d4e12.json", scope)
+gc = gspread.authorize(credentials)
+
 def notify_group(msg):
     gid='WekCRfnAirSiSxALiD6gcm0B56EejsoK89zFbIaiZQD'
     headers = {"Authorization": "Bearer " + gid,"Content-Type": "application/x-www-form-urlencoded"}
@@ -84,28 +88,55 @@ def arrange_date(date):
         date = date[:2]+'/'+date[2:]
     return date
 
-def checkrank(data):
+def checkrank(data, targetcust, targetkw):
+    '''
     msg = "以下是排名下降的關鍵字:\n"
     msg2 = "以下是目前排名於百名外的關鍵字:\n"
+    '''
+    msg = "以下是亮點字的績效:\n"
     flag1=0
     flag2=0
     for row in data.index:
             #print(row)
             delta = int(data['starting_rank'][row])-int(data['current_rank'][row])
+
+            for t in targetkw:
+                try:
+                    w = data['kw'][row]
+                    if ((t in w) and data['client'][row] in targetcust):
+                        msg += "[" + data['client'][row] + "] " + data['kw'][row] + ": " + str(int(data['starting_rank'][row])) + " -> " + str(int(data['current_rank'][row])) + " (" + str(int(delta)) + ")\n"
+                except:
+                    pass
+
+            '''
             if (delta < 0):
                 msg += "[" + data['client'][row] + "] " + data['kw'][row] + ": " + str(int(data['starting_rank'][row])) + " -> " + str(int(data['current_rank'][row])) + " (" + str(int(delta)) + ")\n"
                 flag1=1
             if (int(data['current_rank'][row]) == 101):  #out of range...
                 msg2 += "[" + data['client'][row] + "] " + data['kw'][row] + "\n"
                 flag2=1
+            '''
     print(msg)
-    print(msg2)
-    return msg, msg2, flag1, flag2
+    #print(msg2)
+    return msg
+    #return msg, msg2, flag1, flag2
 
 if __name__ == "__main__":
     date1 = '0707'
     date2 = '0717'
-    lst = ['清原', '神助物流', '班尼斯', '有夠讚', '仁本', '火柴星人', '呷茶']
+    lst = ['清原', '神助物流', '班尼斯', '有夠讚', '仁本', '火柴星人', '呷茶', 'ChoozMo']
+
+    sheet = gc.open('SEO 亮點字')
+    sheet_instance = sheet.get_worksheet(0)
+    records_data = sheet_instance.get_all_records()
+    #print(records_data[0])
+
+    targetkw = []
+    for rd in records_data:
+        targetkw.append(rd["亮點字"])
+
+    print(targetkw)
+
     for client in lst:
         date1 = '0707'
         date2 = '0718'
@@ -115,9 +146,7 @@ if __name__ == "__main__":
         data = data.append(res, ignore_index=True)
     data.to_csv(f"./排名CSV/combine/__排名變化.csv", index=False, encoding='utf_8_sig')
 
-    scope = ['https://spreadsheets.google.com/feeds','https://www.googleapis.com/auth/drive']
-    credentials = ServiceAccountCredentials.from_json_keyfile_name("choozmointernal-2e314f3d4e12.json", scope)
-    gc = gspread.authorize(credentials)
+    
     spread = Spread("kw_ranking_tracker",creds=credentials)
     spread.df_to_sheet(data, index=False, sheet="main", start="A1", replace=False)
     time_stamp = datetime.now()
@@ -125,11 +154,18 @@ if __name__ == "__main__":
     
     spread.sheet.update('G1', '最後更新:' + time_stamp)
     
-    msg, msg2, flag1, flag2=checkrank(data)
+    #msg, msg2, flag1, flag2=checkrank(data, lst, targetkw)
+    msg = checkrank(data, lst, targetkw)
 
     msg += "\n完整資料請至https://cmm.ai/seo1"
-    msg2 += "\n完整資料請至https://cmm.ai/seo1"
+    #msg2 += "\n完整資料請至https://cmm.ai/seo1"
+
+    msg01 = [msg[i:i+1000] for i in range(0, len(msg), 1000)]
+    for m1 in msg01:
+        notify_group(m1)
+        print(m1)
 
+    '''
     if flag1 == 1:
         msg01 = [msg[i:i+1000] for i in range(0, len(msg), 1000)]
         for m1 in msg01:
@@ -140,4 +176,5 @@ if __name__ == "__main__":
         msg02 = [msg2[i:i+1000] for i in range(0, len(msg2), 1000)]
         for m2 in msg02:
             notify_group(m2)
-            print(m2)
+            print(m2)
+    '''

+ 79 - 28
joblist/jobcheck.py

@@ -4,6 +4,9 @@ from dateutil import parser
 import gspread
 from oauth2client.service_account import ServiceAccountCredentials
 import time
+import smtplib
+from userdata import *
+from email.message import EmailMessage
 
 # drop this at PUBLIC2
 
@@ -21,60 +24,108 @@ def notify_group(msg):
     headers = {"Authorization": "Bearer " + gid,"Content-Type": "application/x-www-form-urlencoded"}
     r = requests.post("https://notify-api.line.me/api/notify",headers=headers, params={"message": msg})
 
+def send_line(messages):
+    for message in messages:
+        msg = [message[i:i+1000] for i in range(0, len(message), 1000)]
+        for m in msg:
+            notify_group(m)
+            print(m)
+
+def send_email(emails, content, has_overdue):
+    server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
+    server.ehlo()
+    server.login(gmail_username, gmail_password)
+
+    for name in content:
+        msg = EmailMessage()
+        msg['Subject'] = '執行表單過期作業通知' + str(datetime.date.today())
+        msg['From'] = "service@choozmo.com"
+        msg['To'] = emails[name]
+
+        if has_overdue[name] == 1:
+            msg.set_content(content[name])
+        else:
+            msg.set_content(name + "您好,\n\n您目前沒有過期的作業。\n更新執行表單請至 https://cmm.ai/pm ,謝謝您。\n\n")
+        
+        print ('Sending email to' + msg['To'])
+        #server.send_message(msg)
+        print ('Email sent to' + msg['To'])
+
+    server.close()
+
 sheet = client.open('ChoozMo 專案執行表單_20220720')
 sheet_instance = sheet.get_worksheet(0)
 
 records_data = sheet_instance.get_all_records()
 #print(records_data[0])
 
+emails = {"Jared": "jared@choozmo.com", "Morrison": "morrison@choozmo.com", "Ginia": "ginia@choozmo.com", "Doris": "doris@choozmo.com"}
+overdue_email_content = {}
+has_overdue = {}
+
+for e in emails.keys():
+    overdue_email_content[e] = e + "您好,\n\n提醒已過期的作業如下,請務必提醒相關同仁完成作業。\n更新執行表單請至 https://cmm.ai/pm ,謝謝您。\n\n過期作業如下:\n\n"
+    has_overdue[e] = 0
+
 for data in records_data:
     try:
-        print(parser.parse(data["完成日"]))
-        print(datetime.date.today())
+        print(parser.parse(data["起始日"]), parser.parse(data["完成日"]))
         deltastart = (parser.parse(data["起始日"]).date()-datetime.date.today()).days
         deltaend = (parser.parse(data["完成日"]).date()-datetime.date.today()).days
         print(deltastart, deltaend)
+        info = ""
 
         if(deltastart <= 7 and data["完成度"] == "預定執行"):
-            message += "專案:" + data["專案"] + "\n"
-            message += "專案項目:" + data["專案項目"] + "\n"
-            message += "作業:" + data["執行項目"] + "\n"
-            message += "執行人員:" + data["指派對象"] + "\n"
-            message += "PM:" + data["PM"] + "\n"
-            message += "執行期間:" + data["起始日"] + "-" + data["完成日"]
+            info += "專案:" + data["專案"] + " / " + data["專案項目"] + "\n"
+            info += "作業:" + data["執行項目"] + "\n"
+            info += "執行人員:" + data["指派對象"] + "\n"
+            info += "PM:" + data["PM"] + "\n"
+            info += "執行期間:" + data["起始日"] + "-" + data["完成日"]
             if(deltastart>0):
-                message += " (尚有"+ str(deltastart) + "天)\n\n"
+                info += " (尚有"+ str(deltastart) + "天)\n\n"
             elif(deltastart==0):
-                message += " (當天開始執行)\n\n"
+                info += " (當天開始執行)\n\n"
             else:
-                message += " (過期"+ str(deltastart).replace('-','') + "天)\n\n"
+                info += " (過期"+ str(deltastart).replace('-','') + "天)\n\n"
+                overdue_email_content[data["PM"]] += info
+                has_overdue[data["PM"]] = 1
+                if data["PM"] != "Jared": #sometimes Jared is the PM
+                    overdue_email_content["Jared"] += info
+                    has_overdue["Jared"] = 1
+            message += info
+
 
         elif(deltaend <= 7 and data["完成度"] == "執行中"):
-            message2 += "專案:" + data["專案"] + "\n"
-            message2 += "專案項目:" + data["專案項目"] + "\n"
-            message2 += "作業:" + data["執行項目"] + "\n"
-            message2 += "執行人員:" + data["指派對象"] + "\n"
-            message2 += "PM:" + data["PM"] + "\n"
-            message2 += "完成日:" + data["完成日"]
+            info += "專案:" + data["專案"] + " / " + data["專案項目"] + "\n"
+            info += "作業:" + data["執行項目"] + "\n"
+            info += "執行人員:" + data["指派對象"] + "\n"
+            info += "PM:" + data["PM"] + "\n"
+            info += "完成日:" + data["完成日"]
             if(deltaend>0):
-                message2 += " (尚有"+ str(deltaend) + "天)\n\n"
+                info += " (尚有"+ str(deltaend) + "天)\n\n"
             elif(deltaend==0):
-                message2 += " (當天完成)\n\n"
+                info += " (當天完成)\n\n"
             else:
-                message2 += " (過期"+ str(deltaend).replace('-','') + "天)\n\n"
+                info += " (過期"+ str(deltaend).replace('-','') + "天)\n\n"
+                overdue_email_content[data["PM"]] += info
+                if data["PM"] != "Jared": #sometimes Jared is the PM
+                    overdue_email_content["Jared"] += info
+            message2 += info
 
     except:
         print("PASS")
 
-msg1 = [message[i:i+1000] for i in range(0, len(message), 1000)]
-for m1 in msg1:
-    #notify_group(m1) #annotated to prevent unintentional trigger
-    print(m1)
+message += "更新執行表單請至 https://cmm.ai/pm"
+message2 += "更新執行表單請至 https://cmm.ai/pm"
+
+messages = []
+messages.append(message)
+messages.append(message2)
+
+print(has_overdue)
 
-msg2 = [message2[i:i+1000] for i in range(0, len(message2), 1000)]
-for m2 in msg2:
-    #notify_group(m2)
-    print(m2)
+#send_line(messages) #annotated to prevent unintentional trigger
+#send_email(emails, overdue_email_content, has_overdue)
 
 '''notify_group(message)
 time.sleep(5)