通过id查用户名php,通过用户名称获取微博id
有的时候我们需要调用一些微博的组件,这些调用都需要获取用户在微博的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相关推荐
- 通过用户名称获取微博id
PHP 通过微博昵称获取用户的UID 2014-8-4 15:16:39代码1条评论 有的时候我们需要调用一些微博的组件,这些调用都需要获取用户在微博的UID,让用户亲自去找UID会降低用户体验,所以 ...
- android 指定资源id,Android 通过名称获取资源ID
当我们获取网络数据的时候,解析之后往往都是一个字符串,而不是资源id,所有我们没有办法直接使用,只能通过名称来获取到资源id, package com.example.administrator.de ...
- php hashids 数字(正整数)加密字条串方法(用于从数字生成类似 YouTube 的 id。不想向用户公开数据库数字 ID 时使用它)
用于从数字(正整数)生成类似 YouTube 的 id.当您不想向用户公开数据库数字 ID 时使用它 官网: https://hashids.org/php/ https://github.com/v ...
- 易语言通过进程名称获取进程ID
通过系统映像的名称来获取进程的PID,有了PID就可以通过(进程_ID取窗口句柄) 获取窗口句柄,有了句柄就可以大漠后台绑定窗口,所以最终目的还是通过进程名称来获取进程所在窗口的句柄,用来窗口的绑定操 ...
- 通过微博用户名称获取用户id及用户的文章详情
import requests import re from lxml import etreeheaders = {"User-Agent": "Mozilla/5.0 ...
- AD域根据用户名称获取DirectoryEntry对象
#region 根据用户帐号名称取得用户的对象/// <summary>/// 根据用户帐号名称取得用户的对象/// </summary>/// <param name= ...
- 根据进程名称获取进程id
# -*- conding:utf-8-*- import subprocess def getpid_windows(process_name): """利用c ...
- Linux下根据用户ID查询用户名
根据用户ID查询用户名 使用root用户 getent passwd [uid] 例如: getent passwd 501
- Android 获取唯一Id
git:GitHub - gzu-liyujiang/Android_CN_OAID: 安卓设备唯一标识解决方案,可完全替代移动安全联盟统一 SDK 闭源方案.包括国内手机厂商的开放匿名标识(OAID ...
最新文章
- javascript ES6 新特性之 扩展运算符 三个点 ...
- 异步爬虫框架与协程浅析
- python的功能模块_Python的功能模块[1] - struct - struct 在网络编程中的使用
- 小学生python入门-如何看待小学生开始学Python?
- Sublime插件支持Sass编译和Babel解析ES6 .sublime-build文件初探
- linux常用的内核镜像格式
- leetcode 328. Odd Even Linked List | 328. 奇偶链表(Java)
- XP无法建立宽带连接的解决方法
- openresty json mysql_openresty 前端开发入门五之Mysql篇
- linux 权限管理命令chown、chgrp、umask、linux新建文件或目录的默认权限755
- java学习之操作符
- Spring自带的线程池ThreadPoolTaskExecutor
- 第1章 《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)周志明》目录
- uniapp 基础框架模板
- C#中操作Word(8)—— 向Word中插入图表的三种方法(一)
- 第一章:随机事件和概率(一)
- 四个架构设计案例及其思维方式
- MFC--利用Haru库生成PDF文件
- 阿里巴巴为何坚持对混沌工程的研发迭代?
- 解决安卓手机USB接口被外设占用导致无法调试的问题