Example #1
0
 def _get_users(self, sqlpath: str):
     """
     扫描联系人后缀的数据,添加task信息后返回
     :param sqlpath:
     :return:
     """
     limitdata = 1000
     offsetdata = 0
     while True:
         sql = '''SELECT 
         *
         FROM users LIMIT ? OFFSET ?'''
         pars = (
             limitdata,
             offsetdata,
         )
         offsetdata += limitdata
         res = self._select_data(sqlpath, sql, pars)
         if len(res) == 0:
             return
         all_contact = CONTACT(self._clientid, self.task, self.task.apptype)
         for el in res:
             try:
                 # 将为空的字段全部剔除
                 # eldict = {k: v for k, v in el.items() if v is not None}
                 eldict = el
                 if eldict.get('id') is None:
                     continue
                 contact_one = CONTACT_ONE(self._userid, eldict.get('id'),
                                           self.task, self.task.apptype)
                 if eldict.get('phone') is not None:
                     contact_one.phone = self._output_format_str(
                         eldict.pop('phone'))
                 nickname = b''
                 if eldict.get('last_name') is not None:
                     nickname += eldict.pop('last_name')
                 if eldict.get('first_name') is not None:
                     nickname += eldict.pop('first_name')
                 if nickname == b'' and eldict.get('username') is not None:
                     nickname += eldict.pop('username')
                 if nickname != b'':
                     contact_one.nickname = self._output_format_str(
                         nickname)
                 if eldict.get('contact') is not None:
                     contact_one.isfriend = eldict.pop('contact')
                 if eldict.get('mutualContact') is not None:
                     contact_one.bothfriend = eldict.pop('mutualContact')
                 if eldict.get('deleted') is not None:
                     contact_one.isdeleted = eldict.pop('deleted')
                 all_contact.append_innerdata(contact_one)
             except Exception:
                 self._logger.error(
                     f"Get profile error,err:{traceback.format_exc()}")
                 continue
         if all_contact.innerdata_len != 0:
             yield all_contact
         if len(res) < limitdata:
             break
Example #2
0
 def _get_contact(self, contact_data: json) -> iter:
     contact_all = contact_data.get('linkmanList')
     gname_map: dict = contact_data.get('uuidGuuidGnameMap')
     if contact_all is None or len(contact_all) == 0:
         self._logger.error("No contact in this account.")
         return
     for line_one in contact_all:
         contact_id = line_one.get('uuid')
         data_one = CONTACT_ONE(self._userid, contact_id, self.task, self.task.apptype)
         data_one.phone = line_one.get('mobile')
         data_one.email = line_one.get('email')
         data_one.nickname = line_one.get('name')
         data_one.group = gname_map[contact_id][0][0]['groupName']
         yield data_one
Example #3
0
    def __get_contacts(self, groupid):
        sid = self._get_cookie_sid()
        if sid is None:
            self._logger.error("Cannot get sid from cookie")
            return
        cguid = self._get_cookie_cguid()
        url = 'https://smsrebuild1.mail.10086.cn/addrsvr/GetContactsList?' \
              'sid={}&formattype=json&&comefrom=54&cguid={}'.format(sid, cguid)
        payload = '<object>\r\n  <string name="GroupId">{}</string>\r\n  <string name="Keyword" />\r\n  ' \
                  '<string name="Letter">All</string>\r\n  <string name="Filter" />\r\n  ' \
                  '<string name="Sort">name</string>\r\n  <string name="SortType" />\r\n ' \
                  ' <string name="Start">0</string>\r\n  <string name="End">1000</string>\r\n' \
                  '</object>'.format(groupid)
        payload = payload.encode('ascii')
        headers = {
            'accept':
            "*/*",
            'accept-encoding':
            "gzip, deflate, br",
            'accept-language':
            "zh-CN,zh;q=0.9,en;q=0.8",
            'cache-control':
            "no-cache,no-cache",
            'content-length':
            "290",
            'Content-Type':
            "text/xml",
            'cookie':
            self.task.cookie,
            'origin':
            "https://smsrebuild1.mail.10086.cn",
            'pragma':
            "no-cache",
            'referer':
            "https://smsrebuild1.mail.10086.cn//proxy.htm",
            'user-agent':
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
            "Chrome/70.0.3538.102 Safari/537.36",
        }

        try:
            response = requests.request("POST",
                                        url,
                                        data=payload,
                                        headers=headers)
            res_json = json.loads(response.text)
            if res_json.get('code') == "S_OK":
                for con in res_json.get('var').get('list'):
                    contactid = con.get('serialId')
                    if contactid is not None:
                        contact_one = CONTACT_ONE(self._userid, contactid,
                                                  self.task, self.task.apptype)
                        contact_one.nickname = con.get('name')
                        contact_one.email = con.get('email')
                        if con.get('mobile'
                                   ) is not None and con.get('mobile') != '':
                            contact_one.phone = con.get('mobile')
                        contact_one.append_details(con)
                        yield contact_one
        except Exception as err:
            self._logger.error("Get a contact error, err: {}".format(err))
            return
Example #4
0
    def _get_contacts(self) -> iter:
        sid = self._get_sid()
        if sid is None:
            self._logger.error("Invalid cookie")
        url = "http://webmail.vip.163.com/contacts/call.do"

        querystring = {
            "uid": self._userid,
            "sid": sid,
            "from": "webmail",
            "cmd": "newapi.getContacts",
            "vcardver": "3.0",
            "ctype": "all",
            "attachinfos": "yellowpage,frequentContacts",
            "freContLim": "20",
            "limitinfo": "get"
        }

        payload = {'order': [{'field': 'N', 'desc': 'false'}]}
        headers = {
            'content-type':
            "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
            'Accept':
            "*/*",
            'Accept-Encoding':
            "gzip, deflate",
            'Accept-Language':
            "zh-CN,zh;q=0.9,en;q=0.8",
            'Cache-Control':
            "no-cache",
            'Content-Length':
            "36",
            'Content-type':
            "application/x-www-form-urlencoded",
            'Cookie':
            self.task.cookie.encode('utf-8'),
            'Host':
            "webmail.vip.163.com",
            'Origin':
            "http://webmail.vip.163.com",
            'Pragma':
            "no-cache",
            'Proxy-Connection':
            "keep-alive",
            'Referer':
            "http://webmail.vip.163.com/js6/main.jsp?sid={}&df=mailvip".format(
                sid),
            'User-Agent':
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"
        }

        try:
            response = requests.request("POST",
                                        url,
                                        data=payload,
                                        headers=headers,
                                        params=querystring)

            res_text_json = json.loads(response.text)
            if res_text_json.get('code') != 200:
                self._logger.error(
                    f"Get contacts error, err:{traceback.format_exc()}")
                return
            con_list = res_text_json.get('data').get('contacts')
            if con_list is None or len(con_list) == 0:
                return
            con_all = CONTACT(self._clientid, self.task, self.task.apptype)
            for one in con_list:
                name = one.get('FN')
                mail = one.get('EMAIL;type=INTERNET;type=pref')
                con_one = CONTACT_ONE(self._userid, mail, self.task,
                                      self.task.apptype)
                con_one.email = mail
                con_one.nickname = name
                if one.get('TEL;type=CELL;type=VOICE;type=pref') is not None:
                    con_one.phone = one.get(
                        'TEL;type=CELL;type=VOICE;type=pref')
                con_all.append_innerdata(con_one)
            if con_all.innerdata_len > 0:
                yield con_all
        except Exception:
            self._logger.error(
                f"Get contact error, err:{traceback.format_exc()}")