通过id查用户名php,通过用户名称获取微博id

有的时候我们需要调用一些微博的组件,这些调用都需要获取用户在微博的UID,让用户亲自去找UID会降低用户体验,所以我们需要想一些办法来获取。

起初想到的就是访问微博搜索页面,正则匹配页面内容,找到UID,存入数据库。

但是经过实验后发现,在经过一定次数的读取之后,无法读取了,手动输出page内容一看,竟然需要输入验证码。

偶然间在创建“一键关注”组件的时候,发现只需要输入用户名即可自动获取UID。

0818b9ca8b590ca3270a3433284dd417.png

于是我按下F12,查找按钮代码里是否有UID

0818b9ca8b590ca3270a3433284dd417.png

按钮根本不是按照用户名查询的,而是直接根据UID来查看的

那应该就是在输入框onblur的时候触发的获取UID事件,获取之后再填入按钮组件中。

那么切换到Network选项卡进行抓包

0818b9ca8b590ca3270a3433284dd417.png

发现向getuidnick.php发送了一个POST请求,nickname字段是用户的昵称,返回的data字段就是UID了。

0818b9ca8b590ca3270a3433284dd417.png

那么我们根据他的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缓存到数据库中,避免抓取过于频繁而导致异常。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值