API経由でカスタムユーザーフィールドを更新する

ユーザーフィールドの値を更新する逆アセンブルを試みています。

Reverse engineer the Discourse API の手順に従って、テストユーザーを編集し、ブラウザの開発者ツールのネットワークタブで何が起こっているかをメモしました。

https://example.com/u/my-username-here.jsonPUT する必要があることがわかりました。

少し混乱したのは、JSONペイロードではなく、フォームデータであることです。ペイロードは次のとおりでした。 user_fields%5B1%5D=some+dji%2C+some+Autel\u0026user_fields%5B5%5D=%40UKDroneClub\u0026user_fields%5B6%5D=%40iKiteFlyer\u0026user_fields%5B8%5D=test\u0026timezone=Europe%2FLondon\u0026default_calendar=none_selected

1つのユーザーフィールド値のみを更新したいです。

URLエンコードされています: user_fields%5B8%5D=test

デコードすると、次のようになります: user_fields[8]=test

(8 = 更新したいユーザーフィールドのID)

このフォームデータ値をJSONペイロードに変換して、 PUT できるようにするにはどうすればよいですか? :thinking:

「いいね!」 2

ユーザープロフィールの「自己紹介」セクションはAPI呼び出しで更新できるのですが、user_fields を更新できません。何が間違っているのかわかりません。

ユーザーを編集する際にブラウザを監視すると、以下の PUT が表示されます。

bio_raw=aboutmetest&user_fields%5B1%5D=some+dji%2C+some+Autel&user_fields%5B5%5D=%40UKDroneClub&user_fields%5B6%5D=%40iKiteFlyer&user_fields%5B8%5D=qwerty&timezone=Europe%2FLondon&default_calendar=none_selected

PUT API呼び出しを行うために、以下のコードを使用しています。

' ヘッダーを追加
request.AddHeader("Content-Type", "application/x-www-form-urlencoded")
request.AddHeader("Accept", "application/json")
request.AddHeader("Api-Key", strAPIKey)
request.AddHeader("Api-Username", strUsername)

' フォーム本文パラメータを追加
request.AddParameter("bio_raw", DateTime.Now())
request.AddParameter("user_fields%5B8%5D", DateTime.Now())
'request.AddParameter("user_fields[8]", DateTime.Now())

API呼び出しを行うたびに、bio_raw の値は(テストとして)現在のタイムスタンプに更新されます。

しかし、なぜか user_fields[8] の値はまったく更新されません。エラーはなく、更新されないだけです。

URLエンコードされた user_fields%5B8%5D とプレーンテキストの user_fields[8] の両方を試しましたが、どちらも効果はありませんでした。

何か明らかなことを見落としていますか? :thinking:

アーーーッッッ :man_facepalming:

はい、そうでした。

これです:

API呼び出しがユーザーによって実行されたときに、user_fieldの編集を防ぎます。

もちろん、そうなります :exploding_head:

API呼び出しをやり直して system で実行すると、正常に動作します :roll_eyes:

「いいね!」 6

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.