Antara muka R ke Ghost CMS API
P粉134288794
2023-08-03 12:45:37
<p>Saya cuba menyambung ke contoh Ghost CMS tempatan daripada R menggunakan API Pentadbiran terbina dalam. Terdapat dokumentasi yang baik (https://ghost.org/docs/admin-api/#token-authentication) tentang cara menyambung dalam pelbagai bahasa, tetapi malangnya tiada dokumentasi untuk R. Saya telah menulis kod berikut tetapi malangnya saya menerima ralat 401 apabila cuba membuat artikel ujian. Sebarang bantuan amatlah dihargai. <br /><br />Kod R:</p><p><strong></strong></p>
<pre class="brush:php;toolbar:false;">api_admin_key <-
"xxxxxx:yyyyyyyyyyyyyyy"
api_admin_key <- unlist(strsplit(x = api_admin_key, split = ":"))
nama(kunci_admin_api) <- c("id", "rahsia")
# Sediakan pengepala dan muatan
iat <- as.integer(Sys.time())
pengepala <-
list(alg = 'HS256', typ = 'JWT', kid = api_admin_key[["id"]])
# Buat token (termasuk rahsia penyahkodan)
muatan <-
jose::jwt_claim(iat = iat,
exp = iat + 5 * 60,
aud = '/admin/')
token <-
jose::jwt_encode_hmac(
tuntutan = muatan,
rahsia = charToRaw(api_admin_key[["rahsia"]]),
saiz = 256,
pengepala = pengepala
)
# Buat permintaan yang disahkan untuk membuat siaran
url <- 'http://localhost:2368/ghost/api/admin/posts/'
pengepala <- c('Keizinan' = tampal("Hantu", token))
badan <- senarai(siaran = senarai(
"title" = 'Hello World',
"html" = "<p>Kandungan siaran saya. Kerja sedang dijalankan...</p>",
"status" = "diterbitkan"
)
)
httr::POST(url,
badan = badan,
encode = "json",
httr::add_headers(.headers = headers))</pre>
<p><br /></p>
Nampaknya masalahnya ialah dengan parameter secret= yang anda hantar ke jwt_encode_hmac(). Fungsi charToRaw tidak dapat memahami nombor perenambelasan, ia hanya menggunakan kod aksara ASCII. Untuk melakukan penukaran, anda perlu menggunakan salah satu fungsi hex_to_raw daripada soalan sedia ada. Saya menggunakan fungsi di sini untuk melakukan penukaran.
Selain itu, anda tidak perlu menentukan alg dan taip dalam pengepala kerana ini akan ditambah secara automatik oleh fungsi. Jadi anda boleh membina token anda menggunakan:
Saya menguji setiap token menggunakan penyahpepijat di https://jwt.io/ dan ia kelihatan setara. Dalam penyahpepijat, nilai dikodkan Base64 bagi nilai perenambelasan "12bd18f2cd12" ialah "Er0Y8s0S".