[{"data":1,"prerenderedAt":1003},["ShallowReactive",2],{"content:\u002Fpost\u002Fpal-auto-link-docs":3,"surround:\u002Fpost\u002Fpal-auto-link-docs":997},{"id":4,"title":5,"body":6,"categories":975,"date":977,"description":978,"draft":979,"extension":980,"image":981,"meta":982,"navigation":984,"path":985,"permalink":981,"published":981,"readingTime":986,"recommend":981,"references":981,"seo":991,"sitemap":992,"stem":993,"tags":994,"type":995,"updated":977,"__hash__":996},"content\u002Fpost\u002Fpal-auto-link-docs.md","PAL 插件使用文档",{"type":7,"value":8,"toc":953},"minimark",[9,14,26,32,76,89,92,96,131,139,141,144,151,179,185,187,191,195,240,243,296,300,303,308,366,371,381,385,389,499,511,515,521,525,529,652,657,661,667,671,675,725,729,735,737,740,744,752,756,763,767,774,776,779,789,873,875,878,887,893,898,907,912,918,926,945,950],[10,11,13],"h1",{"id":12},"pal-auto-links","PAL Auto Links",[15,16,17,18,25],"p",{},"Typecho 自动友链管理插件，基于原 ",[19,20,24],"a",{"href":21,"rel":22},"http:\u002F\u002Fwww.imhan.com",[23],"nofollow","Links"," 插件的数据表，提供 API 接口实现友链的远程增删改查。",[15,27,28],{},[29,30,31],"del",{},"博客的这篇文章其实就是README.md",[33,34,35,43,53,59,65],"ul",{},[36,37,38,42],"li",{},[39,40,41],"strong",{},"作者",": hjz713,DeepSeek",[36,44,45,48,49],{},[39,46,47],{},"网站",": ",[19,50,51],{"href":51,"rel":52},"https:\u002F\u002Fblog.hjz0713.cn",[23],[36,54,55,58],{},[39,56,57],{},"版本",": 1.0.0",[36,60,61,64],{},[39,62,63],{},"兼容",": Typecho 1.2.1",[36,66,67,70,71,75],{},[39,68,69],{},"依赖",": 需先安装并启用 Links 插件（或已存在 ",[72,73,74],"code",{"code":74},"typecho_links"," 数据表）",[77,78,79],"blockquote",{},[15,80,81,84,85,88],{},[39,82,83],{},"重要",": 插件目录名必须为 ",[72,86,87],{"code":87},"PALAutoLinks","（不含连字符），否则 Typecho 1.2.1 无法加载。",[90,91],"hr",{},[93,94,95],"h2",{"id":95},"安装",[97,98,99,108,118,124],"ol",{},[36,100,101,102,107],{},"将本插件目录",[39,103,104,105],{},"重命名为 ",[72,106,87],{"code":87},"（必须！Typecho 1.2.1 的 namespace 机制不支持目录名含连字符）",[36,109,110,111,113,114,117],{},"将 ",[72,112,87],{"code":87}," 文件夹上传至 Typecho 的 ",[72,115,116],{"code":116},"\u002Fusr\u002Fplugins\u002F"," 目录",[36,119,120,121],{},"进入 Typecho 后台 → 控制台 → 插件，找到「PAL Auto Links」并点击 ",[39,122,123],{},"启用",[36,125,126,127,130],{},"启用后点击 ",[39,128,129],{},"设置","，配置 API 访问令牌",[77,132,133],{},[15,134,135,136,138],{},"本插件不创建额外数据表，直接使用原 Links 插件的 ",[72,137,74],{"code":74}," 表。请确保 Links 插件已启用或该表已存在。",[90,140],{},[93,142,143],{"id":143},"配置",[15,145,146,147,150],{},"在插件设置页面中设置 ",[39,148,149],{},"API 访问令牌","，这是调用 API 的唯一凭证。",[152,153,154,167],"table",{},[155,156,157],"thead",{},[158,159,160,164],"tr",{},[161,162,163],"th",{},"配置项",[161,165,166],{},"说明",[168,169,170],"tbody",{},[158,171,172,176],{},[173,174,175],"td",{},"API Token",[173,177,178],{},"调用 API 时必须在请求参数中携带，建议使用 16 位以上随机字符串",[15,180,181,182],{},"API 接口地址为：",[72,183,184],{"code":184},"https:\u002F\u002F你的域名\u002Faction\u002Fpal-api",[90,186],{},[93,188,190],{"id":189},"api-接口","API 接口",[192,193,194],"h3",{"id":194},"通用说明",[33,196,197,203,210,219,228,234],{},[36,198,199,202],{},[39,200,201],{},"请求方式",": GET 或 POST",[36,204,205,48,208],{},[39,206,207],{},"接口地址",[72,209,184],{"code":184},[36,211,212,48,215,218],{},[39,213,214],{},"认证参数",[72,216,217],{"code":217},"token","（必填，值为你在后台设置的访问令牌）",[36,220,221,48,224,227],{},[39,222,223],{},"操作参数",[72,225,226],{"code":226},"do","（指定操作类型）",[36,229,230,233],{},[39,231,232],{},"编码",": UTF-8",[36,235,236,239],{},[39,237,238],{},"返回格式",": JSON",[192,241,242],{"id":242},"响应码说明",[152,244,245,254],{},[155,246,247],{},[158,248,249,251],{},[161,250,72],{},[161,252,253],{},"含义",[168,255,256,264,272,280,288],{},[158,257,258,261],{},[173,259,260],{},"0",[173,262,263],{},"操作成功",[158,265,266,269],{},[173,267,268],{},"1",[173,270,271],{},"Token 验证失败",[158,273,274,277],{},[173,275,276],{},"2",[173,278,279],{},"参数错误（缺少必填参数等）",[158,281,282,285],{},[173,283,284],{},"3",[173,286,287],{},"资源不存在（如链接 ID 找不到）",[158,289,290,293],{},[173,291,292],{},"4",[173,294,295],{},"数据库错误",[192,297,299],{"id":298},"_1-查询友链列表-list","1. 查询友链列表 (list)",[15,301,302],{},"获取全部友链，可按分类筛选。",[15,304,305],{},[39,306,307],{},"请求参数:",[152,309,310,325],{},[155,311,312],{},[158,313,314,317,320,323],{},[161,315,316],{},"参数",[161,318,319],{},"类型",[161,321,322],{},"必填",[161,324,166],{},[168,326,327,343,353],{},[158,328,329,331,334,337],{},[173,330,226],{},[173,332,333],{},"string",[173,335,336],{},"是",[173,338,339,340],{},"固定值 ",[72,341,342],{"code":342},"list",[158,344,345,347,349,351],{},[173,346,217],{},[173,348,333],{},[173,350,336],{},[173,352,149],{},[158,354,355,358,360,363],{},[173,356,357],{},"sort",[173,359,333],{},[173,361,362],{},"否",[173,364,365],{},"按分类筛选，不传则返回全部",[15,367,368],{},[39,369,370],{},"成功响应示例:",[372,373,379],"pre",{"className":374,"code":376,"language":377,"meta":378},[375],"language-json","{\n    \"code\": 0,\n    \"msg\": \"success\",\n    \"data\": [\n        {\n            \"lid\": \"1\",\n            \"name\": \"示例博客\",\n            \"url\": \"https:\u002F\u002Fexample.com\",\n            \"sort\": \"friend\",\n            \"image\": \"\",\n            \"description\": \"一个示例博客\",\n            \"user\": \"\",\n            \"order\": \"1\"\n        }\n    ]\n}\n","json","",[72,380,376],{"__ignoreMap":378},[192,382,384],{"id":383},"_2-添加友链-add","2. 添加友链 (add)",[15,386,387],{},[39,388,307],{},[152,390,391,403],{},[155,392,393],{},[158,394,395,397,399,401],{},[161,396,316],{},[161,398,319],{},[161,400,322],{},[161,402,166],{},[168,404,405,418,428,440,452,463,475,487],{},[158,406,407,409,411,413],{},[173,408,226],{},[173,410,333],{},[173,412,336],{},[173,414,339,415],{},[72,416,417],{"code":417},"add",[158,419,420,422,424,426],{},[173,421,217],{},[173,423,333],{},[173,425,336],{},[173,427,149],{},[158,429,430,433,435,437],{},[173,431,432],{},"name",[173,434,333],{},[173,436,336],{},[173,438,439],{},"链接名称",[158,441,442,445,447,449],{},[173,443,444],{},"url",[173,446,333],{},[173,448,336],{},[173,450,451],{},"链接地址（需含 http(s):\u002F\u002F）",[158,453,454,456,458,460],{},[173,455,357],{},[173,457,333],{},[173,459,362],{},[173,461,462],{},"链接分类",[158,464,465,468,470,472],{},[173,466,467],{},"image",[173,469,333],{},[173,471,362],{},[173,473,474],{},"链接图片 URL",[158,476,477,480,482,484],{},[173,478,479],{},"description",[173,481,333],{},[173,483,362],{},[173,485,486],{},"链接描述",[158,488,489,492,494,496],{},[173,490,491],{},"user",[173,493,333],{},[173,495,362],{},[173,497,498],{},"自定义数据",[77,500,501],{},[15,502,503,506,507,510],{},[72,504,505],{"code":505},"lid"," 和 ",[72,508,509],{"code":509},"order"," 由系统自动生成，无需传入。",[15,512,513],{},[39,514,370],{},[372,516,519],{"className":517,"code":518,"language":377,"meta":378},[375],"{\n    \"code\": 0,\n    \"msg\": \"success\",\n    \"data\": {\n        \"lid\": 1,\n        \"name\": \"新博客\",\n        \"url\": \"https:\u002F\u002Fnewblog.com\",\n        \"sort\": \"friend\",\n        \"image\": \"\",\n        \"description\": \"\",\n        \"user\": \"\",\n        \"order\": 1\n    }\n}\n",[72,520,518],{"__ignoreMap":378},[192,522,524],{"id":523},"_3-更新友链-update","3. 更新友链 (update)",[15,526,527],{},[39,528,307],{},[152,530,531,543],{},[155,532,533],{},[158,534,535,537,539,541],{},[161,536,316],{},[161,538,319],{},[161,540,322],{},[161,542,166],{},[168,544,545,558,568,580,590,601,611,621,631,641],{},[158,546,547,549,551,553],{},[173,548,226],{},[173,550,333],{},[173,552,336],{},[173,554,339,555],{},[72,556,557],{"code":557},"update",[158,559,560,562,564,566],{},[173,561,217],{},[173,563,333],{},[173,565,336],{},[173,567,149],{},[158,569,570,572,575,577],{},[173,571,505],{},[173,573,574],{},"int",[173,576,336],{},[173,578,579],{},"链接 ID",[158,581,582,584,586,588],{},[173,583,432],{},[173,585,333],{},[173,587,362],{},[173,589,439],{},[158,591,592,594,596,598],{},[173,593,444],{},[173,595,333],{},[173,597,362],{},[173,599,600],{},"链接地址",[158,602,603,605,607,609],{},[173,604,357],{},[173,606,333],{},[173,608,362],{},[173,610,462],{},[158,612,613,615,617,619],{},[173,614,467],{},[173,616,333],{},[173,618,362],{},[173,620,474],{},[158,622,623,625,627,629],{},[173,624,479],{},[173,626,333],{},[173,628,362],{},[173,630,486],{},[158,632,633,635,637,639],{},[173,634,491],{},[173,636,333],{},[173,638,362],{},[173,640,498],{},[158,642,643,645,647,649],{},[173,644,509],{},[173,646,574],{},[173,648,362],{},[173,650,651],{},"排序值",[77,653,654],{},[15,655,656],{},"只传需要更新的字段即可，未传的字段保持原值不变。",[15,658,659],{},[39,660,370],{},[372,662,665],{"className":663,"code":664,"language":377,"meta":378},[375],"{\n    \"code\": 0,\n    \"msg\": \"updated\",\n    \"data\": {\n        \"lid\": \"1\",\n        \"name\": \"已更新名称\",\n        \"url\": \"https:\u002F\u002Fupdated.com\",\n        \"sort\": \"friend\",\n        \"image\": \"\",\n        \"description\": \"\",\n        \"user\": \"\",\n        \"order\": \"1\"\n    }\n}\n",[72,666,664],{"__ignoreMap":378},[192,668,670],{"id":669},"_4-删除友链-delete","4. 删除友链 (delete)",[15,672,673],{},[39,674,307],{},[152,676,677,689],{},[155,678,679],{},[158,680,681,683,685,687],{},[161,682,316],{},[161,684,319],{},[161,686,322],{},[161,688,166],{},[168,690,691,704,714],{},[158,692,693,695,697,699],{},[173,694,226],{},[173,696,333],{},[173,698,336],{},[173,700,339,701],{},[72,702,703],{"code":703},"delete",[158,705,706,708,710,712],{},[173,707,217],{},[173,709,333],{},[173,711,336],{},[173,713,149],{},[158,715,716,718,720,722],{},[173,717,505],{},[173,719,574],{},[173,721,336],{},[173,723,724],{},"要删除的链接 ID",[15,726,727],{},[39,728,370],{},[372,730,733],{"className":731,"code":732,"language":377,"meta":378},[375],"{\n    \"code\": 0,\n    \"msg\": \"deleted\",\n    \"data\": null\n}\n",[72,734,732],{"__ignoreMap":378},[90,736],{},[93,738,739],{"id":739},"调用示例",[192,741,743],{"id":742},"curl","cURL",[372,745,750],{"className":746,"code":748,"language":749,"meta":378},[747],"language-bash","# 查询全部友链\ncurl \"https:\u002F\u002F你的域名\u002Faction\u002Fpal-api?do=list&token=你的令牌\"\n\n# 按分类筛选\ncurl \"https:\u002F\u002F你的域名\u002Faction\u002Fpal-api?do=list&token=你的令牌&sort=friend\"\n\n# 添加友链\ncurl -X POST \"https:\u002F\u002F你的域名\u002Faction\u002Fpal-api\" \\\n  -d \"do=add&token=你的令牌&name=我的博客&url=https:\u002F\u002Fmyblog.com&sort=friend&description=欢迎来访\"\n\n# 更新友链\ncurl -X POST \"https:\u002F\u002F你的域名\u002Faction\u002Fpal-api\" \\\n  -d \"do=update&token=你的令牌&lid=1&name=新名称\"\n\n# 删除友链\ncurl -X POST \"https:\u002F\u002F你的域名\u002Faction\u002Fpal-api\" \\\n  -d \"do=delete&token=你的令牌&lid=1\"\n","bash",[72,751,748],{"__ignoreMap":378},[192,753,755],{"id":754},"php","PHP",[372,757,761],{"className":758,"code":760,"language":754,"meta":378},[759],"language-php","$apiUrl = 'https:\u002F\u002F你的域名\u002Faction\u002Fpal-api';\n$token = '你的令牌';\n\n\u002F\u002F 查询\n$response = file_get_contents(\"$apiUrl?do=list&token=$token\");\n$result = json_decode($response, true);\n\n\u002F\u002F 添加\n$data = http_build_query([\n    'do'     => 'add',\n    'token'  => $token,\n    'name'   => '新博客',\n    'url'    => 'https:\u002F\u002Fnewblog.com',\n    'sort'   => 'friend',\n]);\n$context = stream_context_create([\n    'http' => [\n        'method'  => 'POST',\n        'header'  => 'Content-Type: application\u002Fx-www-form-urlencoded',\n        'content' => $data,\n    ]\n]);\n$response = file_get_contents($apiUrl, false, $context);\n$result = json_decode($response, true);\n",[72,762,760],{"__ignoreMap":378},[192,764,766],{"id":765},"python","Python",[372,768,772],{"className":769,"code":771,"language":765,"meta":378},[770],"language-python","import requests\n\napi_url = 'https:\u002F\u002F你的域名\u002Faction\u002Fpal-api'\ntoken = '你的令牌'\n\n# 查询\nresp = requests.get(api_url, params={'do': 'list', 'token': token})\nprint(resp.json())\n\n# 添加\nresp = requests.post(api_url, data={\n    'do': 'add', 'token': token,\n    'name': '新博客', 'url': 'https:\u002F\u002Fnewblog.com', 'sort': 'friend',\n})\nprint(resp.json())\n\n# 更新\nresp = requests.post(api_url, data={\n    'do': 'update', 'token': token, 'lid': 1, 'name': '新名称',\n})\nprint(resp.json())\n\n# 删除\nresp = requests.post(api_url, data={\n    'do': 'delete', 'token': token, 'lid': 1,\n})\nprint(resp.json())\n",[72,773,771],{"__ignoreMap":378},[90,775],{},[93,777,778],{"id":778},"数据表结构",[15,780,781,782,784,785,788],{},"本插件使用原 Links 插件的 ",[72,783,74],{"code":74}," 表（前缀 ",[72,786,787],{"code":787},"typecho_"," 为默认值，实际以站点配置为准）：",[152,790,791,802],{},[155,792,793],{},[158,794,795,798,800],{},[161,796,797],{},"字段",[161,799,319],{},[161,801,166],{},[168,803,804,814,823,831,839,847,855,863],{},[158,805,806,808,811],{},[173,807,505],{},[173,809,810],{},"INT \u002F INTEGER",[173,812,813],{},"主键，自增",[158,815,816,818,821],{},[173,817,432],{},[173,819,820],{},"VARCHAR(200)",[173,822,439],{},[158,824,825,827,829],{},[173,826,444],{},[173,828,820],{},[173,830,600],{},[158,832,833,835,837],{},[173,834,357],{},[173,836,820],{},[173,838,462],{},[158,840,841,843,845],{},[173,842,467],{},[173,844,820],{},[173,846,474],{},[158,848,849,851,853],{},[173,850,479],{},[173,852,820],{},[173,854,486],{},[158,856,857,859,861],{},[173,858,491],{},[173,860,820],{},[173,862,498],{},[158,864,865,867,870],{},[173,866,509],{},[173,868,869],{},"INT",[173,871,872],{},"排序值，数值越小越靠前",[90,874],{},[93,876,877],{"id":877},"常见问题",[15,879,880],{},[39,881,882,883,886],{},"Q: 调用 API 返回 ",[72,884,885],{"code":885},"{\"code\":1,\"msg\":\"Token verification failed\"}"," 怎么办？",[15,888,889,890,892],{},"A: 请检查后台插件设置中是否正确配置了访问令牌，以及请求参数中的 ",[72,891,217],{"code":217}," 是否与设置值完全一致。",[15,894,895],{},[39,896,897],{},"Q: 提示「Link not found」？",[15,899,900,901,903,904,906],{},"A: 请检查传入的 ",[72,902,505],{"code":505}," 是否正确。可以使用 ",[72,905,342],{"code":342}," 操作查看所有链接及其 ID。",[15,908,909],{},[39,910,911],{},"Q: 是否需要先安装原 Links 插件？",[15,913,914,915,917],{},"A: 需要有 ",[72,916,74],{"code":74}," 数据表。可以先安装原 Links 插件让其自动建表，或者手动创建该表。",[15,919,920],{},[39,921,922,923,925],{},"Q: 为什么插件目录名必须是 ",[72,924,87],{"code":87},"？",[15,927,928,929,932,933,936,937,940,941,944],{},"A: Typecho 1.2.1 的 ",[72,930,931],{"code":931},"Plugin::portal()"," 方法直接将目录名用于 PHP namespace（如 ",[72,934,935],{"code":935},"\\Plugin\\PALAutoLinks\\Plugin","），而 PHP namespace 不能包含连字符 ",[72,938,939],{"code":939},"-","。原始目录名 ",[72,942,943],{"code":943},"PAL-PAL-Auto-Links"," 含连字符会导致类加载失败。",[15,946,947],{},[39,948,949],{},"Q: 支持同时操作多条记录吗？",[15,951,952],{},"A: 目前每个请求只能操作一条记录。如需批量操作，请多次调用 API。",{"title":378,"searchDepth":954,"depth":954,"links":955},4,[956,958,959,968,973,974],{"id":95,"depth":957,"text":95},2,{"id":143,"depth":957,"text":143},{"id":189,"depth":957,"text":190,"children":960},[961,963,964,965,966,967],{"id":194,"depth":962,"text":194},3,{"id":242,"depth":962,"text":242},{"id":298,"depth":962,"text":299},{"id":383,"depth":962,"text":384},{"id":523,"depth":962,"text":524},{"id":669,"depth":962,"text":670},{"id":739,"depth":957,"text":739,"children":969},[970,971,972],{"id":742,"depth":962,"text":743},{"id":754,"depth":962,"text":755},{"id":765,"depth":962,"text":766},{"id":778,"depth":957,"text":778},{"id":877,"depth":957,"text":877},[976],"开发","2026-08-04 22:34:17","PAL Auto Links 插件的使用文档：基于原 Links 插件的数据表，为 Typecho 提供友链远程增删改查 API。涵盖安装（目录须重命名为 PALAutoLinks）、令牌配置、接口地址与查询、添加、更新、删除友链的调用示例。",false,"md",null,{"slots":983},{},true,"\u002Fpost\u002Fpal-auto-link-docs",{"text":987,"minutes":988,"time":989,"words":990},"7 min read",6.81,408600,1362,{"title":5,"description":978},{"loc":985},"post\u002Fpal-auto-link-docs",[],"tech","wFsYA-f-cuUpc7dYg_7zQ6nzE82XEuX1ctWQp9dQZ0A",[998,981],{"title":999,"path":1000,"stem":1001,"date":1002,"type":995,"children":-1},"PAL - API自动友链插件","\u002Fpost\u002Fpal-auto-link","post\u002Fpal-auto-link","2026-08-04 22:31:00",1793526966716]