zooey 1 year ago
parent
commit
1e81511abf

+ 9 - 8
INNNews/general_clickbot_local.py

@@ -32,11 +32,12 @@ def empty_query(q):
 
 
 def process_query(qs):
-    db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
-    table = db['general_log']
+    # db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
+    db = dataset.connect('postgresql://postgres:eyJhbGciOiJI@172.105.241.163:5432/postgres')
+    table = db['nad_log']
     q = qs[0]
     domain = qs[1]
-    client='引新聞'
+    client=qs[2]
     global driver
     googleurl = 'https://www.google.com/search?q={}&num={}&hl={}'.format(urllib.parse.quote(q), 100, 'zh-TW')
     print(googleurl)
@@ -47,7 +48,7 @@ def process_query(qs):
     
     idx = 1
     ranking = -1
-    print(len(elmts))
+    result = len(elmts)
     #    driver.save_screenshot('c:/tmp/test.png')
     for elmt in elmts:
         href = elmt.get_attribute('href')
@@ -57,13 +58,13 @@ def process_query(qs):
             print(href)
             print(txt)
             print("ranking", idx)
-            table.insert({'kw':q,'client':client,'ranking':idx,'title':txt,'url':href,'dt':datetime.datetime.now(),'domain':domain})
+            table.insert({'ranking':idx,'kw':q,'results':result,'url':href,'title':txt,'dt':datetime.datetime.now(),'client':client})
             db.close()
             print('clicked....')
             webdriver.ActionChains(driver).move_to_element(elmt).perform()
             webdriver.ActionChains(driver).move_to_element(elmt).click().perform()
             time.sleep(5)
-            break
+        els
       
         idx += 1
     
@@ -104,10 +105,10 @@ def run_once(q):
 
 class JParams(object):
     
-    def get(self, kw, domain):
+    def get(self, kw, domain,client):
         print(kw)
         print(domain)
-        run_once((kw, domain))
+        run_once((kw, domain,client))
 
 
 if __name__ == '__main__':

+ 1 - 6
INNNews/run_sheet_2.py

@@ -98,10 +98,5 @@ while True:
     run_specific()
     time.sleep(random.randint(120, 150))
 
-os.system('docker container stop sel2')
-time.sleep(3)
-os.system('docker container rm sel2')
-time.sleep(3)
-os.system('docker run -d -p 9922:4444 --name sel1 --add-host=host.docker.internal:host-gateway --shm-size="2g" selenium/standalone-chrome:103.0')
-time.sleep(6)
+#
 

+ 85 - 45
SEO/click_negative.py

@@ -30,8 +30,19 @@ import ast
 driver = None
 
 db = dataset.connect('postgresql://postgres:eyJhbGciOiJI@172.105.241.163:5432/postgres')
-
 # db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
+# headers = {
+#     "Authorization": "Bearer " + "ygIurYIfWgHj6HrQjOnVGh4rjXajZkeHuBYe12v8nTN",
+#     "Content-Type": "application/x-www-form-urlencoded"
+headers = {
+    "Authorization": "Bearer " + "OZDcq7sVKwr3F6YNLtBF3LuIgpa4Ql9eAnBWeD7sHTJ",
+    "Content-Type": "application/x-www-form-urlencoded"
+}
+
+def send_msg(kw):
+    params = {"message": kw}
+    print('通知結果', params)
+    r = requests.post("https://notify-api.line.me/api/notify", headers=headers, params=params)
 
 def re_get_webdriver():
     global port
@@ -45,7 +56,7 @@ def re_get_webdriver():
         print('quit....')
         driver = None
     try:
-        s = Service('/Users/mac/Downloads/119/chromedriver')
+        s = Service('/Users/mac/Downloads/123/chromedriver')
         options = webdriver.ChromeOptions()
         options.add_argument('--headless')
 
@@ -66,6 +77,9 @@ def run_once(jsobj):
     table = db['seo_jobs_ranking']
     history = db['seo_search_history']
     nda_log = db['nda_log']
+    delete_kw = db['delete_kw']
+    seo = db['seo']
+
 
     print(jsobj)
     neg_word = ast.literal_eval(jsobj['neg_word'])
@@ -79,7 +93,9 @@ def run_once(jsobj):
         time.sleep(3)
     try:
         kw = jsobj['kw']
-        googleurl = 'https://www.google.com/search?q={}&num={}&hl={}'.format(urllib.parse.quote(kw), 100, 'zh-TW')
+        domain = jsobj['domain']
+        # googleurl = 'https://www.google.com/search?q={}&num={}&hl={}&gl=tw'.format(urllib.parse.quote(kw), 100, 'zh-TW')
+        googleurl = 'https://www.google.com/search?q={}&num={}&hl={}&gl=tw&tbm=vid&tbs=vd:m'.format(urllib.parse.quote(kw), 100, 'zh-TW')
         driver.get(googleurl)
 
         time.sleep(6)
