怎么从微信导出通讯录通信录怎么做

微信通讯录好友检索怎么实现的? - 开源中国社区
当前访客身份:游客 [
当前位置:
现在要实现这么个功能,检索手机的通讯录。匹配数据库中手机号的字段,如果存在,就是加为好友,如果不存在就是邀请好友,但问题是这样的搜索效率得多低呀。。加入我通讯录里有100个联系人,岂不是每个手机号都要匹配一遍数据库,这要匹配100遍?!!有啥更好地方案不~~
共有8个答案
<span class="a_vote_num" id="a_vote_num_
就是手机号和微信号对应啊
<span class="a_vote_num" id="a_vote_num_
100算啥啊...
<span class="a_vote_num" id="a_vote_num_
當你的手機通訊錄超過100W再說...
<span class="a_vote_num" id="a_vote_num_
我们最近就要模仿做这个- -!
最后在众多Coder极力说清效率的情况下, 改变了一个实现方式. 先显示List数据, 然后点击的时候拿号码跟服务器对比, 根据结果进入不同的activity, 显示不同的业务.
你那边根据业务来看看能不能改设计.
<span class="a_vote_num" id="a_vote_num_
引用来自“atearsan”的答案 FK...
我们最近就要模仿做这个- -!
最后在众多Coder极力说清效率的情况下, 改变了一个实现方式. 先显示List数据, 然后点击的时候拿号码跟服务器对比, 根据结果进入不同的activity, 显示不同的业务.
你那边根据业务来看看能不能改设计. 好吧,我在想象办法~
<span class="a_vote_num" id="a_vote_num_
服务端按照所有号码建排序堆,待检索号码尝试插入堆,在插入后的位置查找附近节点,有相同则命中,时间复杂度&= O(log2N)
<span class="a_vote_num" id="a_vote_num_
一次性把 100个号码都检索出来...然后和数据库进行匹配. 一次就可以了.
返回匹配的结果就行.
<span class="a_vote_num" id="a_vote_num_
引用来自“atearsan”的答案 FK...
我们最近就要模仿做这个- -!
最后在众多Coder极力说清效率的情况下, 改变了一个实现方式. 先显示List数据, 然后点击的时候拿号码跟服务器对比, 根据结果进入不同的activity, 显示不同的业务.
你那边根据业务来看看能不能改设计. 效率个啥啊 你最多就1W条通讯录 后台跑的线程 纠结那么多性能不如把经理放到业务上去思考问题。用map还是用list,不管是空间还是时间上,都是不会存在压力的
--- 共有 6 条评论 ---
: 简单的说来就是《每次都对上一次的结果(本地值)进行分析,并且第二次以后的请求都是后台的进程在跑,不造成用户感知的问题》
(3年前)&nbsp&
: 判断本地“已注册好友列表”是否为空,如果为空,调用一次接口,将高于《版本号》的数据下载下来,保存到本地,否则,直接对比本地的列表。这个接口,同时上传自己的用户信息到服务端存起来,并且给这条数据打上版本号。
第二次以后的调用,判断“已注册好友列表”中,是否有版本号高于现在版本的数据,如果有,则进行更新(新增)。同时,调用请求。
(3年前)&nbsp&
: 读取手机通讯录. 然后需要跟服务器进行手机号检查, 检查用户是否已注册帐号. 如果没注册, listView上面渲染一个邀请按钮.
(3年前)&nbsp&
: 先说数据量,300个人,我算你每个人5个电话,数据量1500,你读,不是读人,是读号码,通过号码去找人。你说的网络通讯,没搞懂,你的应用的人员列表难道是在线的??每次进去都读在线的人员列表??没本地列表?如果是在线的人员列表我建议你做缓存。每次只检测,只检测上一次缓存的信息。问题解决?
(3年前)&nbsp&
我这边测试的300多联系人从手机里加载到页面布局渲染完成, 要4s +. 有些人有几个号码, 这个得重新读一次的. 如果还得跟网络通讯, 进行数据对比, 更耗时间吧.
不知道你那边具体怎么实现的。
(3年前)&nbsp&
更多开发者职位上
有什么技术问题吗?
heihuzi...的其它问题
类似的话题您所在的位置: &
微信的通讯录怎么备份呢?微信通讯录备份在哪里?
时间: 16:25:02
编辑:xwgod
来源:下载吧
  微信的通讯录怎么备份呢?微信通讯录备份在哪里?如果是非常注重在微信交流的人,为了以防万一,就需要把微信的通讯录在云端备份一下,其实在微信功能中就有一个通讯录安全助手,能够给自己的微信通讯录的备份和恢复。下面小编介绍下如何操作。  1、首先打开你的微信,选择屏幕左下角的“我” ,然后再选择中间的“设置”  2、在设置里面选择“通用”  3、并且在下一级菜单选择“功能”  4、里面能直接找到“通讯录安全助手” ,选择后进入  5、在功能设置能够设置定期提醒备份  6、直接进入吧  7、开始备份吧,要恢复也是在这里恢复  8、需要QQ密码输入确认,按提示来就成。  成功了吧。快去试试吧。
分享给朋友:
微信的通讯录怎么备份呢相关教程
微信的通讯录怎么备份呢相关新闻
下载1228次
下载1443次
下载1500次
下载1174次
下载1604次
下载1565次
下载1429次
下载1887次
下载1630次
下载1833次
热门关键字
扫红码得红包5亿红包100%中奖php微信开发(1)
& & & &最近已经是第四次开发微信公众号,这一次的开发任务是完成一个微信企业号的开发, 主要是利用微信企业号进行办公管理。而其中很重要的一个功能即为本地通讯录与微信服务器上的通讯录保持同步。
& & & &而基本的实现逻辑为:在本地数据库进行增、删、改操作以后,获得执行返回结果,如果本地操作成功,则调用微信企业号管理通讯录接口,实现对微信服务器上数据的同步操作。但是在这个基本的业务逻辑中,可能会出现微信服务器和本地数据库的数据不统一的情况,其中常见的场景为一下两种:
①本地执行数据增加操作以后,获得返回结果,正要执行微信同步操作时,网络异常,那么会出现本地数据未能同步到微信服务器上——本地存在微信服务器没有的数据。
②本地执行数据删除操作以后,获得返回结果,正要执行微信同步操作时,网络异常,那么会出现本地数据未能同步到微信服务器上——微信服务器存在本地没有的数据。
在没有通讯录异步更新功能之前,我们采取的方法,即是定期利用算法对本地数据与微信数据进行比较,执行相应同步操作,其中带来的系统消耗较大,如果数据量较大,常常出现一些差错,导致两边数据无法维护。
现在来说说微信公众号更新的异步任务接口(位置:管理通讯录—异步任务接口)。有两点说明:①主要用于本地通讯录与微信服务器通讯录的同步。②此接口为异步响应的接口,需要调用获取异步任务结果接口获取操作结果。由于是第三方微信公众号应用,则原则上用户只能在一端实现数据维护,更好的选择即是在第三方的微信应用上进行通讯录的操作,来保证两边的数据同步。
接口关键说明:
1.文件中存在、通讯录中也存在的部门,执行修改操作
2.文件中存在、通讯录中不存在的部门,执行添加操作
3.文件中不存在、通讯录中存在的部门,当部门下没有任何成员或子部门时,执行删除操作
4.CSV文件中,部门名称、部门ID、父部门ID为必填字段,部门ID必须为数字;排序为可选字段,置空或填0不修改排序
接口调用次序
通讯录更新接口提供三种更新方法:1)
增量更新成员 2)全量覆盖成员 3) 全量覆盖部门。如果企业要做到与企业号通讯录完全一致,可先调用全量覆盖部门接口,再调用全量覆盖成员接口,即可保持通讯录完全一致。
根据微信企业号的文档,我们需要实现以下四步操作:
①根据微信企业号文档规定的文档&#26684;式,将本地数据库的数据对应生成相应的CSV文件(此处贴出生成CSV文件的PHP示例代码)
* 输出csv文件
* @param $data 上传数组
* @param $filetype 上传文件类型(batch_user/ batch_group)
public function
outputCsvFile($data, $fileTypeName) {
$filename = $fileTypeName.time();
$output_url = &source/weixin_upload_room/csv_upload/&.$filename.&#39;.csv&#39;;
$fp = fopen($output_url, &#39;w&#39;);
fwrite($fp,&\xEF\xBB\xBF&);
foreach ($data as $row) {
fputcsv($fp, $row);
fclose($fp);
return $output_
}②调用上传临时素材文件接口(管理素材文件—上传临时素材文件)将生成的CSV文件上传到微信服务器。此处出现了本次开发的第一个难关,因为必须采用非表单上传文件,将指定路径的文件用PHP代码上传到服务器。查阅资料后发现可以使用php curl技术模拟表单上传文件,因此决定采取curl的方法,可是一直调试不成功。再后来发现curl的调用方法也是随着PHP版本的变化,发生了变化,调了两天都一直调不出结果,最后在google上找到了解决方法。
③调用全量覆盖部门接口,进行部门的更新。
④调用全量覆盖成员接口,进行成员的更新。
以下贴出全部的php
curl 模拟 https请求
&span style=&font-size:18&&/**
* 功能:php模拟发送https post请求
* @param $url 请求的链接
* @param $params get请求的所带的参数
* 参数格式为:$params = &a=b&c=d&e=f&g=& . urlencode(&#39;全仔&#39;);
function https_post($url, $params){
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
// https请求 不验证证书和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// 要求结果为字符串且输出到屏幕上
curl_setopt($ch, CURLOPT_HEADER, 0); // 不要http header 加快效率
curl_setopt($ch, CURLOPT_USERAGENT, &#39;Mozilla/5.0 ( MSIE 5.01; Windows NT 5.0)&#39;);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
curl_setopt($ch, CURLOPT_POST, 1);
// post 提交方式
curl_setopt($ch, CURLOPT_POSTFIELDS, $params);
$output = curl_exec($ch);
curl_close($ch);
}&/span&全量覆盖部门
* 企业号通讯录数据同步:全量覆盖部门
* 原理:将本地数据库与微信企业号全量覆盖。
* 接口限制:应说明清楚本功能,且限制调用次数。且本功能应和全量覆盖成员同步使用!
* @param 无
* @return array(&errcode&=&&错误码&,&errmsg&=&&错误信息&,&id&=&&微信id&) 操作成功错误码为0
public function synchronous_area_to_weixin(){
$res = $this -& db -& get(&#39;area&#39;);
if($res -& num_rows()){
$area_array[] = array(&#39;部门名称&#39;,&#39;部门ID&#39;,&#39;父部门ID&#39;,&#39;排序&#39;);
foreach($res -& result_array() as $row){
$area_array[] = array($row[&#39;name&#39;],$row[&#39;weixin_id&#39;],$row[&#39;parent_id&#39;],0);
$file_url = $this -& mytool -& outputCsvFile($area_array,&#39;batch_group&#39;);
$access_token = $this -& session -& userdata(&access_token&);
//判断当前php版本是否支持curlfile
if (class_exists(&#39;\CURLFile&#39;)) {
$field = array(&#39;media&#39; =& new \CURLFile(realpath($file_url)));
$field = array(&#39;media&#39; =& &#39;@&#39; . realpath($file_url));
$media_res = $this-&mytool-&https_post(&#39;https://qyapi./cgi-bin/media/upload?access_token=&#39;.$access_token[&#39;access_token&#39;].&#39;&type=file&#39;,$field);
$media_res_obj = json_decode($media_res);
if($media_res_obj -& media_id){
$batch_group = array(&#39;media_id&#39; =& urlencode($media_res_obj -& media_id));
$batch_group_json = urldecode(json_encode($batch_group));
$batch_group_res = $this-&mytool-&https_post(&#39;https://qyapi./cgi-bin/batch/replaceparty?access_token=&#39;.$access_token[&#39;access_token&#39;],$batch_group_json);
$batch_group_res_obj = json_decode($batch_group_res);
$errmsg = $this-&myweixintranslation-&tranalation($batch_group_res_obj-&errcode);
$res_array = array(&errcode& =& $batch_group_res_obj-&errcode,&errmsg& =& $errmsg);
$errmsg = $this-&myweixintranslation-&tranalation($media_res_obj-&errcode);
$res_array = array(&errcode& =& $media_res_obj-&errcode,&errmsg& =& $errmsg);
return $res_
}全量覆盖成员
* 企业号通讯录数据同步:全量覆盖成员
* 原理:将本地数据库与微信企业号全量覆盖。
* 接口限制:应说明清楚本功能,且限制调用次数。且本功能应和全量覆盖部门同步使用!
* @param 无
* @return array(&errcode&=&&错误码&,&errmsg&=&&错误信息&,&id&=&&微信id&) 操作成功错误码为0
public function synchronous_distribution_member_to_weixin(){
$res = $this -& db -& get(&#39;distribution_member&#39;);
if($res -& num_rows()){
$area_array[] = array(&#39;姓名&#39;,&#39;帐号&#39;,&#39;微信号&#39;,&#39;手机号&#39;,&#39;邮箱&#39;,&#39;所在部门&#39;,&#39;职位&#39;);
foreach($res -& result_array() as $row){
$area_array[] = array($row[&#39;name&#39;],$row[&#39;weixin_id&#39;],&#39;&#39;,$row[&#39;phone&#39;],$row[&#39;email&#39;],$row[&#39;area_id&#39;],&#39;&#39;);
$file_url = $this -& mytool -& outputCsvFile($area_array,&#39;batch_user&#39;);
//判断当前php版本是否支持curlfile
if (class_exists(&#39;\CURLFile&#39;)) {
$field = array(&#39;media&#39; =& new \CURLFile(realpath($file_url)));
$field = array(&#39;media&#39; =& &#39;@&#39; . realpath($file_url));
$media_res = $this-&mytool-&https_post(&#39;https://qyapi./cgi-bin/media/upload?access_token=&#39;.$access_token[&#39;access_token&#39;].&#39;&type=file&#39;,$field);
$media_res_obj = json_decode($media_res);
if($media_res_obj -& media_id){
$batch_user = array(&#39;media_id&#39; =& urlencode($media_res_obj -& media_id));
$batch_user_json = urldecode(json_encode($batch_user));
$batch_user_res = $this-&mytool-&https_post(&#39;https://qyapi./cgi-bin/batch/replaceuser?access_token=&#39;.$access_token[&#39;access_token&#39;],$batch_user_json);
$batch_user_res_obj = json_decode($batch_user_res);
$errmsg = $this-&myweixintranslation-&tranalation($batch_user_res_obj-&errcode);
$res_array = array(&errcode& =& $batch_user_res_obj-&errcode,&errmsg& =& $errmsg);
$errmsg = $this-&myweixintranslation-&tranalation($media_res_obj-&errcode);
$res_array = array(&errcode& =& $media_res_obj-&errcode,&errmsg& =& $errmsg);
return $res_
}更多关于微信接入、微信请求、微信细节处理的方法可详细参见我的其他博客内容。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:4560次
排名:千里之外
原创:11篇
(2)(1)(3)(3)(1)(2)}

我要回帖

更多关于 微信怎么备份通讯录 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信