Ghost CMS API への R インターフェイス
P粉134288794
2023-08-03 12:45:37
<p>組み込みの管理 API を使用して、R からローカルの Ghost CMS インスタンスに接続しようとしています。さまざまな言語での接続方法に関する優れたドキュメント (https://ghost.org/docs/admin-api/#token-authentication) がありますが、残念ながら R に関するドキュメントはありません。次のコードを作成しましたが、残念ながらテスト記事を作成しようとすると 401 エラーが発生します。ご協力をよろしくお願いいたします。 <br /><br />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 = ":"))
names(api_admin_key) <- c("id", "secret")
# ヘッダーとペイロードを準備する
iat <- as.integer(Sys.time())
ヘッダー <-
list(alg = 'HS256'、typ = 'JWT'、kid = api_admin_key[["id"]])
# トークンを作成します(デコードシークレットを含む)
ペイロード <-
jose::jwt_claim(iat = iat,
exp = iat 5 * 60、
aud = '/admin/')
トークン <-
jose::jwt_encode_hmac(
クレーム = ペイロード、
Secret = charToRaw(api_admin_key[["secret"]]),
サイズ = 256、
ヘッダー = ヘッダー
)
# 認証されたリクエストを送信して投稿を作成します
URL <- 'http://localhost:2368/ghost/api/admin/posts/'
headers <- c('Authorization' = past("Ghost", token))
body <- list(posts = list(
"タイトル" = 'Hello World',
"html" = "<p>投稿コンテンツ。作業中です...</p>",
「ステータス」=「公開済み」
)
)
httr::POST(url,
体=体、
エンコード = "json"、
httr::add_headers(.headers = headers))</pre>
<p><br /></p>
jwt_encode_hmac() に渡した Secret= パラメータに問題があるようです。 charToRaw 関数は 16 進数を理解できず、ASCII 文字コードのみを使用します。変換を行うには、既存の質問の hex_to_raw 関数の 1 つを使用する必要があります。ここでは関数を使用して変換を行っています。
リーリーまた、ヘッダーに alg と typ を指定する必要はありません。これらは関数によって自動的に追加されるためです。したがって、次を使用してトークンを構築できます:
リーリーhttps://jwt.io/ にあるデバッガーを使用して各トークンをテストしましたが、それらは同等であるようです。デバッガでは、16 進値「12bd18f2cd12」の Base64 エンコード値は「Er0Y8s0S」です。