@@ -90,7 +106,8 @@ def run_once(jsobj):
         # elmt.send_keys(Keys.ENTER)
         # time.sleep(6)
 
-        elmts = driver.find_elements(By.XPATH, "//div[@class='yuRUbf']//a")
+        # elmts = driver.find_elements(By.XPATH, "//div[@class='yuRUbf']//a")
+        elmts = driver.find_elements(By.XPATH, "//div[@class='xe8e1b']//a")
 
         numresults = len(elmts)
 
@@ -102,7 +119,7 @@ def run_once(jsobj):
         #        time.sleep(9999)
 
         idx = 1
-        found = False
+        found = 0
         test_lst = []
         clickelmt = None
         neg_count = 0
@@ -112,6 +129,7 @@ def run_once(jsobj):
         clicktitle = ''
         for elmt in elmts:
             href = elmt.get_attribute('href')
+            # print(href)
             txt = elmt.text
             history.insert({'ranking': idx, 'kw': kw, 'results': numresults, 'url': href, 'title': txt,'dt':datetime.datetime.now()})
             # if '坑殺' in txt or '侵占' in txt or '判決書' in txt or '強佔' in txt or '掏空' in txt or '送達公告' in txt or '違反勞動'in txt:
@@ -119,14 +137,13 @@ def run_once(jsobj):
             #     neg_total+=idx
             # print('分數',neg_total, neg_count)
             for i in neg_word:
-                print(i)
                 if i in txt:
                     neg_count += 1
                     neg_total += idx
-            print('分數',neg_total, neg_count)
+                    break
+            # print('分數',neg_total, neg_count)
             if domain in href:
                 print('found....')
-
                 print(href)
                 print(txt)
                 print("ranking", idx)
@@ -135,60 +152,83 @@ def run_once(jsobj):
                 clickidx = idx
                 clickhref = href
                 clicktitle = txt
-                nda_log.insert({'ranking': idx, 'kw': kw, 'results': numresults, 'url': href, 'title': txt,'dt': datetime.datetime.now(), 'client': jsobj['client']})
-                webdriver.ActionChains(driver).move_to_element(elmt).perform()
-                webdriver.ActionChains(driver).move_to_element(elmt).click().perform()
-                print('clicked....')
-                time.sleep(5)
-                if neg_count == 0:
-                    negstr = '0'
-                else:
-                    negstr = str(neg_total / neg_count)
-                print(' negative: ' + negstr)
-                table.insert({'ranking': clickidx, 'kw': kw, 'results': numresults, 'url': domain, 'title': clicktitle,
-                              'avg_neg': negstr, 'dt': datetime.datetime.now()})
-                db.close()
-                break
+
+                found = 1
             else:
-                nda_log.insert({'ranking': -1, 'kw': kw, 'results': numresults, 'url': href, 'title': '未收錄','dt': datetime.datetime.now(), 'client': jsobj['client']})
+                if found == 1:
+                    not_found = 0
+                else:
+                    not_found = 1
             idx += 1
 
-        db.close()
+        if not_found == 1:
+            print('未收錄')
+            nda_log.insert({'ranking': -1, 'kw': kw, 'results': numresults, 'url': href, 'title': '未收錄','dt': datetime.datetime.now(), 'client': jsobj['client']})
+            seo.delete(kw=kw, domain=domain)
+            delete_kw.insert({'kw':kw,'domain':domain,'cust':jsobj['client'], 'dt':datetime.datetime.now()})
+            msg_1 = '未收錄:'+kw+' '+domain
+            msg_2 = jsobj['delete_kw_count']
+            send_msg(msg_1 + "\n" + str(msg_2))
+        else:
+            nda_log.insert({'ranking': clickidx, 'kw': kw, 'results': numresults, 'url': clickhref, 'title': clicktitle,'dt': datetime.datetime.now(), 'client': jsobj['client'], 'type':'vi'})
+            webdriver.ActionChains(driver).move_to_element(clickelmt).perform()
+            webdriver.ActionChains(driver).move_to_element(clickelmt).click().perform()
+            print('clicked....')
+            time.sleep(5)
+
+        if neg_count == 0:
+            negstr = 0
+        else:
+            negstr = neg_total / neg_count
+            print(negstr)
+        if negstr > 0 and negstr < 21:
+            print('警示字')
+            msg_1 = '警示字:' + kw
+            msg_2 = jsobj['delete_kw_count']
+            send_msg(msg_1 + "\n" + str(msg_2))
+            seo.delete(kw=kw, domain=domain)
+            delete_kw.insert({'kw': kw, 'domain': domain, 'cust': jsobj['client'],'dt':datetime.datetime.now()})
+        table.insert(
+            {'ranking': clickidx, 'kw': kw, 'results': numresults, 'url': domain, 'title': clicktitle, 'avg_neg': negstr,
+             'dt': datetime.datetime.now()})
 
     except:
         traceback.print_exc()
