本来我博客的一言,都是来自https://github.com/kokororin/hitokoto/blob/master/hitokoto.json的,400多条的样子。

刚刚自己有点不满足这些了,于是就像自己能不能试着扒一下一言的数据呢。
https://hitokoto.cn/status这个页面发现一言数目1461,应该就是一共的数量吧???

直接请求https://v1.hitokoto.cn就可以获得一条一言的json

然后开始弄

$nr='[<br>';
//用于拼接内容,使其变成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=',<br>';
if($i==0){$dh='';}
 $nr=$nr.$dh.$data_json; 
//拼接内容,使其跟json格式对应
}
 
}
echo $nr.'<br>]';
//循环结束,输出最终内容

刚写完的瞬间,内心只剩下了“完美”二字,然而我一运行,转圈圈...转圈圈...然后就404了。

然后我内心依旧剩下两个字“垃圾”。

然后我就将循环次数由1461改成了300,准备分批抓取,手动将抓取结果存txt,同时将这300条的数据id都输出出来,然后手动添加到原本建立的空数组中,然后进行第二批抓取...
然后第三批...
等等...

最后我抓了1500条数据,我就不抓了累了,不过官方不是说就1461条数据吗?好奇怪!

然后用https://www.bejson.com/验证了下格式,没啥问题就ok了

一言抓取

版权属于:泽泽社长
本文链接:https://blog.zezeshe.com/archives/php-hitokoto-zhua.html
本站未注明转载的文章均为原创,并采用 CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!