Maison  >  Article  >  développement back-end  >  PHP implémente l'interface Baidu Wenxin Yiyan pour empêcher les requêtes répétées et le traitement de la déduplication des données

PHP implémente l'interface Baidu Wenxin Yiyan pour empêcher les requêtes répétées et le traitement de la déduplication des données

WBOY
WBOYoriginal
2023-08-25 20:52:441420parcourir

PHP implémente linterface Baidu Wenxin Yiyan pour empêcher les requêtes répétées et le traitement de la déduplication des données

PHP implémente l'interface Baidu Wenxin Yiyan pour éviter les requêtes répétées et le traitement de déduplication des données

Lors du développement d'applications Web, nous avons souvent besoin d'appeler des interfaces externes pour obtenir des données afin d'enrichir nos applications, parmi lesquelles l'interface Baidu Wenxin Yiyan C'est un très interface populaire qui peut obtenir des phrases aléatoires de différentes catégories. Cependant, lorsque nous demandons fréquemment l'interface, nous devons réfléchir à la manière d'éviter les demandes répétées et en même temps de dédupliquer les données obtenues pour éviter la duplication des données.

Dans cet article, je vais montrer comment utiliser PHP pour implémenter l'interface Baidu Wenxin Yiyan afin d'éviter les requêtes répétées et la déduplication des données.

Tout d'abord, nous devons clarifier comment utiliser l'interface Baidu Wenxin Yiyan. Nous pouvons obtenir une phrase en envoyant une requête GET à l'URL de l'interface suivante :

GET http://api.lwl12.com/hitokoto/v1?encode=json

Cette interface renverra les données JSON d'une phrase, y compris le contenu de la phrase, la source et d'autres informations.

Ensuite, nous devons réfléchir à la manière d'éviter les demandes en double. Nous pouvons utiliser le cache pour stocker l'horodatage de la requête la plus récente et le comparer avec l'horodatage actuel. Si l'intervalle de temps entre les deux est court, nous pouvons obtenir le résultat de la requête précédente directement depuis le cache sans faire une autre requête.

function getHitokoto() {
    $cacheFile = 'cache.txt';
    $cacheTime = 60;  // 缓存时间,单位为秒

    if (file_exists($cacheFile) && time() - filemtime($cacheFile) < $cacheTime) {
        // 直接从缓存中获取上次请求的结果
        $result = file_get_contents($cacheFile);
    } else {
        // 发起新的请求
        $result = file_get_contents('http://api.lwl12.com/hitokoto/v1?encode=json');

        // 将结果保存到缓存文件中
        file_put_contents($cacheFile, $result);
    }

    return $result;
}

Dans le code ci-dessus, nous définissons d'abord un nom de fichier cache et une heure de cache. Dans la fonction getHitokoto, nous utilisons les fonctions file_exists et filemtime pour déterminer si le fichier cache existe et s'il a expiré. Si le fichier cache existe et n'a pas expiré, nous obtenons les résultats directement du cache ; sinon, nous lançons une nouvelle requête et enregistrons les résultats dans le fichier cache.

Ensuite, nous devons réfléchir à la manière d'effectuer la déduplication des données. Nous pouvons utiliser la base de données pour stocker les phrases obtenues et interroger la base de données avant chaque requête. Si la phrase existe déjà, relancer la requête jusqu'à ce qu'une phrase non répétée soit obtenue.

Voici un exemple simple :

function getHitokoto() {
    // 连接数据库
    $conn = new mysqli('localhost', 'username', 'password', 'database');

    // 检查数据库连接是否成功
    if ($conn->connect_error) {
        die('数据库连接失败:' . $conn->connect_error);
    }

    // 查询数据库中已有的句子
    $existingStatements = $conn->query('SELECT statement FROM hitokoto');

    // 将查询结果转换为数组
    $existingStatementsArr = [];
    while ($row = $existingStatements->fetch_assoc()) {
        $existingStatementsArr[] = $row['statement'];
    }

    // 发起请求直到获取到一个未重复的句子
    do {
        $result = file_get_contents('http://api.lwl12.com/hitokoto/v1?encode=json');
        $resultArr = json_decode($result, true);
        $statement = $resultArr['hitokoto'];
    } while (in_array($statement, $existingStatementsArr));

    // 插入新句子到数据库
    $conn->query('INSERT INTO hitokoto (statement) VALUES ("' . $statement . '")');

    // 关闭数据库连接
    $conn->close();

    return $result;
}

Dans le code ci-dessus, nous nous connectons d'abord à la base de données et interrogeons les phrases existantes. Ensuite, avant de faire la requête, nous utilisons une boucle do-while pour déterminer si la phrase renvoyée existe déjà dans la base de données. Si elle existe, nous relançons une nouvelle demande jusqu'à obtenir une phrase non répétée. Enfin, nous insérons la nouvelle phrase dans la base de données et fermons la connexion à la base de données.

Grâce aux exemples de code ci-dessus, nous pouvons réaliser la prévention des requêtes répétées et le traitement de la déduplication des données de l'interface Baidu Wenxin Yiyan. Grâce à l'utilisation de la mise en cache et de bases de données, nous pouvons améliorer l'efficacité des requêtes tout en évitant de récupérer à plusieurs reprises la même phrase. Cela rend notre application plus stable et efficace.

En résumé, en utilisant rationnellement le cache et la base de données, nous pouvons optimiser les appels d'interface externe et améliorer les performances et la stabilité de nos propres applications. Pendant le développement, nous devons choisir des méthodes appropriées pour éviter les demandes répétées et effectuer une déduplication des données en fonction des besoins réels.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn