实现方法
1、id提取
- www.xiaohongshu.com 浏览器直接复制过来的
- xhslink.com 分享的短链地址
首先拿到文章的id,直接复制过来的从链接中提取,短链接从 header
头中提取,或者重定向提取
这个id后面提取json中还会用到
拼接小红书视频/图集地址:https://www.xiaohongshu.com/discovery/item/{小红书id}
2、请求地址
请求这个地址,header
中包含 cookie
和 Accept
,这两个请求参数登录小红书网页版直接获取。
请求中的内容包含 json
格式文本,正则提取 json
格式文本,json
文本位于 window.INITIAL_STATE=
后
正则表达式如下:/window.__INITIAL_STATE__.+redmojiMap\"\:{}}}}/
,php示例如下:
preg_match('/window\.__INITIAL_STATE__.+redmojiMap\"\:\{\}\}\}\}/',$html,$arr);
$arr = str_replace('window.__INITIAL_STATE__=' , "", $arr[0]);
$json = json_decode(str_replace('undefined' ,'null', $arr),true);
3、获取图集地址
图集地址位于json文件中下面路径,id为第一步获取到的id,默认解析到的为无水印的地址,通过for循环存进数组。
$json['note']['noteDetailMap'][$id]['note']['imageList']
注意:请求头中 Accept
中需包含 image/webp;
参数,没有这个参数请求的图片包含水印,建议直接复制小红书网页中的 Accept
。
#示例代码
$images_num=count($json['note']['noteDetailMap'][$id]['note']['imageList']);
for($i = 0; $i < $images_num; $i++){
$ch[$i] = $json['note']['noteDetailMap'][$id]['note']['imageList'][$i]['infoList'][1]['url'];
}
4、获取视频地址
通过拼接 originVideoKey
参数得到无水印的地址
originVideoKey
参数位于:$json['note']['noteDetailMap'][$id]['note']['video']['consumer']['originVideoKey']
拼接方法:’https://sns-video-bd.xhscdn.com/’ . {originVideoKey
}
#示例代码
$arr = array(
'code' => 200,
'msg' => '解析成功',
'data' => [
'author' => $json['note']['noteDetailMap'][$id]['note']['user']['nickname'],
'uid' => $json['note']['noteDetailMap'][$id]['note']['user']['userId'],
'avatar'=>$json['note']['noteDetailMap'][$id]['note']['user']['avatar'],
'cover' => $ch[0],
'like' => $json['note']['noteDetailMap'][$id]['note']['interactInfo']['likedCount'],
'title' => $json['note']['noteDetailMap'][$id]['note']['desc'],
'url' => 'https://sns-video-bd.xhscdn.com/' . $json['note']['noteDetailMap'][$id]['note']['video']['consumer']['originVideoKey'],
]
);
完整代码
分享是一种美德,当你分享时请你附带上本文链接。
请登录后查看评论内容