def AddUser(self, inROW, inUser): ## wAccount = inROW['account'] ## ############################# ## # ユーザ名の変換 ## wFulluser = CLS_UserData.sGetFulluser( wAccount['username'], wAccount['url'] ) ## if wFulluser['Result']!=True : ## ###今のところ通らないルート ## self.Obj_Parent.OBJ_Mylog.Log( 'a', "CLS_UserCorr: AddUser: sGetFulluser failed: " + wFulluser['Reason'] ) ## return False #スルー ############################# # 除外トゥート ## ###自分 ## if wFulluser['Fulluser'] == self.Obj_Parent.CHR_Account : ## return False #スルーする ## ## ###外人 (日本人限定=ON時) ## if inROW['language']!="ja" and gVal.STR_MasterConfig["JPonly"]=="on" : ## self.Obj_Parent.OBJ_Mylog.Log( 'c', "CLS_UserCorr: AddUser: 日本人以外を検出(登録除外): " + wFulluser['Fulluser'] ) ## return False #スルーする ## ## ###除外ドメイン ## if wFulluser['Domain'] in gVal.STR_DomainREM : ## self.Obj_Parent.OBJ_Mylog.Log( 'c', "CLS_UserCorr: AddUser: 除外ドメインを検出(登録除外): " + wFulluser['Fulluser'] ) ## return False #スルーする ## ###今回関わったユーザ if inUser['Fulluser'] in self.ARR_UpdateUser: return False #スルーする self.ARR_UpdateUser.append(inUser['Fulluser']) # ここまでで登録処理確定 ############################# self.STR_Stat['Cope'] += 1 ############################# # postgreSQL対策で ' 文字を消す wResReplace = CLS_OSIF.sRe_Replace( "'", str(inROW['account']['display_name']), "''") ### "Result" : False, ### "Match" : False, ### "After" : None if wResReplace['Result'] != True: self.Obj_Parent.OBJ_Mylog.Log( 'a', "CLS_UserCorr: AddUser: sRe_Replace is failed: display_name=" + str(inROW['account']['display_name'])) return False if wResReplace['Match'] == True: wDisplay_Name = wResReplace['After'] else: wDisplay_Name = str(inROW['account']['display_name']) ############################# # セット用領域の作成 wUserData = {} wUserData.update({"id": inUser['Fulluser']}) ### wUserData.update({ "username" : str( inROW['account']['display_name'] ) }) wUserData.update({"username": wDisplay_Name}) wUserData.update({"domain": inUser['Domain']}) wUserData.update({"status": "-"}) wUserData.update({"followed": False}) wUserData.update({"locked": False}) wUserData.update({"lupdate": ""}) ## status ## @ フォローチェック予約(まだ未フォロー) ## - フォローチェック済 ## D ドメインブロックユーザ ## R リムーブ予約 ## X チェックもしくはフォロー失敗 ## * リストから消す ############################# # ステータスの設定 ###鍵の有無 ## if wAccount['locked']==True : if inROW['account']['locked'] == True: wUserData['locked'] = True ###更新時間 (mastodon時間) wTime = CLS_OSIF.sGetTimeformat(inROW['created_at']) if wTime['Result'] == True: wUserData['lupdate'] = wTime['TimeDate'] ############################# # DB接続 wOBJ_DB = CLS_PostgreSQL_Use(gVal.DEF_STR_FILE['DBinfo_File']) wRes = wOBJ_DB.GetIniStatus() if wRes['Result'] != True: ##失敗 self.Obj_Parent.OBJ_Mylog.Log( 'a', "CLS_UserCorr: AddUser: DB Connect test is failed: " + wRes['Reason']) wOBJ_DB.Close() return False ## ############################# ## # ユーザ存在チェック ## wQuery = "id = '" + wUserData['id'] + "'" ## wDBRes = wOBJ_DB.RunExist( inObjTable="TBL_USER_DATA", inWhere=wQuery ) ## wDBRes = wOBJ_DB.GetQueryStat() ## if wDBRes['Result']!=True : ## ##失敗 ## self.Obj_Parent.OBJ_Mylog.Log( 'a', "CLS_UserCorr: AddUser: Run Query is failed: " + wDBRes['Reason'] + " query=" + wDBRes['Query'] ) ## wOBJ_DB.Close() ## return False ## ############################# # ユーザ取得 wQuery = "select * from TBL_USER_DATA where id = '" + wUserData[ 'id'] + "' ;" wDBRes = wOBJ_DB.RunQuery(wQuery) wDBRes = wOBJ_DB.GetQueryStat() if wDBRes['Result'] != True: ##失敗 self.Obj_Parent.OBJ_Mylog.Log( 'a', "CLS_UserCorr: AddUser: Run Query is failed: " + wDBRes['Reason'] + " query=" + wDBRes['Query']) wOBJ_DB.Close() return False wFLG_AddUser = False ############################# # クエリの作成 ###なければ追加 ## if wDBRes['Responce']==False : if len(wDBRes['Responce']['Data']) == 0: ###ステータスがなければ、チェック候補にする if wUserData['status'] == "-": wUserData['status'] = "@" wQuery = "insert into TBL_USER_DATA values (" + \ "'" + wUserData['id'] + "'," + \ "'" + wUserData['username'] + "'," + \ "'" + wUserData['domain'] + "'," + \ "'" + wUserData['status'] + "'," + \ str(wUserData['followed']) + "," + \ str(wUserData['locked']) + "," + \ "'" + str(wUserData['lupdate']) + "' " + \ ") ;" wFLG_AddUser = True ###あれば更新 else: wChgList = [] if wOBJ_DB.ChgList(wDBRes['Responce']['Data'], outList=wChgList) != True: ##ないケースかも self.Obj_Parent.OBJ_Mylog.Log( 'a', "CLS_UserCorr: AddUser: Select data is Zero") wOBJ_DB.Close() return False wChgList = wChgList[0] #1行しかないし切る ###領域に詰め直す ## wUserData['id'] = wChgList[0] ## wUserData['username'] = wChgList[1] ## wUserData['domain'] = wChgList[2] ### wUserData['status'] = wChgList[3] ### wUserData['followed'] = wChgList[4] wUserData['status'] = wChgList[0][3] wUserData['followed'] = wChgList[0][4] ## wUserData['locked'] = wChgList[5] ## wUserData['lupdate'] = wChgList[6] wQuery = "update TBL_USER_DATA set " + \ "status = '" + str(wUserData['status']) + "', " + \ "locked = '" + str(wUserData['locked']) + "', " + \ "lupdate = '" + str(wUserData['lupdate']) + "' " + \ "where id = '" + wUserData['id'] + "' ;" ############################# # クエリ実行 wDBRes = wOBJ_DB.RunQuery(wQuery) wDBRes = wOBJ_DB.GetQueryStat() if wDBRes['Result'] != True: ##失敗 self.Obj_Parent.OBJ_Mylog.Log( 'a', "CLS_UserCorr: AddUser: DB insert is failed: " + wDBRes['Reason'] + " query=" + wDBRes['Query']) wOBJ_DB.Close() return False ############################# # DB切断 wOBJ_DB.Close() ############################# # 結果を記録 if wFLG_AddUser == True: ## self.Obj_Parent.OBJ_Mylog.Log( 'c', "CLS_UserCorr: AddUser: ユーザ追加: " + inUser['Fulluser'] ) self.STR_Stat['UserAdd'] += 1 else: ## self.Obj_Parent.OBJ_Mylog.Log( 'c', "CLS_UserCorr: AddUser: ユーザ更新: " + inUser['Fulluser'] ) self.STR_Stat['UserUpdate'] += 1 return True
def __getTrends(self): self.ARR_Trend = {} wARR_Trend = [] wARR_SetTrend = {} ############################# # TL取得 wRes = self.Obj_Parent.OBJ_MyDon.GetTrends() if wRes['Result'] != True: return wRes #失敗 wARR_Trend = wRes['Responce'] #toot list(json形式) ###sample # {'name': 'introduction', # 'url': 'https://fedibird.com/tags/introduction', # 'history': [ # {'day': '1573430400', 'uses': '1', 'accounts': '1'}, # {'day': '1573344000', 'uses': '8', 'accounts': '8'}, # {'day': '1573257600', 'uses': '4', 'accounts': '3'}, # {'day': '1573171200', 'uses': '37', 'accounts': '31'}, # {'day': '1573084800', 'uses': '19', 'accounts': '17'}, # {'day': '1572998400', 'uses': '1', 'accounts': '1'}, # {'day': '1572912000', 'uses': '0', 'accounts': '0'}]} ############################# # 情報を丸めこむ wIndex = 0 wRank = 1 for wLine in wARR_Trend: ############################# # ハッシュタグTLとして取得できるか wResHash = self.Obj_Parent.OBJ_MyDon.GetHashtagTL( hashtag=wLine['name'], limit=1) if wResHash['Result'] != True: ### APIの失敗 self.Obj_Parent.OBJ_Mylog.Log( 'a', "CLS_Trend: Get_Trend: GetHashtagTL is failed: " + wLine['name'] + " reason=" + wResHash['Reason']) continue if len(wResHash['Responce']) == 0: ### TLがない self.Obj_Parent.OBJ_Mylog.Log('c', "Hashtag TLなし: " + wLine['name']) self.STR_Cope['No_HashtagTL'] += 1 continue ### トゥート時間を取得 wTootTD = "None" #更新時間 (mastodon時間) wGetTime = CLS_OSIF.sGetTimeformat( wResHash['Responce'][0]['created_at']) if wGetTime['Result'] == True: wTootTD = wGetTime['TimeDate'] ############################# # トレンド値を計算 # 2時間以内のタグ利用数、使用ユーザ数? wUses = 0 wAccs = 0 if len(wLine['history']) >= 2: wUses = int(wLine['history'][0]['uses']) + int( wLine['history'][1]['uses']) wAccs = int(wLine['history'][0]['accounts']) + int( wLine['history'][1]['accounts']) ############################# # 辞書に詰める self.ARR_Trend.update({wIndex: ""}) self.ARR_Trend[wIndex] = {} self.ARR_Trend[wIndex].update({"rank": wRank}) self.ARR_Trend[wIndex].update({"name": wLine['name']}) ## self.ARR_Trend[wIndex].update({ "url" : wLine['url'] }) self.ARR_Trend[wIndex].update({"uses": wUses}) self.ARR_Trend[wIndex].update({"accs": wAccs}) self.ARR_Trend[wIndex].update({"lupdate": wTootTD}) wRank += 1 wIndex += 1 return wRes