-
         print('exception')
         traceback.print_exc()
-        db.close()
-    driver.quit()
+        # db.close()
 
-cursor = db.query("select cust, json from public.seo_job where cust='信義房屋' order by random() limit 1")
-cursor_n = db.query("select * from public.neg_word where client='信義房屋'")
+    driver.quit()
 
-for c in cursor:
-    js_string = c['json']
-    js = json.loads(js_string)
-    prefix=js['prefix']
-    postfix=js['postfix']
-    domain=js['domain'][0]
-    positive=js['positive']
-    rnd=js['rnd']
 
-kw1=random.choice(positive)
-kw2=random.choice(rnd)
-# kw=kw1+" "+prefix+" "+kw2
-kw = prefix + " " + kw1
-for c in cursor_n:
-    neg_word = c['neg_word']
 
 
 while True:
-    run_once({'domain':domain,'kw':'信義 房屋','client':'信義房屋','neg_word':neg_word})
+
+
+    # cursor = db.query("select * from public.seo where cust='信義房屋' and type is NULL order by random() limit 1")
+    cursor = db.query("select * from public.seo where cust='信義房屋' and type='vi' order by random() limit 1")
+    # cursor = db.query("select * from public.seo where id=627")
+    cursor_n = db.query("select * from public.neg_word where client='信義房屋'")
+    cursor_d = db.query("select * from public.delete_kw where now()::date = dt::date")
+
+    for c in cursor:
+        kw = c['kw']
+        domain = c['domain']
+
+    d = {'啟翔':0,'加百裕':0,'富玉':0,'信義房屋':0,'真理大學':0}
+    for c in cursor_d:
+        if c['cust'] in d.keys():
+            d[c['cust']]+=1
+    print(d)
+    for c in cursor_n:
+        neg_word = c['neg_word']
+
+    run_once({'domain':domain,'kw':kw,'client':'信義房屋','neg_word':neg_word,'delete_kw_count':d})
+    # db.close()
     print('等待下次執行')
     time.sleep(80)
 
 
 
 
-

+ 18 - 17
SEO/clickbot_100_one.py

@@ -25,13 +25,13 @@ driver = None
 def restart_browser():
     global driver
     user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'
-    s = Service('C:\/Users\/s1301\/Downloads\/chromedriver_116\/chromedriver-win32\/chromedriver')
+    s = Service('/Users/mac/Downloads/123/chromedriver')
     options = webdriver.ChromeOptions()
     options.add_argument('--headless')
     # options.add_argument('--remote-debugging-port=9222')
     # options.add_experimental_option("debuggerAddress", "192.168.192.45:9922")
     options.add_argument("--user-agent=" + user_agent)
-    # options.add_argument("--incognito")
+    options.add_argument("--incognito")
     # options.add_argument('--proxy-server=socks5://172.104.93.163:41800')
     driver = webdriver.Chrome(options=options, service=s)
 
@@ -43,32 +43,32 @@ def restart_browser():
 def process_one():
     # lst=['信義房屋','信義 房屋','信義房仲','信義 房仲']
     # lst=["親子育兒交流 奶爸","產後瘦身益生菌","產後瘦身推薦"]
-    lst=['雙響泡','双響泡','雙響砲']
-    # lst = ['小羊水果']
-    # lst = ['巨力搬家']
-    # lst = ['台中搬家推薦','桃園搬家推薦','新竹搬家推薦']
-    # lst = ['地面課程','出國學飛','自訓學飛']
+    # lst=['真理大學','真理大學停招','真理大學倒閉','真理大學評價','真理大學倒閉dcard']
+    # lst = ['富玉珠寶']
+    # lst = ['信義 房屋']
+    # lst = ['加百裕工業股份有限公司','加百裕','黃靖容']
+    # lst = ['富玉珠寶','富玉珠寶有限公司']
     # lst = ['台北牙周病醫生推薦 ','微創水雷射','水雷射牙周病']
-    # lst = ['地面課程','出國學飛','自訓學飛']
-    # lst = ['樂活眼鏡評價','樂活眼鏡']
-    # lst = ['新竹搬家推薦','台中搬家推薦','桃園搬家推薦']
-    # lst = ['芙樂思蜂王漿乳霜','蜂王漿乳霜']
+    # lst = ['真理大學 site:ptt.cc','真理大學 site:dcard.tw']
     # lst = ['涼夏清爽','夏季口罩','石墨烯','透氣 口罩','夏天口罩推薦','夏天立體口罩']
