本来我博客的一言,都是来自https://github.com/kokororin/hitokoto/blob/master/hitokoto.json
的,400多条的样子。
刚刚自己有点不满足这些了,于是就像自己能不能试着扒一下一言的数据呢。
从https://hitokoto.cn/status
这个页面发现一言数目1461,应该就是一共的数量吧???
直接请求https://v1.hitokoto.cn
就可以获得一条一言的json
然后开始弄
$nr='[
';
//用于拼接内容,使其变成json格式
//设置超时参数
$opts=array(
"http"=>array(
"method"=>"GET",
"timeout"=>3
),
);
$context = stream_context_create($opts);
//超时这个部分我不懂,在网上随便复制的
for($i=0;$i<1461;$i++){
//设置循环变量,让其循环1461次
$json_string =file_get_contents('https://v1.hitokoto.cn/', false, $context);
//抓取一条一言的json内容
$data = json_decode($json_string);
//对JSON数据进行解码,转换为PHP变量
$id = $data->id;
//定义id为一言json的id
$a= array();
//创建一个空数组
$isin = in_array($id,$a);
//判断一言id是否存在数组中,用来过滤重复抓取的一言数据
if($isin){
$i--;
//如果存在,则i-1,然后重新执行for循环
}else{
array_push($a,$data->id);
//不存在,将一言id存在数组里
$data_json = json_encode($data);
//转为json格式
$dh=',
';
if($i==0){$dh='';}
$nr=$nr.$dh.$data_json;
//拼接内容,使其跟json格式对应
}
}
echo $nr.'
]';
//循环结束,输出最终内容
刚写完的瞬间,内心只剩下了“完美”二字,然而我一运行,转圈圈...转圈圈...然后就404了。
然后我内心依旧剩下两个字“垃圾”。
然后我就将循环次数由1461改成了300,准备分批抓取,手动将抓取结果存txt,同时将这300条的数据id都输出出来,然后手动添加到原本建立的空数组中,然后进行第二批抓取... 然后第三批... 等等...
最后我抓了1500条数据,我就不抓了累了,不过官方不是说就1461条数据吗?好奇怪!
然后用https://www.bejson.com/
验证了下格式,没啥问题就ok了
一言抓取