-
PHP 通过微博昵称获取用户的UID
2014-8-4 15:16:39代码1条评论 -
有的时候我们需要调用一些微博的组件,这些调用都需要获取用户在微博的UID,让用户亲自去找UID会降低用户体验,所以我们需要想一些办法来获取。
起初想到的就是访问微博搜索页面,正则匹配页面内容,找到UID,存入数据库。
但是经过实验后发现,在经过一定次数的读取之后,无法读取了,手动输出page内容一看,竟然需要输入验证码。
偶然间在创建“一键关注”组件的时候,发现只需要输入用户名即可自动获取UID。
于是我按下F12,查找按钮代码里是否有UID
按钮根本不是按照用户名查询的,而是直接根据UID来查看的
那应该就是在输入框onblur的时候触发的获取UID事件,获取之后再填入按钮组件中。
那么切换到Network选项卡进行抓包
发现向getuidnick.php发送了一个POST请求,nickname字段是用户的昵称,返回的data字段就是UID了。
那么我们根据他的header和post data,利用curl构造一个php函数来获取
最终代码:
function wb_api_widgetgetuid($name){ $ch = curl_init();//初始化一个CURL会话 curl_setopt($ch,CURLOPT_URL,"http://open.weibo.com/widget/ajax_getuidnick.php");//设置CURL请求URL $data = "nickname=".urlencode($name);//设置POST数据(用户昵称) curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.0.11) Firefox/1.5.0.11;");//设置User-Agent curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HEADER,0); $header = array (); $header [] = 'Accept-Language: zh-cn'; $header [] = 'Pragma: no-cache'; $header [] = 'Referer: http://open.weibo.com/widget/followbutton.php';//经测试,请求必须有Referer,否则将返回NULL curl_setopt($ch, CURLOPT_HTTPHEADER,$header); curl_setopt($ch, CURLOPT_POST,1); curl_setopt($ch, CURLOPT_POSTFIELDS,$data); $page = curl_exec($ch);//运行抓取 $matches = json_decode($page,true);//将页面返回的json数据解析为数组 curl_close($ch); if(empty($matches['data'])){//判断返回的UID是否为空 return "ERR_NotFound"; }else{ return $matches['data']; } }
当然 如果要应用到实际使用中,最好在第一次获取之后就将用户的UID缓存到数据库中,避免抓取过于频繁而导致异常。
通过用户名称获取微博id
最新推荐文章于 2021-07-09 09:46:49 发布