📅  最后修改于: 2023-12-03 15:30:33.451000             🧑  作者: Mango
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 实现的示例代码,其中 ${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 实现的示例代码,其中 ${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;
}