精华内容
下载资源
问答
  • 提取对方微信好友
    万次阅读
    2019-03-07 11:59:35

    本项目已经上传到github上面:https://github.com/wangqifan/WeChatAnalyse

    这个Demo是利用HttpWebRequest和HttpWebResponse来爬取微信好友列表,讲信息存入数据库,并对信息进行分析,用图标画出来。

    如何获得微信好友列表信息

     首先前往https://wx.qq.com/登录自己的微信账号,打开浏览器的开发者控制台

    获取微信好友列表
    获取微信好友列表

    微信给后台发送了几十个请求,我翻遍了所有请求,终于找到了想要的url

    借助浏览器我们可以获取这个请求的信息

    微信好友列表获取

    我们可以把这个数据交给程序让程序帮我们取请求,并把数据保存下来

    前期准备新建一个名为WeChatAnalyse的项目

    借助nuget安装Entity Framwork和Json.net我们待会要使用这两个框架,顺便修改下配置文件

    <connectionStrings>
            <add name="WeChartContex" connectionString="server=.;database=WeChat;uid=sa;pwd=000000"
              providerName="System.Data.SqlClient" />
        </connectionStrings>

    创建model

    我们再次回到浏览器控制台,分析服务器返回的数据

    根据返回数据,我们可以建类 Friend

    [Key]
            public int Id { get; set; }
            public int Uin { get; set; }
            public string UserName { get; set; }
            public string NickName { get; set; }
            public string HeadImgUrl { get; set; }
            public int ContactFlag { get; set; }
            public int MemberCount { get; set; }
            public List<Friend> MemberList { get; set; }
            public string RemarkName { get; set; }
            public int HideInputBarFlag { get; set; }
            public int Sex { get; set; }
            public string Signature { get; set; }
            public int VerifyFlag { get; set; }
            public int OwnerUin { get; set; }
            public string PYInitial { get; set; }
            public string PYQuanPin { get; set; }
            public int StarFriend { get; set; }
            public int AppAccountFlag { get; set; }
            public int Statues { get; set; }
            public int AttrStatus { get; set; }
            public string Province { get; set; }
            public string City { get; set; }
            public string Alias { get; set; }
            public int SnsFlag { get; set; }
            public int UniFriend { get; set; }
            public string DisplayName { get; set; }
            public int ChatRoomId { get; set; }
            public string KeyWord { get; set; }
            public string EncryChatRoomId { get; set; }

    类BaseResponse

    public class BaseResponse
       {
           //"Ret": 0, "ErrMsg": ""
           public int Ret { get; set; }
           public string ErrMsg { get; set; }
       }

    类Respone

    public class Respone
        {
            public BaseResponse respoen { get; set; }
            public int MemberCount { get; set; }
            public List<Friend> MemberList { get; set; }
        }

    创建数据库上下文

    public class WeChartContex:DbContext
        {
            public    DbSet<Friend> Fridens { get; set; }
        }

    创建控制器Sprider

      给他添加一个数据库上下文对象

    WeChartContex context = new WeChartContex();

    这种强耦合的代码是不被推荐的,由于我们的Demo特别小,这里暂时这样写

    public ActionResult GetFridendInformation()
            {
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?r=1480564845349&seq=0&skey=@crypt_20089e09_d38ecc170f273d2db91833e793677276");
                request.Method = "get";
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0";
                request.Referer = "https://wx.qq.com/";
                // CookieContainer contain = new CookieContainer();
    
      
                request.Headers.Add("Cookie", "pgv_pvi=1499432960; pt2gguin=o1694675518; RK=; /=s7972417536; wxsid=tjF6UrJ2RcvNH76H; wxloadtime=1480564533_expired);
    
               using(Stream dataStream = response.GetResponseStream())
              {
               using( StreamReader reader = new StreamReader(dataStream))
                {
                // Read the content.
                string responseFromServer = reader.ReadToEnd();
                Respone   responsefronserver = JsonHelper.DeserializeToObject<Respone>(responseFromServer);
                foreach (var item in responsefronserver.MemberList)
                {
                    if(item.VerifyFlag==0) context.Fridens.Add(item);
                } 
                  }
             }
    
        request.Abort();
    if (context.SaveChanges()>0) { return Content("ok"); }
    
    
                return Content("fail");
            }

    基本思路是根据URL来创建一个HttpWebRequest对象,它是用http协议来请求的,我们来设置UserAgent,cookie,这里的cookie我做了删除,cookie应该即时取浏览器提取,保证它是新鲜的

    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?r=1480564845349&seq=0&skey=@crypt_20089e09_d38ecc170f273d2db91833e793677276");
                request.Method = "get";
                request.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0";
                request.Referer = "https://wx.qq.com/";
                 request.Headers.Add("Cookie", "pgv_pvi=149943")

    接下来创建HttpWebResponse对象来获取数据,并进行反序列化

    首先创建一个jsonhelp

    public class JsonHelper
        {
            /// <summary>
            /// 对数据进行序列化
            /// </summary>
            /// <param name="value"></param>
            /// <returns></returns>
            public static string SerializeToString(object value)
            {
                return JsonConvert.SerializeObject(value);
            }
            /// <summary>
            /// 反序列化操作
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="str"></param>
            /// <returns></returns>
            public static T DeserializeToObject<T>(string str)
            {
                return JsonConvert.DeserializeObject<T>(str);
            }
    }

    接下来对返回的数据进行反序列化

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                Stream dataStream = response.GetResponseStream();
                StreamReader reader = new StreamReader(dataStream);
                // Read the content.
                string responseFromServer = reader.ReadToEnd();
                Respone   responsefronserver = JsonHelper.DeserializeToObject<Respone>(responseFromServer);

    接下来保存到数据库中,我们只要朋友的信息

    foreach (var item in responsefronserver.MemberList)
                {
                    if(item.VerifyFlag==0) context.Fridens.Add(item);
                } 
                if (context.SaveChanges()>0)
                {
                    return Content("ok");
                }
    
                return Content("fail");

    VerifyFlag为0就是个人账号,公众号不为0

    运行程序,进入Sprider/GetFridendInformation,返回OK执行成功

    微信好友列表获取
    微信好友列表获取

    我一共有116个微信好友。这样就用爬虫实现:获取微信好友列表爬取进行好友分析。

    更多关于微信好友列表获取交流可加q群:753876674  一起交流学习。

    更多相关内容
  • 今天这篇文章会基于Python对微信好友进行数据分析,这里选择的维度主要有:性别、头像、签名、位置,主要采用图表和词云两种形式来呈现结果,其中,对文本类信息会采用词频分析和情感分析两种方法。常言道:...

    随着微信的普及,越来越多的人开始使用微信。微信渐渐从一款单纯的社交软件转变成了一个生活方式,人们的日常沟通需要微信,工作交流也需要微信。微信里的每一个好友,都代表着人们在社会里扮演的不同角色。

    今天这篇文章会基于Python对微信好友进行数据分析,这里选择的维度主要有:性别、头像、签名、位置,主要采用图表和词云两种形式来呈现结果,其中,对文本类信息会采用词频分析和情感分析两种方法。常言道:工欲善其事,必先利其器也。在正式开始这篇文章前,简单介绍下本文中使用到的第三方模块:

    • itchat:微信网页版接口封装Python版本,在本文中用以获取微信好友信息。
    • jieba:结巴分词的 Python 版本,在本文中用以对文本信息进行分词处理。
    • matplotlib:Python 中图表绘制模块,在本文中用以绘制柱形图和饼图
    • snownlp:一个 Python 中的中文分词模块,在本文中用以对文本信息进行情感判断。
    • PIL:Python 中的图像处理模块,在本文中用以对图片进行处理。
    • numpy:Python中 的数值计算模块,在本文中配合 wordcloud 模块使用。
    • wordcloud:Python 中的词云模块,在本文中用以绘制词云图片。
    • TencentYoutuyun:腾讯优图提供的 Python 版本 SDK ,在本文中用以识别人脸及提取图片标签信息。

    以上模块均可通过 pip 安装,关于各个模块使用的详细说明,请自行查阅各自文档。

    数据分析

    分析微信好友数据的前提是获得好友信息,通过使用 itchat 这个模块,这一切会变得非常简单,我们通过下面两行代码就可以实现:

    itchat.auto_login(hotReload = True) friends = itchat.get_friends(update = True)
    

    同平时登录网页版微信一样,我们使用手机扫描二维码就可以登录,这里返回的friends对象是一个集合,第一个元素是当前用户。所以,在下面的数据分析流程中,我们始终取friends[1:]作为原始输入数据,集合中的每一个元素都是一个字典结构,以我本人为例,可以注意到这里有Sex、City、Province、HeadImgUrl、Signature这四个字段,我们下面的分析就从这四个字段入手:
    图片

    好友性别

    分析好友性别,我们首先要获得所有好友的性别信息,这里我们将每一个好友信息的Sex字段提取出来,然后分别统计出Male、Female和Unkonw的数目,我们将这三个数值组装到一个列表中,即可使用matplotlib模块绘制出饼图来,其代码实现如下:

    def analyseSex(firends): 
      sexs = list(map(lambda x:x['Sex'],friends[1:])) 
     counts = list(map(lambda x:x[1],Counter(sexs).items())) 
     labels = ['Unknow','Male','Female'] 
     colors = ['red','yellowgreen','lightskyblue'] 
     plt.figure(figsize=(8,5), dpi=80) 
     plt.axes(aspect=1) 
     plt.pie(counts, #性别统计结果 
       labels=labels, #性别展示标签 
       colors=colors, #饼图区域配色 
       labeldistance = 1.1, #标签距离圆点距离 
       autopct = '%3.1f%%', #饼图区域文本格式 
       shadow = False, #饼图是否显示阴影 
       startangle = 90, #饼图起始角度 
       pctdistance = 0.6 #饼图区域文本距离圆点距离 
     ) 
     plt.legend(loc='upper right',) 
     plt.title(u'%s的微信好友性别组成' % friends[0]['NickName']) 
     plt.show()
    

    简单解释下这段代码,微信中性别字段的取值有Unkonw、Male和Female三种,其对应的数值分别为0、1、2。通过Collection模块中的Counter()对这三种不同的取值进行统计,其items()方法返回的是一个元组的集合。

    该元组的第一维元素表示键,即0、1、2,该元组的第二维元素表示数目,且该元组的集合是排序过的,即其键按照0、1、2 的顺序排列,所以通过map()方法就可以得到这三种不同取值的数目,我们将其传递给matplotlib绘制即可,这三种不同取值各自所占的百分比由matplotlib计算得出。下图是matplotlib绘制的好友性别分布图:
    图片

    好友头像

    分析好友头像,从两个方面来分析,第一,在这些好友头像中,使用人脸头像的好友比重有多大;第二,从这些好友头像中,可以提取出哪些有价值的关键字。

    这里需要根据HeadImgUrl字段下载头像到本地,然后通过腾讯优图提供的人脸识别相关的API接口,检测头像图片中是否存在人脸以及提取图片中的标签。其中,前者是分类汇总,我们使用饼图来呈现结果;后者是对文本进行分析,我们使用词云来呈现结果。关键代码如下所示:

    def analyseHeadImage(frineds): 
     # Init Path 
     basePath = os.path.abspath('.') 
     baseFolder = basePath + '\\HeadImages\\'
     if(os.path.exists(baseFolder) == False): 
      os.makedirs(baseFolder)  
     # Analyse Images 
     faceApi = FaceAPI() 
     use_face = 0
     not_use_face = 0
     image_tags = '' 
     for index in range(1,len(friends)): 
      friend = friends[index] 
      # Save HeadImages 
      imgFile = baseFolder + '\\Image%s.jpg' % str(index) 
      imgData = itchat.get_head_img(userName = friend['UserName']) 
      if(os.path.exists(imgFile) == False): 
       with open(imgFile,'wb') as file: 
        file.write(imgData)   
      # Detect Faces 
      time.sleep(1) 
      result = faceApi.detectFace(imgFile) 
      if result == True: 
       use_face += 1
      else: 
       not_use_face += 1  
      # Extract Tags 
      result = faceApi.extractTags(imgFile) 
      image_tags += ','.join(list(map(lambda x:x['tag_name'],result)))  
     labels = [u'使用人脸头像',u'不使用人脸头像'] 
     counts = [use_face,not_use_face] 
     colors = ['red','yellowgreen','lightskyblue'] 
     plt.figure(figsize=(8,5), dpi=80) 
     plt.axes(aspect=1) 
     plt.pie(counts, #性别统计结果 
       labels=labels, #性别展示标签 
       colors=colors, #饼图区域配色 
       labeldistance = 1.1, #标签距离圆点距离 
       autopct = '%3.1f%%', #饼图区域文本格式 
       shadow = False, #饼图是否显示阴影 
       startangle = 90, #饼图起始角度 
       pctdistance = 0.6 #饼图区域文本距离圆点距离 
     ) 
     plt.legend(loc='upper right',) 
     plt.title(u'%s的微信好友使用人脸头像情况' % friends[0]['NickName']) 
     plt.show()  
     image_tags = image_tags.encode('iso8859-1').decode('utf-8') 
     back_coloring = np.array(Image.open('face.jpg')) 
     wordcloud = WordCloud( 
      font_path='simfang.ttf', 
      background_color="white", 
      max_words=1200, 
      mask=back_coloring, 
      max_font_size=75, 
      random_state=45, 
      width=800, 
      height=480, 
      margin=15
     )  
     wordcloud.generate(image_tags) 
     plt.imshow(wordcloud) 
     plt.axis("off") 
     plt.show()
    

    这里我们会在当前目录新建一个HeadImages目录,用于存储所有好友的头像,然后我们这里会用到一个名为FaceApi类,这个类由腾讯优图的SDK封装而来,这里分别调用了人脸检测和图像标签识别两个API接口,前者会统计”使用人脸头像”和”不使用人脸头像”的好友各自的数目,后者会累加每个头像中提取出来的标签。其分析结果如下图所示:
    图片
    可以注意到,在所有微信好友中,约有接近1/4的微信好友使用了人脸头像, 而有接近3/4的微信好友没有人脸头像,这说明在所有微信好友中对”颜值 “有自信的人,仅仅占到好友总数的25%,或者说75%的微信好友行事风格偏低调为主,不喜欢用人脸头像做微信头像。

    其次,考虑到腾讯优图并不能真正的识别”人脸”,我们这里对好友头像中的标签再次进行提取,来帮助我们了解微信好友的头像中有哪些关键词,其分析结果如图所示:
    图片
    通过词云,我们可以发现:在微信好友中的签名词云中,出现频率相对较高的关键字有:女孩、树木、房屋、文本、截图、卡通、合影、天空、大海。这说明在我的微信好友中,好友选择的微信头像主要有日常、旅游、风景、截图四个来源。

    好友选择的微信头像中风格以卡通为主,好友选择的微信头像中常见的要素有天空、大海、房屋、树木。通过观察所有好友头像,我发现在我的微信好友中,使用个人照片作为微信头像的有15人,使用网络图片作为微信头像的有53人,使用动漫图片作为微信头像的有25人,使用合照图片作为微信头像的有3人,使用孩童照片作为微信头像的有5人,使用风景图片作为微信头像的有13人,使用女孩照片作为微信头像的有18人,基本符合图像标签提取的分析结果。

    好友签名

    分析好友签名,签名是好友信息中最为丰富的文本信息,按照人类惯用的”贴标签”的方法论,签名可以分析出某一个人在某一段时间里状态,就像人开心了会笑、哀伤了会哭,哭和笑两种标签,分别表明了人开心和哀伤的状态。

    这里我们对签名做两种处理,第一种是使用结巴分词进行分词后生成词云,目的是了解好友签名中的关键字有哪些,哪一个关键字出现的频率相对较高;第二种是使用SnowNLP分析好友签名中的感情倾向,即好友签名整体上是表现为正面的、负面的还是中立的,各自的比重是多少。这里提取Signature字段即可,其核心代码如下:

    def analyseSignature(friends): 
     signatures = '' 
     emotions = [] 
     pattern = re.compile("1f\d.+") 
     for friend in friends: 
      signature = friend['Signature'] 
      if(signature != None): 
       signature = signature.strip().replace('span', '').replace('class', '').replace('emoji', '') 
       signature = re.sub(r'1f(\d.+)','',signature) 
       if(len(signature)>0): 
        nlp = SnowNLP(signature) 
        emotions.append(nlp.sentiments) 
        signatures += ' '.join(jieba.analyse.extract_tags(signature,5)) 
     with open('signatures.txt','wt',encoding='utf-8') as file: 
       file.write(signatures) 
     # Sinature WordCloud 
     back_coloring = np.array(Image.open('flower.jpg')) 
     wordcloud = WordCloud( 
      font_path='simfang.ttf', 
      background_color="white", 
      max_words=1200, 
      mask=back_coloring, 
      max_font_size=75, 
      random_state=45, 
      width=960, 
      height=720, 
      margin=15
     ) 
     wordcloud.generate(signatures) 
     plt.imshow(wordcloud) 
     plt.axis("off") 
     plt.show() 
     wordcloud.to_file('signatures.jpg') 
     # Signature Emotional Judgment 
     count_good = len(list(filter(lambda x:x>0.66,emotions))) 
     count_normal = len(list(filter(lambda x:x>=0.33 and x<=0.66,emotions))) 
     count_bad = len(list(filter(lambda x:x<0.33,emotions))) 
     labels = [u'负面消极',u'中性',u'正面积极'] 
     values = (count_bad,count_normal,count_good) 
     plt.rcParams['font.sans-serif'] = ['simHei'] 
     plt.rcParams['axes.unicode_minus'] = False
     plt.xlabel(u'情感判断') 
     plt.ylabel(u'频数') 
     plt.xticks(range(3),labels) 
     plt.legend(loc='upper right',) 
     plt.bar(range(3), values, color = 'rgb') 
     plt.title(u'%s的微信好友签名信息情感分析' % friends[0]['NickName']) 
     plt.show()
    

    通过词云,我们可以发现:在微信好友的签名信息中,出现频率相对较高的关键词有:努力、长大、美好、快乐、生活、幸福、人生、远方、时光、散步。
    图片
    通过以下柱状图,我们可以发现:在微信好友的签名信息中,正面积极的情感判断约占到55.56%,中立的情感判断约占到32.10%,负面消极的情感判断约占到12.35%。这个结果和我们通过词云展示的结果基本吻合,这说明在微信好友的签名信息中,约有87.66%的签名信息,传达出来都是一种积极向上的态度。
    图片

    好友位置

    分析好友位置,主要通过提取Province和City这两个字段。Python中的地图可视化主要通过Basemap模块,这个模块需要从国外网站下载地图信息,使用起来非常的不便。

    百度的ECharts在前端使用的比较多,虽然社区里提供了pyecharts项目,可我注意到因为政策的改变,目前Echarts不再支持导出地图的功能,所以地图的定制方面目前依然是一个问题,主流的技术方案是配置全国各省市的JSON数据。

    这里我使用的是BDP个人版,这是一个零编程的方案,我们通过Python导出一个CSV文件,然后将其上传到BDP中,通过简单拖拽就可以制作可视化地图,简直不能再简单,这里我们仅仅展示生成CSV部分的代码:

    def analyseLocation(friends): 
     headers = ['NickName','Province','City'] 
     with open('location.csv','w',encoding='utf-8',newline='',) as csvFile: 
      writer = csv.DictWriter(csvFile, headers) 
      writer.writeheader() 
      for friend in friends[1:]: 
       row = {} 
       row['NickName'] = friend['NickName'] 
       row['Province'] = friend['Province'] 
       row['City'] = friend['City'] 
       writer.writerow(row)
    

    下图是BDP中生成的微信好友地理分布图,可以发现:我的微信好友主要集中在宁夏和陕西两个省份。
    图片

    总结

    这篇文章是我对数据分析的又一次尝试,主要从性别、头像、签名、位置四个维度,对微信好友进行了一次简单的数据分析,主要采用图表和词云两种形式来呈现结果。总而言之一句话,”数据可视化是手段而并非目的”,重要的不是我们在这里做了这些图出来,而是从这些图里反映出来的现象,我们能够得到什么本质上的启示,希望这篇文章能让大家有所启发。

    展开全文
  • 微信好友怎么导出excel?微信导出原来这么简单2020年01月19日 15:00作者:黄页编辑:黄页分享微信好友怎么导出excel?微信导出原来这么简单...微信便利了我们工作的...如何确认对方是不是把你删除了微信好友?我们最...

    微信好友怎么导出excel?微信导出原来这么简单

    2020年01月19日 15:00作者:黄页编辑:黄页

    分享

    微信好友怎么导出excel?微信导出原来这么简单...微信便利了我们工作的方方面面,同时还可以借助微信跟家人朋友发送消息、打语音电话等,不知不觉间我们已经离不开微信,如果微信突然出现故障好友丢失怎么办?别怕,超实用微信好友恢复软件来帮你!快来看看吧!

    8dca11c5992fce462ed5937dec275fcc.png

    如何确认对方是不是把你删除了微信好友?

    我们最多见的就是突然接到好友发来一条消息,说是要清号里的人,这种做法真的让人尴尬,也让人反感,那怎么才能悄无声息的知道对方是不是你的微信好友了呢?教你一招,避免尴尬,大家还是朋友。

    方法是:把你想测试的人拉进一个群里,如果对方删除了你,则系统会提示他不是你的好友,需要通过验证。但记得不要在群里说话哦,不然就尴尬了,测试完退出,群就自然不存在啦,也是神不知鬼不觉!

    20a8bc9a7baec9a7aae6bc11c9e3dde6.png

    微信删除的好友怎么找回?

    最简单圈的方法就是从朋友圈中找回删除的微信好友

    打开微信朋友圈,找到该好友发布过的消息,这个消息是不会随着你删除好友而被删除的。

    358f2f41805eabd3a3aed13fa2a044a8.png

    安卓专业、安全、靠谱的微信好友导出恢复软件

    我们手机微信内存是有上限的,防止数据丢失,可以把一些比较重要微信数据导出来保存,这样也不怕新数据写入导致数据丢失了,1、我们可以通过手机自带的应用商店或者百度搜索卓师兄官网(官网:https://www.zhuoshixiong.com/)或者进行下载安装,安装【卓师兄App】到手机上。

    16c2f77b68426af3fe4cb55bb15216e6.png

    2、运行卓师兄,仔细阅读《用户隐私保护》后,点击首页的【微信导出】,点击【开始恢复】>开启【无障碍辅助功能】。提示:开启此功能对您的手机数据安全不会有影响,卓师兄扫描完成后,此功能会自动关闭,请放心开启(不包括安卓6.0以下版本)

    3、防止再次误删和方便保存,我们可以把恢复回来的微信数据导出来;

    待扫描完成后,我们就可以根据自己的需要找到扫描到的微信账号,然后找到相应的微信好友列表,我们要把扫描到的微信数据导出来保存,只要选中要导出来的微信好友,点击下方的【导出】按钮即可。可以把这些重要的手机数据保存在电脑里或者发送到微信、QQ好友等,这样就不怕再次误删弄丢数据了!

    1b69d91c638d74b875d1828b04053ecb.png

    iPhone用户如何使用果师兄恢复已删除的微信好友?

    1、iPhone用户直接在应用商店中搜索安装果师兄,在首页选择加回微信好友的服务。

    2、工程师接单后,可以通过技术手段将已断裂的好友关系重新恢复,利用技术向已删除好友发送验证消息后即可成为好友。拉黑恢复微信好友也可以哦~

    c3a7105c9af55611a02ad33be86020b8.png

    除了以上方法之外,小编最后再给大家推荐一款好用的电脑自助恢复软件-开心手机恢复大师(官网:http://www.kxbox.com/)。借助这款专业数据恢复工具,即可快速解决你的问题,自助恢复,操作安全又方便!

    dd5a554215741c2f389f32328f3fa4c4.png

    微信好友怎么导出excel?微信导出原来这么简单...上面就是微信好友的恢复方法了。微信不小心删除了好友之后,数据能恢复出来多少?这个其实跟你丢失数据后的操作还是有很大关系的,所以不要盲目操作以免对数据造成二次损害,冷静下来寻找解决方案才是最要紧的。

    转载请注明出处。

    展开全文
  • 好了,下面我们来探索一下如何一步一步的拿到微信通讯录。 先来个DDMS看一下从聊天页面切换到通讯录页面的调用堆栈 这时候会看到点击事件带来的一系列效果,我个人还是比较喜欢追踪点击事件一层层的扒的,但是我...

    探索的过程比结果有趣多了不是吗!

    好了,下面我们来探索一下如何一步一步的拿到微信通讯录。

    先来个DDMS看一下从聊天页面切换到通讯录页面的调用堆栈

    这时候会看到点击事件带来的一系列效果,我个人还是比较喜欢追踪点击事件一层层的扒的,但是我扒了好一会儿,感觉都是在切换页面,离我想要的数据还很远很远。。。

    我想着这样下去也不是个办法,于是乎我对UI元素下起了咸猪手。。。

    可以看到列表的元素布局ID都是dy5,这时候就轮到我们的jadx出场了,管它三七二十八先搜索R.id.dy5,天底下那么大,总有个findViewById需要它不是吗。

    好家伙,居然还是在getView方法里,这不是摆明了这个类是个适配器嘛,只要找到它的数据源不就可以了吗!

    从方法里一眼就能看出它是使用getItem()获取的数据,那我们来看看getItem()干了啥!咦?这类里居然没有getItem方法,魔法代码???

    咋一看,原来是继承了f,草率了。。。

    emm。。。找到了getItem(),内心毫无波澜,从这里我们可以清晰的看出数据调用moveToPosition()然后调用aaa()获取的,大伙儿估计都猜出来这是个啥了(卖个关儿),没错!这个HRK就是个Cursor!找到它是怎么来的就大功告成啦!那接下来就让我们踏上寻找Cursor之旅。。。

    好,那我们先来看看这个HXh是去哪儿捡的HRK噢。

    往上翻找到HXh字段(长的可真丑。。。)

     

     可以看到构造方法里传入的dVar字段就是我们的HRK,也就是我们想要的Cursor。

    同样的,找到了生成HXh的a方法

     

    我们再仔细看一次getItem方法,发现它第一步就对HXh检查是否为空的操作,那我们看看如果为空的时候这个a(fmT())又怎么力挽狂澜!

    a方法我们上面找到了,接着往上找fmT()方法

    好家伙!是个抽象方法,不过无所谓,a类中肯定有实现。。。

    这会儿又调用了个fyP方法,我***!

    哈哈哈,我们的主角出场了。先看看这个c.axA()是啥玩意儿。

    诶哟!还是个静态方法,爱死它了不是吗 ,ok,继续往下扒

    神秘的a方法也出来了不是吗,就看传入的参数是什么就完事了。

    从上面的fyP方法就能找出一个linkedList参数,里面就装一个"weixin"字符串,没啥好说的。

    而this.JiI、this.JiJ、this.JiU都能在构造方法里得到

    废话不多说,hook一下

    很明显的答案就出来了,然后再看一下this.fDW参数

     没什么好说的,hook一下

    结果也出来了,最后的fyO()就不想多说了,是个true。

    至于Cursor里内容的数据格式,emm。。。还记得我们a类继承f类的时候吗,就像我们逝去的青春(呕。。。)

    注意看传入的泛型参数com.tencent.mm.storage.f。

    对的,你说的没错!它就是我们要的数据格式内容 ,让我们看看它长啥样

    好家伙,每一列是什么都给出来了! 

    好了,最后来一波反射调用

    em。。。获取结果也展示一下 

    很明显的,答案就出来了!至于他们的头像,请见下回分解,溜了溜了。

    本文章仅作学习用途,欢迎指正!

     

    展开全文
  • 本文将记录对知乎专栏中的一篇小项目...代码中:使用二维码登录网页版微信,并下载好友头像,并将好友资料数据存入csv文件,待进一步处理。 笔者使用的环境为python3.5。 import os import requests import re import
  • 考虑到腾讯优图并不能真正得识别”人脸”,我们这里对好友头像中的标签再次进行提取,来帮助我们了解微信好友的头像中有哪些 关键词,其分析结果如图所示: 通过词云,我们可以发现:在微信好友中的签名词云中,出现...
  • 微信好友检测助手App

    千次阅读 2019-06-21 10:08:10
    微信好友检测助手App 最近几周,写了个微信好友检测助手App,写这个的初衷是为了低成本的让用户检测自己微信上删除或拉黑自己的好友,不考虑用xposed插件的方式实现,主要还是普通用户玩不了这么复杂的东西,定位于...
  • 基于Python实现的微信好友数据分析

    千次阅读 2018-02-25 00:00:00
    本文转自微信公号5厘米的理想作者 | ...逐步泛化的好友关系,让微信从熟人社交逐渐过渡到陌生人社交,而朋友圈里亦真亦幻的状态更新,仿佛在努力证明每一个个体的”有趣”。有人选择在朋友圈里记录生活的点滴,有人选
  • MaiTube可以快速的将某个链接进行套装重定向。比如用 A链接指向B链接,而B链接是目标链接。...如果你在输入完整的链接地址栏里输入的是百度的网址,那么对方打开可追踪链接或者扫描二维码会跳转到百度的页面,仍然
  • 前几天给大家分享了如何利用Python词云和wordart可视化工具对朋友圈数据进行可视化,利用Python网络爬虫抓取微信好友数量以及微信好友的男女比例,以及利用Python网络爬虫抓取微信好友的所在省位和城市分布及其可视...
  • 微信自动加好友可以使用python实现

    万次阅读 2019-09-18 17:43:12
    一、 现在电脑上安装python环境(可以自行百度) 二、安装...在config中config.json中设置文件名 auto和adb的网盘地址:提取码 k72a https://pan.baidu.com/s/10LbYoKYmj9mtQegqnuGh-Q 有问题可以加微信 yxc19921115
  • 本文介绍的基于Python+adb实现的微信好友检测,是通过adb操控手机,模拟人的点击、截屏、然后调用OCR接口实现好友检测,对应用无侵入,无需扫描登录即可实现好友检测。网上看到一些文章类似功能的实现,总结起来...
  • 本文实例讲述了Python爬取个人微信朋友信息操作。分享给大家供大家参考,具体如下:利用Python的itchat包爬取个人微信号的朋友信息,并将信息保存在本地文本中思路要点:1.利用itchat.login(),实现微信号的扫码登录...
  • 编者按:本文来自稀土掘金江昪编译自 Github:0x5e/wechat-deleted-friends    “ 清理下[微笑],不用回。...相信大家在微信上一定被上面的这段话刷过屏,群发消息应该算是微信上流传最广的找到删除好友的方法...
  • 这个Demo是利用HttpWebRequest和HttpWebResponse来爬取微信好友,讲信息存入数据库,并对信息进行分析,用图标画出来。 如何获得好友信息 首先前往https://wx.qq.com/登录自己的微信账号,打开浏览器的开发者...
  • 微信聊天记录提取及分析(wordcloud+pyecharts)

    万次阅读 多人点赞 2020-11-21 22:14:49
    ​ 之所以想要提取微信的聊天记录并分析是因为也开始再学习python,但是单纯看看语法什么的又很无趣,无意间看到python可以进行微信聊天记录的分析,就自己尝试做了一下,感觉还是挺有意思的。 1.提取聊天记录...
  • 微信管理工具

    2022-05-26 16:20:23
    给你推荐一个比较实用点的工具吧,是专门用于微信社群管理的。 有两种工具,一种是需要下载的,也就是桌面版的软件,功能方面类似于wetool,但相对来说性价比会更高,适合预算不高的人或者公司使用。 还有一种是...
  • itchat是一个开源的微信个人号接口,使用python调用微信从未如此简单。这篇文章主要介绍了Python微信操控itchat的方法,需要的朋友可以参考下
  • 今天我们分享一下怎样找回删除的微信好友?这个方法我认为是门槛、成本最低的方法,不需要ROOT,不使用任何数据恢复软件,操作简单,即使你换了手机依然可以找回删除的好友(与手机无关),重要的是完全免费,不过...
  • 资源是2021年的,现在2022年也适用,在使用wxid转扫一扫的用户们,建议最近先养号!
  • 转自:扩展迷Extfans微信的某些功能,吐槽起来几乎能写成一本书。比如删除好友——它不像QQ好友的双向删除,而是只能单方面从自己的列表中删除对方。这样一来,如果我们被人删除微信好友,也不...
  • 1v1微信聊天测试点

    千次阅读 2022-02-18 10:19:43
    1v1微信聊天测试点 在不同的测试策略的维度上进行分析 1 UI角度 ui是否符合需求是否美观 2 功能角度 2.1 入口 聊天界面的入口 2.2 出口 聊天界面的出口 2.3 发送信息 发送纯文字,图片,文件,表情,语音、...
  •  输出结果可以看出我微信好友的个性签名比较励志正常的,像努力,时间,开心,自己,平安等,另外广商也是一大特征。  完整代码: 1 # -*- coding: utf-8 -*- 2 3 import numpy as np 4 ...
  • 微信朋友群自动点赞

    2022-05-19 16:34:34
    我一直都不太喜欢给别人点赞,某一年(貌似是17年)微信出了一次朋友圈年报,那一整年我就点出去了几个赞,要知道当时我微信好友应该有300+。我觉得这是我不喜欢参与社交活动在网络世界的一种体现吧。不给别人点赞也没...
  • Ⅰ、对方撤回消息看不到?...该工具只能适用于Windows平台的PC微信、QQ和TIM,手机版APP是做不到的! Tips: 如果你的手机和电脑同时在线,就算你们是通过手机进行聊天,对方撤回了消息,电脑上仍然可以看到。so
  • 给你推荐一个比较实用点的工具吧,是专门用于微信社群管理的。 有两种工具,一种是需要下载的,也就是桌面版的软件,功能方面类似于wetool,但相对来说性价比会更高,适合预算不高的人或者公司使用。 还有一种是...
  • 微信多群转播直播

    2022-03-29 16:17:43
    1、社群运营必备多群直播,千万微信群同步转播,机器人自动转播服务,一场分享,万群同步,效率提高千万倍,传播触达率疯狂增长; 2、辅助工具,帮助社群轻松实现万群转播,万人招募,扩大传播影响力; 3、多群同步...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 683
精华内容 273
关键字:

提取对方微信好友

友情链接: GetDisk.rar