Beispiel #1
0
    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
Beispiel #2
0
    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