-    # lst = ['啟翔輕金屬','啟翔','陳百欽']
-    date='0907'
+    lst = ['啟翔輕金屬','啟翔','陳百欽']
+    date='0321'
 
     for term in lst:
         driver=restart_browser()
         escaped_search_term=urllib.parse.quote(term)
         googleurl = 'https://www.google.com/search?q={}&num={}&hl={}&gl=tw'.format(escaped_search_term, 100,'zh-TW')
-        # googleurl='https://www.google.com/search?q=%E9%9B%99%E9%9F%BF%E7%A0%B2&num=100&rlz=1C1ONGR_zh-TWTW1033TW1033&oq=%E9%9B%99%E9%9F%BF%E7%A0%B2&aqs=chrome..69i57j69i61.414j0j1&sourceid=chrome&ie=UTF-8#ip=1&gl=tw&hl=zh-TW'
+        # googleurl = 'https://www.google.com/search?q={}&num={}&hl={}&gl=tw&tbm=vid&tbs=vd:m'.format(urllib.parse.quote(term), 100, 'zh-TW')
+
         driver.get(googleurl)
         time.sleep(6)
         print(driver.current_url)
 
-        driver.save_screenshot('C:\/Users\/s1301\/OneDrive\/Pictures\/Saved Pictures\/'+date+term+'.png')
+        driver.save_screenshot('/Users/mac/Downloads/'+date+term+'.png')
+        # driver.save_screenshot('/Users/mac/Downloads/'+date+term+"_vi"+'.png')
         df=pd.DataFrame()
         elmts=driver.find_elements(By.XPATH,"//div[@class='yuRUbf']//a")
+        # elmts=driver.find_elements(By.XPATH,"//div[@class='xe8e1b']//a")
         print(len(elmts))
         cnt=1
         datadict={'搜尋詞':[],'結果標題':[],'結果網址':[],'結果名次':[]}
@@ -95,11 +95,12 @@ def process_one():
         df['結果網址']=datadict['結果網址']
         df['結果名次']=datadict['結果名次']
 
-        df.to_excel('C:\/Users\/s1301\/OneDrive\/Pictures\/Saved Pictures\/'+date+term+".xls")
+        df.to_csv('/Users/mac/Downloads/'+date+term+".csv", encoding='utf-8')
+        # df.to_csv('/Users/mac/Downloads/'+date+term+"_vi"+".csv")
 
         driver.quit()
         print('等待')
-        time.sleep(random.randint(100,120))
+        time.sleep(random.randint(80,90))
 process_one()
 
 

+ 9 - 11
SEO/csv_to_sql.py

@@ -8,27 +8,27 @@ pymysql.install_as_MySQLdb()
 
 db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
 # table=db['seo_jobs']
-# table=db['selected_kw']
+table=db['selected_kw']
 # table=db['sns_kw']
-table=db['select_kw']
-client='幸福空間'
-domain='hhh.com.tw'
+# table=db['select_kw']
+client='興安'
+# domain='naturalbenefits-hpp'
 # for index,row in df.iterrows():
 # with open("C:\/Users\/s1301\/Documents\/新飛國際遊學SEO - 關鍵字12.08.csv") as f:
 #     data_all = f.readlines()
-# print(data_all)C:\Users\s1301\OneDrive\Documents
-f = open("C:\/Users\/s1301\/OneDrive\/Documents\/456.csv",encoding='utf-8')
+# print(data_all)
+f = open("/Users/mac/Downloads/456.csv")
 # df = pd.read_csv(f,header=None, names=['kw', 'url'])
 df = pd.read_csv(f,header=None, names=['kw'])
 # df = pd.read_csv(f,header=None, names=['prefix','id', 'positive','domain','rnd'])
 df=df.fillna('')
 # print(df)
-# url='fflc.tw'
+domain='ataraxis.com.tw'
 lst=[]
 for index,row in df.iterrows():
     # print(row)
     # prefix='"'+row['prefix']+'"'
-    # positive='"'+row['positive']+'"'
+    # # positive='"'+row['positive']+'"'
     # positive=row['positive']
     # domain='"'+row['domain']+'"'
     # rnd='"'+str(row['rnd'])+'"'
@@ -40,9 +40,7 @@ for index,row in df.iterrows():
     # table.insert({'cust':client,'plan':'形象SEO','json':json})
     table.insert({'term':row['kw'],'client':client,'domain':domain})
     # table.insert({'term': row['kw'], 'client': client, 'url': row['url']})
-# print(lst)
 
 db.close()
 
-####先從雲端下載csv 再用記事本打開另存一個csv#########
-
+####先從雲端下載csv 再用記事本打開另存一個csv#########

+ 24 - 88
SEO/exp_100.py

@@ -1,97 +1,33 @@
-import random
-import sys
-import dataset
-from selenium import webdriver
-import traceback
-import datetime
-import codecs
-import time
-import urllib
-import argparse
-import schedule
-
-import logging
-import sys
-from logging.handlers import SysLogHandler
-import socket
 import pandas as pd
