# GPTs 簡易串接 Dev.to
## Dev.to API 文件
https://developers.forem.com/api/v1#tag/articles/operation/getArticles
## Action 定義的 API 規格
```
{
"openapi": "3.0.0",
"info": {
"title": "DevTo 文章 API",
"description": "從 Dev.to 獲取具有特定標籤的文章,並排除特定標籤。",
"version": "1.0.0"
},
"servers": [
{
"url": "https://dev.to/api",
"description": "開發社區 API 服務器"
}
],
"paths": {
"/articles": {
"get": {
"operationId": "getArticles",
"summary": "從 Dev.to 獲取文章",
"description": "檢索文章,'tag' 始終為 'angular',而 'tags' 默認包含 'angular',並依要求增加其他選項,如 tags:'option, option2, option3',同時需排除 'angularjs' 標籤,如:tags_exclude:'angularjs',或是排除有 'AngularJs' 相關,per_page 最多 35 筆,若要求 '熱門文章' 時,top 設為 365,state 需設定為 rising,代表觀看數上升,且,若是要求'最新文章'時,top 設為 30,state 需設定為 fresh,代表近期的新發佈。",
"parameters": [
{
"name": "tag",
"in": "query",
"description": "每個請求的固定標籤。",
"required": true,
"schema": {
"type": "string",
"default": "angular",
"example": "angular"
}
},
{
"name": "tags",
"in": "query",
"description": "過濾文章的標籤,始終包含 'angular',可選擇性包含 'signals'。",
"required": true,
"schema": {
"type": "string",
"default": "angular",
"example": "angular,signals"
}
},
{
"name": "tags_exclude",
"in": "query",
"description": "排除的標籤。",
"required": true,
"schema": {
"type": "string",
"default": "angularjs",
"example": "angularjs"
}
},
{
"name": "top",
"in": "query",
"description": "幾天前的文章。",
"required": true,
"schema": {
"type": "integer",
"default": 180,
"example": 180
}
},
{
"name": "per_page",
"in": "query",
"description": "每頁返回的文章數量。",
"required": true,
"schema": {
"type": "integer",
"default": 50,
"example": 50
}
},
{
"name": "state",
"in": "query",
"description": "文章的狀態,像是 rising 或是 fresh",
"required": true,
"schema": {
"type": "string",
"default": "rising",
"example": "rising"
}
}
],
"responses": {
"200": {
"description": "文章的 JSON 數組",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Article"
}
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"Article": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"title": {
"type": "string"
},
"description": {
"type": "string"
}
}
}
}
}
}
```
## 提問範本
```
需要 Angular {{內容}} 的 {{ 文章類型 || 最新文章, 熱門文章 || S}}
1. 至少提供{{幾筆|| 35, 30, 25, 20, 15, 10 ||r||35}}篇
2. 按照文章日期排序,新到舊
3. 顯示 日期、標題、網址,其他不用提供,且列出全部{{幾筆|| 35, 30, 25, 20, 15, 10 ||r||35}}篇
```
[ChatGPT提問助手 - Chrome 應用商店連結](https://chrome.google.com/webstore/detail/chatgpt-%E6%8F%90%E5%95%8F%E5%8A%A9%E6%89%8B/biohjdkjclhempinkjfnjenpldjnkcfn?hl=zh-TW)
## 串接過程
### 定義一份 API 文件
基本上可以把 API 打的方式丟給 **[ActionsGPT](https://chat.openai.com/g/g-TYEliDU6A-actionsgpt)**,它就會直接幫你產出一份了,另外若是本來就有 API 文件(如:Swagger),就直接給它就好。
### 告訴 GPTs 如何使用 API
基本上最重要的就是這段,就是告訴 GPTs 要如何根據下達的指令,去打不同的參數。
```
"description": "檢索文章,'tag' 始終為 'angular',而 'tags' 默認包含 'angular',並依要求增加其他選項,如 tags:'option, option2, option3',同時需排除 'angularjs' 標籤,如:tags_exclude:'angularjs',或是排除有 'AngularJs' 相關,per_page 最多 35 筆,若要求 '熱門文章' 時,top 設為 365,state 需設定為 rising,代表觀看數上升,且,若是要求'最新文章'時,top 設為 30,state 需設定為 fresh,代表近期的新發佈。",
```
#### 需求說明
* 希望**排除 AngularJs 文章**。
* 如果是**最新文章**,希望是 **30 天內**,而且是**近期發佈**的文章。
* 如果是**熱門文章**,希望是 **1 年內**,而且是**熱門度高**的文章。
#### 嘗試過程
要讓 GPTs 打參數還滿簡單的,但是困難的是如果有情境的話,類似 **最新文章** vs **熱門文章**,但一開始不太想定義情境,希望能自己去猜,不過失敗率還是滿高的,而且又容易試到 **GPT4 使用次數爆掉**,後來想想就直接指定情境就好,畢竟如果是我寫程式,也會希望情境的規格能清楚,而不是叫我通靈。
#### 建議
- 明確示範傳遞參數,如:tags:'option, option2, option3'。
- 若情境夠明確,就直接定義使用情境。
- 珍惜 GPT4 使用次數,不要期望 GPTs 很會通靈。
### 示範影片
[GPTs 簡易串接 Dev.to ](https://youtu.be/KcmrL-4Uixo)