有的时候我们需要调用一些微博的组件,这些调用都需要获取用户在微博的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查用户名php,通过用户名称获取微博id相关推荐

  1. 通过用户名称获取微博id

    PHP 通过微博昵称获取用户的UID 2014-8-4 15:16:39代码1条评论 有的时候我们需要调用一些微博的组件,这些调用都需要获取用户在微博的UID,让用户亲自去找UID会降低用户体验,所以 ...

  2. android 指定资源id,Android 通过名称获取资源ID

    当我们获取网络数据的时候,解析之后往往都是一个字符串,而不是资源id,所有我们没有办法直接使用,只能通过名称来获取到资源id, package com.example.administrator.de ...

  3. php hashids 数字(正整数)加密字条串方法(用于从数字生成类似 YouTube 的 id。不想向用户公开数据库数字 ID 时使用它)

    用于从数字(正整数)生成类似 YouTube 的 id.当您不想向用户公开数据库数字 ID 时使用它 官网: https://hashids.org/php/ https://github.com/v ...

  4. 易语言通过进程名称获取进程ID

    通过系统映像的名称来获取进程的PID,有了PID就可以通过(进程_ID取窗口句柄) 获取窗口句柄,有了句柄就可以大漠后台绑定窗口,所以最终目的还是通过进程名称来获取进程所在窗口的句柄,用来窗口的绑定操 ...

  5. 通过微博用户名称获取用户id及用户的文章详情

    import requests import re from lxml import etreeheaders = {"User-Agent": "Mozilla/5.0 ...

  6. AD域根据用户名称获取DirectoryEntry对象

    #region 根据用户帐号名称取得用户的对象/// <summary>/// 根据用户帐号名称取得用户的对象/// </summary>/// <param name= ...

  7. 根据进程名称获取进程id

    # -*- conding:utf-8-*- import subprocess def getpid_windows(process_name):     """利用c ...

  8. Linux下根据用户ID查询用户名

    根据用户ID查询用户名 使用root用户 getent passwd [uid] 例如: getent passwd 501

  9. Android 获取唯一Id

    git:GitHub - gzu-liyujiang/Android_CN_OAID: 安卓设备唯一标识解决方案,可完全替代移动安全联盟统一 SDK 闭源方案.包括国内手机厂商的开放匿名标识(OAID ...

最新文章

  1. javascript ES6 新特性之 扩展运算符 三个点 ...
  2. 异步爬虫框架与协程浅析
  3. python的功能模块_Python的功能模块[1] - struct - struct 在网络编程中的使用
  4. 小学生python入门-如何看待小学生开始学Python?
  5. Sublime插件支持Sass编译和Babel解析ES6 .sublime-build文件初探
  6. linux常用的内核镜像格式
  7. leetcode 328. Odd Even Linked List | 328. 奇偶链表(Java)
  8. XP无法建立宽带连接的解决方法
  9. openresty json mysql_openresty 前端开发入门五之Mysql篇
  10. linux 权限管理命令chown、chgrp、umask、linux新建文件或目录的默认权限755
  11. java学习之操作符
  12. Spring自带的线程池ThreadPoolTaskExecutor
  13. 第1章 《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明》目录
  14. uniapp 基础框架模板
  15. C#中操作Word(8)—— 向Word中插入图表的三种方法(一)
  16. 第一章:随机事件和概率(一)
  17. 四个架构设计案例及其思维方式
  18. MFC--利用Haru库生成PDF文件
  19. 阿里巴巴为何坚持对混沌工程的研发迭代?
  20. 解决安卓手机USB接口被外设占用导致无法调试的问题

热门文章

  1. 河南省高中计算机会考难不难,关于河南省的高中会考我想说。。。
  2. 比较好用的两款免费音频(视频)格式转换、处理软件
  3. 百度地图API获取某个行政区
  4. 洛谷刷题C语言:距离函数、闰年展示、计算阶乘、猴子吃桃、培训
  5. 5G无用时代的终结—从iPhone 12系列到vivo 6G应用场景的展望
  6. 企业的组织架构对技术架构的影响
  7. head first java勘误_《深入解析Oracle》一书勘误表
  8. 3DMax如何制作弧形椅子?
  9. Loaders 的使用,结合Fragments
  10. 【U8+】U8手工增加会计期间提示找不到存储过程