banner
Magneto

Magnetoの小屋

Magneto在區塊鏈上の小屋,讓我們的文章在互聯網上永遠熠熠生輝!!

自建一言API

前言#

很多網站都喜歡在頁面中加個一言,不過一般都是調用的第三方 api。其實,使用萬能的 php 能通過短短的幾行代碼就實現該功能。

準備工作#

首先準備一個代碼編輯器,然後新建一個 php 文件,命名為 api.php,再新建一個文件,命名為 data.dat(兩個文件均需採用 UTF-8 編碼,否則會亂碼)。

打開 data.dat,在裡面貼入要隨機顯示出來的文本,一行一條 。如果你暫時想不出什麼比較好的句子話,因此我這兒準備了幾十句網易雲熱評,可以直接點我下載引用。

上代碼#

將下列代碼複製並粘貼到 api.php 中保存,你的專屬 “一言” API 就搭建完成了!超簡單是不是……

<?php
// 存儲數據的文件
$filename = 'data.dat';        
// 指定頁面編碼
header('Content-type: text/html; charset=utf-8');
if(!file_exists($filename)) {
    die($filename . ' 數據文件不存在');
}
$data = array();
// 打開文檔
$fh = fopen($filename, 'r');
// 逐行讀取並存入數組中
while (!feof($fh)) {
    $data[] = fgets($fh);
}
// 關閉文檔
fclose($fh);
// 隨機獲取一行索引
$result = $data[array_rand($data)];
echo $result;

上面的代碼是用 fopen + fgets 函數實現的,有些朋友似乎不是特別喜歡,覺得 “效率低”。別急,這兒還有個 file_get_contents 函數實現的版本:

<?php
// 存儲數據的文件
$filename = 'data.dat';
// 指定頁面編碼
header('Content-type: text/html; charset=utf-8');
if(!file_exists($filename)) {
    die($filename . ' 數據文件不存在');
}
// 讀取整個數據文件
$data = file_get_contents($filename);
// 按換行符分割成數組
$data = explode(PHP_EOL, $data);
// 隨機獲取一行索引
$result = $data[array_rand($data)];
// 去除多餘的換行符(保險起見)
$result = str_replace(array("\r","\n","\r\n"), '', $result);
echo $result;

如何在靜態頁面中引用

上面的代碼都是直接在頁面中就輸出了隨機的句子。如果想像一言那樣在靜態的網頁中引用這個 api,該如何實現呢?

很簡單,將最後那一行的 echo $result; 換成

echo 'document.write("'.htmlspecialchars($result).'");';

然後在需要的位置用引入 js 的方式進行調用即可。

示例代碼:

<script src="http://你的網址/api.php"></script>

此文由 Mix Space 同步更新至 xLog
原始鏈接為 https://blog.fmcf.cc/posts/technology/Custom_Hitokoto_API


載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。