一言API修复+更新
2023-01-23更新
近期回看相关Api,由于各种各样的原因,导致先前(早些时候)我将本站侧边栏的一言框隐藏了。
至于具体是什么时候关停的,我已经无从得知了。
但我目前能做的,便是将它重新修好并再次上线!
首先感谢hitokoto.cn提供了完整数据包和相关部署组件!
由于我个人使用无需完整后端服务,基于上上上个版本的垃圾代码自行实现了极少部分功能。
详细部署教程请移步部署实例 | 一言开发者中心。
目前修复工作暂时结束。
后续会将部分代码贴出,以及完善本地一言更新系统。
相关参考链接:
https://www.php.net/manual/zh/function.in-array
https://developer.aliyun.com/article/201471
https://stackoverflow.com/questions/4345554/convert-a-php-object-to-an-associative-array
https://www.zhihu.com/question/20151242/answer/638710395
前言
原来的一言是一个json包,总共1500条.
但经常看到重复的?(雾)同时又发现了Hitokoto.cn这个收集站,因为我的访问量小嘛,为了不给他们带来负担,同时又由于我有一种自用的东西都要掌握在自己手里的奇怪想法?(或许是各种各样的服务倒闭所引起的吧.)
反正我就是要自己做一言站点自用啦!(无需在意前面奇奇怪怪的内容)
上手
由于我仅会的爬虫语言只有php,学业繁重(摸鱼太多),也没来及的去学习python.所以只好用php写了爬虫脚本然后写入mysql数据库...
如下所示:(或许这么简单的代码就不只我和马克思能看懂,你也没问题!?)
<?php
/*
*Yiyan Collection
*author:Jiang Xu
*description:get Yiyan from international.v1.hitokoto.cn directly and save it.
*date:20200415
*/
//相关配置
require_once(__DIR__ ."/config.php");//模块化mysql相关前置函数,$conn可直接使用
require_once(__DIR__ ."/var/curl.php");//自用的curl函数.
ob_start();
for($i=0;$i<25;$i++){
//sleep(1);
$json = curl_request('https://international.v1.hitokoto.cn/','https://hitokoto.cn/',false);
$array = json_decode($json,true);
$id = $array['id'];
$hitokoto = str_replace("'","\'",$array['hitokoto']);//$array['hitokoto'];
$type = $array['type'];
$from = $array['from'];
$from_who = $array['from_who'];
$creator = $array['creator'];
$creator_uid = $array['creator_uid'];
$reviewer = $array['reviewer'];
$uuid = $array['uuid'];
$created_at = $array['created_at'];
//echo '<br>'.$uuid;
$sql = "SELECT uuid from hitokoto WHERE uuid='".$uuid."'";
$retval = mysqli_query( $conn, $sql ); // 查询数据
$row = mysqli_fetch_array($retval,MYSQLI_ASSOC);
if(empty($row)){
echo $json."\n";
$sql = "INSERT INTO hitokoto ".
"(`id`,`hitokoto`,`type`,`from`,`from_who`,`creator`,`creator_uid`,`reviewer`,`uuid`,`created_at`) ".
"VALUES ".
"('$id','$hitokoto','$type','$from','$from_who','$creator','$creator_uid','$reviewer','$uuid','$created_at')";
$retval = mysqli_query( $conn, $sql );
if(! $retval ){
$errors = '无法插入数据: ' .$json. mysqli_error($conn).'\n';
echo $errors;
file_put_contents(__DIR__ ."/errors.txt", $errors, FILE_APPEND);
}
}
}
$out = ob_get_contents();
ob_end_clean();
echo $out;
?>
代码肯定有很多不足之处,不过无所谓啦,反正已经爬完了...(其实还剩下十几条,死活都爬不出来,放弃了,日后访问到再写入.)
PS:https://international.v1.hitokoto.cn/
现在QPS为25!⚠
所以很快本站就会用上全新的一言了!不过看起来也不会有什么变化...╮(╯▽╰)╭
鸣谢!
后记
有需要一言数据库的可以留言告诉我,我可以私发,本来这就是共享的嘛,就不要再给服务器增加负担了.