Tominysun

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条.

Snipaste_2020-04-15_21-15-15.png

但经常看到重复的?(雾)同时又发现了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!⚠

所以很快本站就会用上全新的一言了!不过看起来也不会有什么变化...╮(╯▽╰)╭

鸣谢!

https://hitokoto.cn/

后记

有需要一言数据库的可以留言告诉我,我可以私发,本来这就是共享的嘛,就不要再给服务器增加负担了.

添加新评论