-import socket
-import os
-#logger.debug('[clickbot_100][清原]begin')
-
-hname=socket.gethostname()
-pid=str(os.getpid())
-
-
-def restart_browser():
-    options = webdriver.ChromeOptions()
-    options.add_argument('--headless') 
-    driver=webdriver.Chrome(options=options)
-    driver.set_window_size(950,6000)
-    return driver
-
-
-def process_one():
-    db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
-    lst=[]
-#    table=db['google_rank']
-#    cursor = db.query('select term from seo.selected_kw')
-    # cursor=db.query('select term from selected_kw and term not in (SELECT distinct(keyword) FROM ig_tags.save_result where url like "%beastparadise.net%" and datediff(now(),dt)=0)')
-#    for c in cursor:
-#        lst.append(c['term'])
+import dataset
+import json
+import pymysql
+pymysql.install_as_MySQLdb()
 
-#    term=random.choice(lst)
-    term='tha 娛樂城'
-    print(term)
-    driver=restart_browser()
-    escaped_search_term=urllib.parse.quote(term)
-    googleurl = 'https://www.google.com/search?q={}&num={}&hl={}'.format(escaped_search_term, 100,'zh-TW')
+# df = pd.read_csv(r"C:\/Users\/s1301\/Documents\/關鍵字建議.csv",engine='python')
 
-    print(googleurl)
-    driver.get(googleurl)
-    time.sleep(6)
-    fname=term.replace(' ','_')
-    driver.save_screenshot('c:/tmp/seo/'+fname+'.png')
-    df=pd.DataFrame()
-    # driver.get_screenshot_as_file("/Users/zooeytsai/排名100.png")
-    elmts=driver.find_elements_by_xpath("//div[@class='yuRUbf']/a")
 
-    clickelmt=None
-    cnt=1
-    datadict={'搜尋詞':[],'結果標題':[],'結果網址':[],'結果名次':[]}
-    
-    for elmt in elmts:
-        try:
-            href=elmt.get_attribute('href')
-            if 'taroboba-yuan.com' in href:
-                clickelmt=elmt
+db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
+# table=db['seo_jobs']
+table=db['selected_kw']
 
-            print(href)
-            print(elmt.text)
-            datadict['搜尋詞'].append(term)
-            datadict['結果標題'].append(elmt.text)
-            datadict['結果網址'].append(href)
-            datadict['結果名次'].append(str(cnt))
+f = open("/Users/mac/Downloads/456.csv")
 
-            cnt+=1
-        except:
-            print('href2 exception')
-            traceback.print_exc()
-    if clickelmt:
-        webdriver.ActionChains(driver).move_to_element(clickelmt).perform()
-        webdriver.ActionChains(driver).move_to_element(clickelmt).click().perform()
-    if len(datadict['結果標題'])<=0:
-        print('None')
-        driver.quit()
-        sys.exit()
-    df['搜尋詞']=datadict['搜尋詞']
-    df['結果標題']=datadict['結果標題']
-    df['結果網址']=datadict['結果網址']
-    df['結果名次']=datadict['結果名次']
+df = pd.read_csv(f,header=None, names=['id','cust','plan','json','is_nda','term'])
+df=df.fillna('')
 
-#    df.to_excel('/Users/zooeytsai/'+fname+".xls")
-    df.to_excel('c:/tmp/seo/'+fname+".xls")
+for index,row in df.iterrows():
+    print(row)
+    parsed_data = json.loads(row['json'])
+    id = row['id']
+    cust = row['cust']
+    plan = row['plan']
+    kw = parsed_data['prefix']
+    domain = parsed_data['domain']
+# table.insert({'cust':'','plan':'形象SEO','json':json})
+    table.insert({'term':kw,'client':cust,'domain':domain})
+    # table.insert({'term': row['kw'], 'client': client, 'url': row['url']})
 
-    driver.quit()
+db.close()
 
-process_one()
+####先從雲端下載csv 再用記事本打開另存一個csv#########

+ 14 - 23
SEO/notify_nda.py

@@ -1,4 +1,4 @@
-import redis
+
 import time
 import json
 from selenium import webdriver
