📜  dotcms 拉取相关内容 api (1)

📅  最后修改于: 2023-12-03 15:30:33.451000             🧑  作者: Mango

使用 DotCMS 拉取相关内容 API

简介

DotCMS 是一个基于 Java 技术的内容管理系统。它提供了丰富的 API 以满足不同场景下的开发需求。其中,拉取相关内容 API 是一个常用的接口,能够通过关键字等参数获取与当前内容相关的其他内容,如相关新闻、相关产品等。

接口说明
接口地址
/api/content/render/false/query/+title:${CONTENT_TITLE}+contentType:${CONTENT_TYPE}+languageId:${LANGUAGE_ID}+conhost:${HOST_IDENTIFIER}+conhost:SYSTEM_HOST+deleted:false+working:true/orderby/modDate%20desc/sort/orderby/modDate%20desc/showAll/true?limit=${LIMIT}&offset=${OFFSET}
参数说明

| 参数名 | 类型 | 必填 | 描述 | | ---------------- | --------- | ---- | ------------------------------------------------------------ | | CONTENT_TITLE | 字符串 | 是 | 当前内容的标题,作为获取相关内容的关键字。 | | CONTENT_TYPE | 字符串 | 是 | 当前内容的类型 ID,用于过滤获取的相关内容。 | | LANGUAGE_ID | 整型 | 是 | 当前内容的语言 ID,用于过滤获取的相关内容。 | | HOST_IDENTIFIER | 字符串 | 是 | 当前内容所属站点的标识符,用于过滤获取的相关内容。 | | LIMIT | 整型 | 否 | 每次获取的相关内容数量,默认为 10。 | | OFFSET | 整型 | 否 | 偏移量,用于分页获取相关内容,默认为 0。 |

返回值说明

返回的结果为 JSON 格式,示例如下:

```json
{
  "contentlets": [
    {
      "title": "相关内容标题1",
      "url": "/content/1234",
      "thumbUrl": "/content/1234_thumbnail",
      "body": "相关内容摘要1",
      "modDate": "2022-01-01T01:01:01Z"
    },
    {
      "title": "相关内容标题2",
      "url": "/content/5678",
      "thumbUrl": "/content/5678_thumbnail",
      "body": "相关内容摘要2",
      "modDate": "2022-01-02T02:02:02Z"
    }
  ]
}

| 字段名 | 类型 | 描述 | | --------------- | ------- | ------------------------------------------------------------ | | title | 字符串 | 相关内容的标题。 | | url | 字符串 | 相关内容的访问 URL。 | | thumbUrl | 字符串 | 相关内容的缩略图访问 URL。 | | body | 字符串 | 相关内容的正文摘要。 | | modDate | 字符串 | 相关内容的最后修改时间。格式为 YYYY-MM-DDTHH:mm:ssZ,其中 T 表示分隔符,Z 表示时区。 |

代码示例

使用 Java 实现

下面是一个使用 Java 实现的示例代码,其中 ${CONTENT_TITLE}${CONTENT_TYPE}${LANGUAGE_ID} 分别替换为实际内容的值:

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.nio.charset.StandardCharsets;

public class DotCMSApiClient {
    private final String apiUrl = "/api/content/render/false/query/+title:${CONTENT_TITLE}+contentType:${CONTENT_TYPE}+languageId:${LANGUAGE_ID}+conhost:${HOST_IDENTIFIER}+conhost:SYSTEM_HOST+deleted:false+working:true/orderby/modDate%20desc/sort/orderby/modDate%20desc/showAll/true?limit=${LIMIT}&offset=${OFFSET}";
    private final String hostIdentifier = "your_host_identifier";
    private final String apiUrlWithHostIdentifier = apiUrl.replaceAll("\\$\\{HOST_IDENTIFIER}", hostIdentifier);

    public String fetchRelatedContents(String contentTitle, String contentType, int languageId, int limit, int offset) throws IOException {
        String apiUrlWithParams = apiUrlWithHostIdentifier
                .replaceAll("\\$\\{CONTENT_TITLE}", contentTitle)
                .replaceAll("\\$\\{CONTENT_TYPE}", contentType)
                .replaceAll("\\$\\{LANGUAGE_ID}", String.valueOf(languageId))
                .replaceAll("\\$\\{LIMIT}", String.valueOf(limit))
                .replaceAll("\\$\\{OFFSET}", String.valueOf(offset));

        HttpGet httpGet = new HttpGet(apiUrlWithParams);
        HttpResponse response = HttpClients.createDefault().execute(httpGet);

        HttpEntity entity = response.getEntity();
        String result;
        if (entity != null) {
            result = IOUtils.toString(entity.getContent(), StandardCharsets.UTF_8);
            EntityUtils.consume(entity);
        } else {
            throw new IOException("Response entity is null");
        }

        return result;
    }
}

使用 JavaScript 实现

下面是一个使用 JavaScript 实现的示例代码,其中 ${CONTENT_TITLE}${CONTENT_TYPE}${LANGUAGE_ID} 分别替换为实际内容的值:

const fetch = require("node-fetch");

const apiUrl = "/api/content/render/false/query/+title:${CONTENT_TITLE}+contentType:${CONTENT_TYPE}+languageId:${LANGUAGE_ID}+conhost:${HOST_IDENTIFIER}+conhost:SYSTEM_HOST+deleted:false+working:true/orderby/modDate%20desc/sort/orderby/modDate%20desc/showAll/true?limit=${LIMIT}&offset=${OFFSET}";
const hostIdentifier = "your_host_identifier";
const apiUrlWithHostIdentifier = apiUrl.replaceAll("\\$\\{HOST_IDENTIFIER}", hostIdentifier);

async function fetchRelatedContents(contentTitle, contentType, languageId, limit, offset) {
    const apiUrlWithParams = apiUrlWithHostIdentifier
        .replaceAll("\\$\\{CONTENT_TITLE}", contentTitle)
        .replaceAll("\\$\\{CONTENT_TYPE}", contentType)
        .replaceAll("\\$\\{LANGUAGE_ID}", String(languageId))
        .replaceAll("\\$\\{LIMIT}", String(limit))
        .replaceAll("\\$\\{OFFSET}", String(offset));

    const response = await fetch(apiUrlWithParams);
    const result = await response.text();

    return result;
}