@@ -31,39 +31,30 @@ headers = {
 def send_msg(kw):
     params = {"message": kw}
     print('通知結果', params)
-    # r = requests.post("https://notify-api.line.me/api/notify", headers=headers, params=params)
+    r = requests.post("https://notify-api.line.me/api/notify", headers=headers, params=params)
 
 
-db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
-cursor = db.query('SELECT * FROM seo.nda_log where datediff(now(),dt)=0 order by dt desc')
+# db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
+db = dataset.connect('postgresql://postgres:eyJhbGciOiJI@172.105.241.163:5432/postgres')
+# cursor = db.query('SELECT * FROM seo.nda_log where datediff(now(),dt)=0 order by dt desc')
+cursor = db.query('SELECT * FROM public.seo_jobs_ranking where CAST(avg_neg AS numeric) = 0 and now()::date = dt::date')
 
 result = "\n"
 idx = 0
-d = {'龔國權': 0, '信義': 0, '護': 0, 'angelo koo': 0,'雙響':0,'双響泡':0}
-d_computer = {'64G':0,'p1':0,'p2':0,'i5':0,'156':0,'139':0}
+lst = []
+result = ""
 for c in cursor:
-    custom_name = c['kw']
-    client = c['client']
-    for i in d:
-        check = re.match(i,custom_name)
-        if check:
-            d[i] += 1
-    for j in d_computer:
-        check_2 = re.match(str(j),str(client))
-        if check_2:
-            d_computer[j]+=1
+    lst.append(c['kw'])
+    result+=f"{c['kw']}\n"
+
 
-per_total_click = f"雙響泡:{d['雙響']}\n双響泡:{d['双響泡']}\nKNIGHT:{d['龔國權']}\n信義房屋:{d['信義']}\n護佳:{d['護']}\n美東:{d['angelo koo']}\n"
-computer_total_click = f"64G:{d_computer['64G']}\np1:{d_computer['p1']}\np2:{d_computer['p2']}\ni5:{d_computer['i5']}\n156" \
-                       f":{d_computer['156']}\n139:{d_computer['139']}\n"
-print(per_total_click)
-print(computer_total_click)
-msg_per_total_click = '\n點擊次數總計:\n' + per_total_click
+msg_per_total_click = '\n分數等於0分的關鍵字:\n' + result
+print(msg_per_total_click)
 msg = "\n機器人執行次數:" + str(idx)
 
 
 # print(msg_per_total_click + result + sns_per_total_click + sns_result + ga_sessions)
-send_msg(msg_per_total_click + result + computer_total_click)
+send_msg(msg_per_total_click)
 db.close()
 
 # schtasks /create /sc minute /mo 30 /sd 2022/05/050 /st 9:00 /et 23:00 /tn "linebat" /tr "C:\tmp\inn_line.bat"

+ 0 - 0
SEO/notify_zero.py


+ 8 - 7
SEO/ranking_report.py

@@ -3,8 +3,8 @@ import dataset
 import pymysql
 pymysql.install_as_MySQLdb()
 
-name='美麗馨'
-date = '0216'
+name='新飛'
+date = '0321'
 
 
 def day():
@@ -18,13 +18,14 @@ def day():
 
     rank_lst = []
     for i in kw_lst:
-        cursor_general = db.query(f'select kw,ranking from seo.general_log where kw = "{i}" order by dt desc limit 1')
+        cursor_general = db.query(f'select kw,ranking,url from seo.google_bank where kw = "{i}" order by dt desc limit 1')
         for c in cursor_general:
-            rank_lst.append([c['kw'],c['ranking']])
+            rank_lst.append([c['kw'],c['ranking'],c['url']])
     db.close()
-    df1 = pd.DataFrame(rank_lst,columns=['kw','ranking'])
+    df1 = pd.DataFrame(rank_lst,columns=['kw','ranking','url'])
     df_result = pd.merge(df, df1, on='kw', how='outer').fillna(101)
-    df_result.to_csv(f"C:\/Users\/s1301\/Documents\/{date}{name}關鍵字排名.csv", index=False)
+    df_result.to_csv(f"/Users/mac/Documents/wk/{date}{name}關鍵字排名.csv", index=False)
     print('完成')
 
-day()
+day()
+

+ 12 - 12
SEO/ranking_world.py

@@ -14,7 +14,7 @@ from selenium.webdriver.common.keys import Keys
 import json
 import random
 import time
-import redis
+
 import sys
 import codecs
 import pandas as pd
@@ -28,7 +28,7 @@ import pymysql
 
 pymysql.install_as_MySQLdb()
 
-from userAgentRandomizer import userAgents
+
 import requests
 
 driver = None
@@ -57,15 +57,15 @@ def re_get_webdriver():
         print('quit....')
         driver = None
     try:
-        ua = userAgents()
-
-        user_agent = ua.random()
-
+        # ua = userAgents()
+        #
+        # user_agent = ua.random()
+        s = Service('/Users/mac/Downloads/121/chromedriver')
         options = webdriver.ChromeOptions()
         options.add_argument("--no-sandbox")
         options.add_argument("--disable-dev-shm-usage")
         # options.add_argument("--headless")
-        print(user_agent)
+
         options.add_experimental_option('prefs', {'intl.accept_languages': 'en,en_US'})
         options.add_argument("--incognito")
         driver = None
@@ -74,7 +74,7 @@ def re_get_webdriver():
                 driver = webdriver.Chrome(options=options)
 
             else:
-                driver = webdriver.Chrome(executable_path=r'C:\Users\Administrator\Downloads\chromedriver_108\chromedriver', options=options)
+                driver = webdriver.Chrome(service=s, options=options)
         except:
             traceback.print_exc()
             return
@@ -145,7 +145,7 @@ def run_once(jsobj):
         scrolling(driver, 10)
         time.sleep(20)
 
-        elmts = driver.find_elements(By.XPATH, "//div[@class='yuRUbf']/a")
+        elmts = driver.find_elements(By.XPATH, "//div[@class='yuRUbf']//a")
         numresults = len(elmts)
         print('搜尋結果數量', numresults)
         time.sleep(20)
@@ -220,8 +220,8 @@ def run_once(jsobj):
         df['結果網址'] = datadict['結果網址']
         df['結果名次'] = datadict['結果名次']
         df['結果說明'] = datadict['結果說明']
-
-        df.to_excel('C:\/Users\/s1301\/Pictures\/Saved Pictures\/angelo koo\/'+date+fname+".xls")
+        print('/Users/mac/Documents/wk/'+date+fname+".csv")
+        df.to_csv('/Users/mac/Documents/wk/'+date+fname+".csv")
 
 
 
@@ -241,7 +241,7 @@ d = {'ny':"https://www.google.com/search?q=angelo+koo&hl=en&gl=us&num=100&uule=w
      'chicago':"https://www.google.com/search?q=angelo+koo&hl=en&gl=us&num=100&uule=w+CAIQICIeQ2hpY2FnbyxJbGxpbm9pcyxVbml0ZWQgU3RhdGVz&gws_rd=cr"}
 
 location = 'chicago'
-run_once({'kw':'angelo koo','fname':location,'date':'0216','url':d[location]})
+run_once({'kw':'angelo koo','fname':location,'date':'0229','url':d[location]})
 
 ####手動截圖:須按右下角的設定選擇區域######
 ny="https://www.google.com/search?q=angelo+koo&hl=en&gl=us&num=100&uule=w+CAIQICIWTmV3IFlvcmssVW5pdGVkIFN0YXRlcw&gws_rd=cr"

+ 10 - 74
SEO/seo_notify_gs.py

@@ -1,22 +1,6 @@
-import redis
-import time
-import json
-from selenium import webdriver
-from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
-import time
-import os
-import urllib.parse
-from selenium.webdriver.support.ui import WebDriverWait
-from selenium.webdriver.common.by import By
-from selenium.webdriver.support import expected_conditions as EC
-import codecs
-import random
-from bs4 import BeautifulSoup
 import requests
 import dataset
 import time
-import sys
-import docker
 import pymysql
 pymysql.install_as_MySQLdb()
 # from ga_click import main
@@ -26,68 +10,20 @@ headers = {
     "Content-Type": "application/x-www-form-urlencoded"
 }
 
-name = {'taroboba-yuan.com': '清原', 'hhh.com.tw': ['幸福空間', '幸福空間設計師'], 'sctt.com.tw': '仁本',
-        'gs-rack.com': '神助物流', 'gs-rack.com/tag': '神助物流', 'bennis.com.tw': '班尼斯', 'yogoclean.com': '有夠讚',
-        'yesonlineeng.com': '新飛'}
+def send_msg(d):
+    params = {"kw數量": d}
+    print('通知結果', params)
+    # r = requests.post("https://notify-api.line.me/api/notify", headers=headers, params=params)
 
 
-def send_msg(kw):
-    params = {"message": kw}
-    # print('通知結果', params)
-    # r = requests.post("https://notify-api.line.me/api/notify", headers=headers, params=params)
+db = dataset.connect('postgresql://postgres:eyJhbGciOiJI@172.105.241.163:5432/postgres')
 
+d = {'啟翔':0,'加百裕':0,'富玉':0,'信義房屋':0}
 
-db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/seo?charset=utf8mb4')
-cursor = db.query(
-    'SELECT * FROM seo.general_log where domain != "innews.com.tw" and datediff(now(),dt)=0 order by dt desc')
-time.sleep(5)
-cursor_sns = db.query(
-    'SELECT * FROM seo.sns_log where datediff(now(),dt)=0 order by dt desc')
-result = "\n"
-idx = 0
-d = {'yogoclean.com': 0, 'sogoodday.com.tw': 0, 'vickybrain.com': 0, 'crclinic072.com': 0, 'planta.com.tw': 0,
-     'misaglobal.org': 0,
-     'kuchichun.com': 0, 'reformbio.asia': 0, 'www.heartwealthy.com': 0, 'cliqproducts.com.tw': 0,'www.hujiai-international.com':0,
-     'lisinbeauty.com':0,'simpleprotein.tw':0,'taroboba-yuan.com':0,'kolin.com.tw':0,'yesonlineeng.com':0}
+cursor = db.query("select * from public.seo")
 for c in cursor:
-    custom_name = c['domain']
-    if custom_name in d:
-        if custom_name == 'hhh.com.tw' and c['num'] == 1:
-            d['hhh.com.tw/designer'] += 1
-        d[custom_name] += 1
-    idx += 1
-    if idx <= 3:
-        elmt = c['kw']
-        domain = c['domain']
-        try:
-            custom_name = name[domain]
-        except:
-            pass
-        result += "[" + str(c['ranking']) + "]:" + elmt + " " + f"({custom_name})\n"
-sns_result = ""
-sns_d = {'班尼斯': 0}
-for c in cursor_sns:
-    elmt = c['kw']
-    title = c['title']
-    custom_name = c['client']
-    if custom_name in sns_d:
-        sns_d[custom_name] += 1
-    sns_result = f"\n[{c['ranking']}] {elmt} {title}"
-
-per_total_click = f"有夠讚:{d['yogoclean.com']}\n好晴天:{d['sogoodday.com.tw']}\n薇懠:{d['vickybrain.com']}\n宏康:{d['crclinic072.com']}\nplantA:{d['planta.com.tw']}\nmisa:{d['misaglobal.org']}\n辜琦鈞:{d['kuchichun.com']}\n瑞福:{d['reformbio.asia']}\n鑫富:{d['www.heartwealthy.com']}\nCLIQ露營椅:{d['cliqproducts.com.tw']}\n護全:{d['www.hujiai-international.com']}\n美麗馨:{d['lisinbeauty.com']}\n極簡乳清:{d['simpleprotein.tw']}\n清原:{d['taroboba-yuan.com']}\n歌林:{d['kolin.com.tw']}\n新飛:{d['yesonlineeng.com']}\n"
-sns_per_total_click = f"\n"
-print(per_total_click)
-print(sns_per_total_click)
-# print(sns_result)
-msg_per_total_click = '\n點擊次數總計:\n' + per_total_click
-msg = "\n機器人執行次數:" + str(idx)
-# ga_sessions = '\n幸福空間的GA Sessions' + main()['ga:sessions']
-sns_per_total_click = '\n點擊次數總計:\n' + sns_per_total_click
-# print(msg_per_total_click + result + sns_per_total_click + sns_result + ga_sessions)
-send_msg(msg_per_total_click + result + sns_per_total_click + sns_result)
-db.close()
+    if c['cust'] in d.keys():
+        d[c['cust']]+=1
 
-# schtasks /create /sc minute /mo 30 /sd 2022/05/050 /st 9:00 /et 23:00 /tn "linebat" /tr "C:\tmp\inn_line.bat"
+send_msg(d)
 
-SCRIPT_DIR = os.path.dirname(os.path.abspath(__file__))
-sys.path.append(os.path.dirname(SCRIPT_DIR))

+ 8 - 7
web/main.py

@@ -11,10 +11,10 @@ from fastapi import FastAPI, Form, Response, File, UploadFile, Request
 import subprocess
 import suggests
 from typing import Optional
-import networkx as nx
-import pyvis
-import time
-from pyvis.network import Network
+# import networkx as nx
+# import pyvis
+# import time
+# from pyvis.network import Network
 import pickle
 import logging
 import threading
@@ -40,7 +40,7 @@ from pathlib import Path
 from tempfile import NamedTemporaryFile
 from typing import Callable
 import shutil
-import aiofiles
+# import aiofiles
 from io import StringIO
 
 
@@ -62,7 +62,7 @@ app.add_middleware(
 
 db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/gtrends?charset=utf8mb4')
 
-app.mount("/web", StaticFiles(directory="/Users/zooeytsai/kw_tools/web/static"), name="static")
+app.mount("/web", StaticFiles(directory="/Users/mac/PycharmProjects/kw_tools/web/static"), name="static")
 # app.mount("/web", StaticFiles(directory="/root/src/kw_tools/web/static"), name="static")
 
 def thread_function(kw):
@@ -334,4 +334,5 @@ async def kwtree(file: UploadFile = File(...)):
 
     # sys.exit()
 
-    return FileResponse(f'/Users/zooeytsai/kw_tools/choozmo/news{news_file}.html',media_type='text/html')
+    return FileResponse(f'/Users/mac/PycharmProjects/kw_tools/web/news{news_file}.html',media_type='text/html')
+

+ 1 - 1
web/runserver.py

@@ -3,4 +3,4 @@ import sys,os
 sys.path.append(os.getcwd())
 
 if __name__ == "__main__":
-    uvicorn.run("main:app", host="0.0.0.0", port=9005, log_level="info",reload=True, debug=True)
+    uvicorn.run("main:app", host="0.0.0.0", port=9005, log_level="info",reload=True)